Utilisateur:Esp2008/querypedia

Un article de Wikipédia, l'encyclopédie libre.

Commentaire
Cette page n'est pas à jour et ne décrit pas l'état actuel du projet.
Elle est conservée pour son intérêt historique.

querypedia (anciennement datapedia) est un ircbot qui permet de faire des requêtes d'extraction (select) sur la dernière sauvegarde de la base de wikipédia. querypedia n'est pas un jouet, ne l'utilisez que s'il vous est utile pour participer à l'amélioration de wikipédia (en cas d'abus, un système de mot de passe sera mis en place, et vous en aurez honte toute votre vie). Bien sûr, vous avez droit de faire des tests si vous souhaitez l'utiliser.

Sommaire

[modifier] Fonctionnement

[modifier] Envoyer une requête

Lorsque querypedia est connectée (en gros entre 6h30 et 18h30 CEST) sur le serveur utilisé par wikipédia, elle est présente sur le canal #fr.wikipedia. Si elle est ici, vous pouvez lui envoyer votre requête SQL en message privé (par exemple /msg querypedia SELECT count(cur_id) FROM cur WHERE cur_title = 'Esp2008'). Attention: querypedia n'accepte pas les requêtes multi-lignes, votre requête doit être envoyée en une seule fois.

[modifier] Requête non-utf8

Wikipédia, la base de données et querypedia sont en utf8. Si vous utilisez un autre jeu de caractères, vous pouvez le spécifier en remplaçant SELECT par SELECTencodage. Par exemple, pour compter le nombre de pages ayant pour titre 'Requêtes SQL' lorsque l'on est en jeu de caractères latin1, il faut utiliser la requête SELECTlatin1 count(cur_id) FROM cur WHERE cur_title = 'Requêtes SQL'. Cependant attention :

  • la page html donnant le résultat de la requête sera utf8
  • s'il y a plusieurs SELECT dans la requête (requêtes imbriquées), seul le premier doit comporter l'information sur le jeu de caractères

[modifier] Résultat d'une requête

Après l'envoi d'une requête, querypedia ne dit rien, ce qui peut sembler inquiétant. En fait, elle traite les demandes dans l'ordre où elles arrivent, donc vous devez attendre qu'elle exécute toutes les requêtes déjà faites avant la vôtre avant qu'elle ne vous réponde. S'il y a une erreur, elle vous l'indiquera par message privé, sinon vous devriez recevoir un message du type SUCCES: 1 reponses ont genere un fichier de 0.37890625 ko. Le resultat de la requete est disponible sur http://wiki-pedia.org/querypedia/res_esp2008_1115530285.html.

[modifier] Informations techniques

  • querypedia refusera de fournir le résultat d'une requète générant un fichier de plus de 500 ko
  • la version de MySQL utilisée est la 4.1.11, une des plus récentes, vous pouvez donc tenter des requêtes complexes
  • l'utilisateur MySQL de datpedia n'a de droits que sur la base wikipedia, et uniquement le droit select
  • querypedia enregistre toutes les demandes, toute gaminerie de pseudo-pirate boutonneux donnera lieu à une plainte au fournisseur d'accès en cas d'échec, à une plainte pénale en cas de succès
  • pour information, querypedia est écrit en perl, et utilise les modules DBI, NET:IRC, NET:FTP. Le cœur du programme a été écrit en une heure, c'est pour cela qu'il n'offre pas de possibilités très avancées.

[modifier] Bugs rencontrés

(vous pouvez compléter)

[modifier] Fonctionnalités souhaitées

(merci d'utiliser la page de discussion)

[modifier] Structure des tables

[modifier] tables disponibles

Les tables disponibles sont cur, brokenlinks, categorylinks, image, imagelinks, links, site_stats. La structure des tables est disponible [ici]. Vous pouvez trouver des exemples de requêtes SQL sur la page Wikipédia:Requêtes SQL pour voir un peu comment cela fonctionne (vous pouvez même compléter cette page si vous avez des suggestions de requêtes intéressantes, vous pouvez aussi corriger les mauvaises requêtes).

[modifier] cur_title

La colonne cur_title contient le titre d'une page, sans prendre en compte le namespace (voir ci-dessous). Attention, les espaces sont remplacés par des '_'. Par exemple, la page Wikipédia:Requêtes SQL a pour cur_title Requêtes_SQL.

[modifier] cur_namespace

Un truc pas évident lorsque l'on commence à utiliser la base est la gestion des namespaces. Si l'on cherche les articles dont le titre est Esp2008, on se rend compte que l'on a 2 réponses, alors que Esp2008 n'existe pas. En fait, il y a vraiment 2 pages qui se nomment Esp2008, l'une est Utilisateur:Esp2008, l'autre Discussion Utilisateur:Esp2008. Utilisateur et Discussion Utilisateur sont 2 namespaces parmi les 16 existants (gérés par la colonne cur_namespace), dont voici la liste complète:

  • 0 - les articles de l'espace encyclopédique
  • 1 - Discuter
  • 2 - Utilisateur
  • 3 - Discussion Utilisateur
  • 4 - Wikipédia
  • 5 - Discussion Wikipédia
  • 6 - Image
  • 7 - Discussion Image
  • 8 - MediaWiki
  • 9 - Discussion MediaWiki
  • 10 - Modèle
  • 11 - Discussion Modèle
  • 12 - Aide
  • 13 - Discussion Aide
  • 14 - Catégorie
  • 15 - Discussion Catégorie

[modifier] Petits cadeaux syntaxiques

[modifier] Regardez comme c'est gentil

Afin de simplifier vos requêtes, une colonne a été ajoutée à la table cur, wikiname. Celle-ci contient le nom de page complet (par exemple, la ligne avec cur_title='Esp2008' et cur_id='3' a wikiname='Discussion Utilisateur:Esp2008'. À partir de cette colonne, querypedia fournit des pseudo_colonnes, que vous pouvez utiliser comme n'importe quel champ de la table (mais avec modération):

  • wikilink, qui devient concat('[[',wikiname,']]')
  • wikisimplelink, qui devient concat('[[',wikiname,'|', cur_title,']]')
  • wikiurl qui devient concat('http://fr.wikipedia.org/wiki/index.php?title=',wikiname)
  • wikihref qui devient concat('<a href="http://fr.wikipedia.org/wiki/index.php?title=',wikiname,'">',wikiname,'</a>')

[modifier] Et un petit exemple

La requête à querypedia

SELECT cur_title, cur_namespace, wikiname, wikilink, wikisimplelink, wikiurl, wikihref FROM cur WHERE cur_title = 'Esp2008'

génère la requête sql

SELECT cur_title, cur_namespace, wikiname, concat('[[',wikiname,']]'), concat('[[',wikiname,'|', cur_title,']]'), concat('http://fr.wikipedia.org/wiki/index.php?title=',wikiname), concat('<a href="http://fr.wikipedia.org/wiki/index.php?title=',wikiname,'">',wikiname,'</a>') FROM cur WHERE cur_title = 'Esp2008'

et produit ce résultat