Wikipédia:Créer un bot

Une page de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

Les robots ou bots sont des contributeurs particuliers de Wikipédia puisqu’ils interagissent selon des processus automatiques ou semi-automatiques. Cet article vous expliquera comment dresser votre propre bot pour l’utiliser sur Wikipédia.

Pourquoi créer un bot ?[modifier | modifier le code]

Les bots permettent d’automatiser des tâches répétitives et de les exécuter beaucoup plus rapidement qu’un humain. Si vous avez régulièrement besoin de réaliser des tâches répétitives (ajout d’un modèle, par exemple « bandeau portail » à toutes les pages d’une catégorie), il est plus adapté de les exécuter à l’aide d’un bot.

Qu'est-ce qu'un bot ?

Un bot est un programme qui s'exécute sur votre ordinateur — ou sur un ordinateur distant.
Dresser un bot consiste à programmer ce bot et à le faire fonctionner.

Que fait un bot ?

Comme vous, il opère sur le contenu de l'encyclopédie, en communicant ses opérations aux serveurs hébergeant Wikipédia par les méthodes du protocole http. Les différents types de communication consistent principalement en l'obtention (GET), la publication (POST), l'insertion (PUT) et la suppression (DELETE) de données.
Comme vous, le bot interfère avec la ressource Wikipédia dont il est un agent : Wikipédia lui envoie les informations dont il a besoin — telles que l'historique, le contenu ou des listes de pages — ; le bot les traite afin de déterminer les améliorations à leur apporter ; puis il interfère de nouveau avec Wikipédia pour opérer les améliorations.
Certains jouent aussi le rôle de majordome de salon IRC[1].

Il y a bien une différence tout de même ?!

Outre votre humanité et votre traitement réfléchi et volontaire des données de Wikipédia Clin d'œil, la différence se situe au niveau des interfaces :
  • Pour accéder au contenu, vous naviguez avec un navigateur web dans un affichage d'informations codées en langage XHTML (voir le code source de cette page dans le menu « Affichage » de votre navigateur).
  • Le bot, lui, récupère les données en utilisant l'interface de programmation de MediaWiki. Il accède ensuite par analyse syntaxique de ces données, codées en langage XML ou autres — JSON, YAML, WDDX, PHP sérialisé —, aux informations contenues.
Le bot communique donc par les canaux du Web pour obtenir de Wikipédia un accès aux données, dans le format que l'on souhaite manipuler.

Est-ce que je dois créer un bot moi-même ?[modifier | modifier le code]

Cette page d'aide est plus particulièrement destinée à ceux qui ont une certaine expérience de la programmation, mais ne sont pas sûrs de la façon d'appliquer ces connaissances à la création d'un bot Wikipédia.

Si cette expérience vous manque, mieux vaut faire appel aux bots existants. Des dresseurs expérimentés sauront traiter vos demandes (adaptation de bots, exécution de requêtes particulières) et sauront vous conseiller.

Sachez encore que vous pouvez également utiliser un logiciel semi-automatique comme Auto-Wiki Browser (gratuit) ou comme Robotic Easy (payant).

Si vous voulez néanmoins essayer de créer votre propre bot, alors cet article vous concerne.

Note : Si vous n'avez aucune expérience préalable de la programmation : il faut tout de même savoir que l'apprentissage d'un langage de programmation n'est pas trivial. Néanmoins, ce n'est pas non plus de la magie noire ! Avec suffisamment de temps et de travail, vous pourrez tout de même y parvenir !

Comment fonctionne un bot sur Wikipédia ?[modifier | modifier le code]

Vue d’ensemble[modifier | modifier le code]

Wikieditcycle.png

À l’instar d’un éditeur humain, un bot peut lire le contenu de Wikipédia, prendre des décisions en fonction du contenu et, le cas échéant, calculer les modifications puis modifier le contenu de Wikipédia. Toutefois, les ordinateurs sont plus efficaces que l'homme pour certaines tâches, mais moins bons pour d'autres. Ils sont plus rapides (les bots sont capables de modifier plusieurs pages par minute) et peuvent mener à bien des tâches répétitives, mais ils ne peuvent faire de modifications importantes sur le fond ou émettre des jugements de valeur pertinents sur le contenu de la page.

Comme un éditeur humain, un bot typique va interopérer avec Wikipédia au travers d'une ou plusieurs requêtes à Wikipédia via la méthode GET du protocole HTTP (tout comme un être humain le fait au travers de son navigateur), puis effectuer des manipulations sur les données renvoyées par le serveur. Si besoin, ce processus peut se répéter plusieurs fois de suite pour compléter le travail.

Par exemple, un bot peut demander au serveur la liste des pages contenant un lien vers une page spécifique ([[Special:Whatlinkshere|liste des pages contenant un lien vers une page spécifique]]) par une requête de type « Je veux Special:Whatlinkshere/Nom ». Le bot agira ensuite en fonction du contenu HTML renvoyé par le serveur.

Interfaces de programmation (API) pour les bots[modifier | modifier le code]

Les interface de programmation (API) décrivent les fonctions qui permettent d'interagir avec Wikipédia.

L'API la plus commune est la capture de données d'écran. Cela consiste à appeler la page Wikipédia, à en afficher le code HTML brut (à la manière d'un opérateur humain qui demande l'affichage du « code source » via son navigateur) pour en extraire les données intéressantes. Cette manière de faire n'est pas recommandée du fait que l'interface (et donc la structure de la page) peut changer à tout moment et que cela occasionne une forte charge du serveur. Mais c'est actuellement la seule façon de récupérer une page wiki formatée en HTML. C'est également le seul moyen de réaliser des éditions à partir de la page d'édition et faire une publication HTTP (POST) basée sur les informations du formulaire d'édition.

Vous pouvez passer {{{1}}}​ à la page index.php​ afin de réduire la quantité de données à transférer et la dépendance à l'interface utilisateur. D'autres paramètres d'index.php peuvent être utiles : Manual:Parameters to index.php est une liste partielle de ces paramètres et des valeurs qu'ils peuvent prendre.

D'autres API peuvent être utilisées :

  • MediaWiki API extension - C'est la nouvelle génération d'API qui devrait un jour être étendue pour inclure la publication de données (data posting) aussi bien que diverses requêtes sur les données. Aujourd'hui, un certain nombre de fonctionnalités ont été implémentées, telles que la révision de contenu, la journalisation des évènements, les listes de suivi et bien d'autres. Les données peuvent être traitées dans différents formats (JSON, XML, YAML, ...). Les fonctionnalités de l'ancienne interface (Query API) de requêtes ont également été portées.
    • Statut : les fonctions du moteur sont partiellement implémentées ; disponible sur tous les serveurs Wikimédia.
  • Fonctionnalités pour exporter des pages (export de données au format XML). Voir Parameters to Special:Export pour la liste de paramètres.
    • Statut : Production. Fonctionnalités des moteurs ; disponible sur tous les serveurs Wikimédia.
  • Pages natives (brutes) : en passant action=raw ou action=raw&templates=expand à index.php, on peut accéder directement au code source des pages.

Les serveurs Wikipédia sont configurés pour traiter les requêtes sur du contenu compressé au format (gzip). Ceci peut être fait en incluant une ligne « Accept-Encoding: gzip » dans l'en-tête de la requête HTTP. Si la réponse contient « Content-Encoding: gzip », le document est un document compressé, sinon, c'est un fichier au format ordinaire non-compressé ; ne pas vérifier l'entête de la réponse peut conduire à des résultats erronés (notez que cette fonctionnalité est spécifique aux serveurs Wikipédia. Elle n'est pas liée au logiciel MediaWiki. Les autres sites utilisant MediaWiki ne disposent pas forcément de la fonctionnalité).

Exemple[modifier | modifier le code]

API.php

L'interface de programmation (API) du service web (agent <-> ressource) Wikipédia est disponible ici : http://fr.wikipedia.org/w/api.php

Kézako ? Vous (ou votre robot) êtes un agent et Wikipédia est votre ressource. Vous communiquez avec elle via le protocole de requêtes http pour lui demander de vous envoyer certaines données (par exemple le contenu de toutes les pages d'une certaine catégorie, ou la liste des derniers inscrits) qui vous sont remises en XML ou en d'autres formats. Vous ou votre robot pouvez ensuite traiter ces données (par exemple chercher et corriger une faute d'orthographe parmi le texte des articles) puis de nouveau, via le protocole http, utiliser les commandes de l'API. Par exemple, pour remplacer du texte, il faut utiliser les commandes suivantes de l'API : action et ses paramètres login​ (pour vous connecter), query​ (pour obtenir le texte), edit​ (pour modifier ce texte) et sans doute quelques autres tels que minor​ (pour marquer votre modification comme étant mineure) et summary​ (pour inclure un résumé de votre modification).


Tools clipart.png Obtenir les informations à propos de la dernière révision de la page Accueil :

api.php ? action=query & prop=info|revisions & titles=Accueil

<?xml version="1.0"?>
<api>
  <query>
    <pages>
      <page pageid="3084756" ns="0" title="Accueil" touched="2009-05-14T15:23:48Z" lastrevid="40759274" counter="0" length="3405">
        <revisions>
          <rev revid="40759274" minor="" user="Xfigpower" timestamp="2009-05-11T11:35:43Z" comment="corr lien modèle" />
        </revisions>
      </page>
    </pages>
  </query>
</api>

Le 14 mai 2009 à 17:36 (CEST), le dernier revisionuser était Xfigpower (d · c · b) - cette information est contenue dans la chaîne « user="Xfigpower" » - le 11 mai 2009, qui a résumé sa modification par le commentaire « corr lien modèle ». Pour connaître le dernier réviseur de la page d'accueil en ce moment, cliquez sur le lien ci-dessus qui affiche ce document XML.

Connexion en tant que bot (fonctions d'écriture sur Wikipédia)[modifier | modifier le code]

Il est nécessaire pour un bot agréé de se connecter sous son compte utilisateur avant de pouvoir réaliser des éditions. Un bot est libre de faire des requêtes de lecture sans être connecté, mais il devrait idéalement se connecter pour toute activité.

Le bot peut se connecter de plusieurs manières (remplacer BOTUSERNAME et BOTPASSWORD par les valeurs adéquates) :

Une fois connecté, le bot doit sauvegarder les cookies Wikipédia et s'assurer qu'il les renvoie correctement lors des requêtes d'édition.

La réponse contient le paramètre cookieprefix qui contient le préfixe des noms des cookies de login à envoyer systématiquement pour toute nouvelle requête pour utiliser ce login. Ces cookies sont les suivants :

cookieprefixUserID (frwikiUserID pour Wikipédia en français)
Identifiant de l'utilisateur.
cookieprefixToken (frwikiToken pour Wikipédia en français)
Jeton de connexion utilisateur.
cookieprefixUserName (frwikiUserName pour Wikipédia en français)
Nom de l'utilisateur.
cookieprefix_session (frwiki_session pour Wikipédia en français)
Cet Identifiant de session est exigé pour réaliser effectivement l'édition (ou soumettre une modification) ; sinon, ce message apparaît.

Voir API:Login, Hypertext Transfer Protocol et Cookie HTTP pour plus de détails.

Jetons de modification (Edit tokens)[modifier | modifier le code]

Wikipedia utilise un système de jetons de modification ((en)edit tokens) lors de l'édition de pages et pour certaines autres opérations.

La conséquence est que votre bot ne peut envoyer directement de requête POST via HTTP pour éditer une page. À l'image d'un éditeur humain, il doit suivre un certain nombre d'étapes :

  • Appel de la page à l'aide d'une chaîne comme http://en.wikipedia.org/w/index.php?title=Wikipedia:Creating_a_bot&action=edit ou http://en.wikipedia.org/w/api.php?action=query&prop=info&titles=Wikipedia:Creating_a_bot&intoken=edit
  • Le bot reçoit une page d'édition avec un champ de texte. Il reçoit également (et c'est important) un jeton de modification, en tant que champ caché dans un code de formulaire html. Le jeton ressemble à quelque chose comme : b66655fjr7fd5drr3411ss23456s65eg\. Ce jeton est associé à la session PHP courante (identifiée par le jeton enwiki_session). Le même jeton peut être utilisé pour éditer d'autres pages, aussi longtemps que la session dure (en général quelques heures). Si vous utilisez l'API, il faut récupérer l'attribut edittoken.
  • Le bot doit ensuite réaliser l'opération de modification effective de la page en revoyant une requête adaptée accompagnée du jeton de modification.

Pourquoi ai-je reçu un jeton (quasiment) vide ?[modifier | modifier le code]

Il est possible que votre bot reçoive un jeton vide ou "+\". C'est une indication que le bot n'est pas connecté. Cela peut être dû à une erreur lors de l'authentification par le serveur, ou une erreur d'enregistrement et de restitution des cookies corrects.

Conflits d'édition[modifier | modifier le code]

Il y a une forte probabilité que votre bot soit confronté à des "conflits d'édition" : cela a lieu si un utilisateur réalise une édition entre le moment où vous faites une requête de modification (obtention du jeton d'édition) et celui où vous réalisez effectivement la modification. Un autre type de conflit d'édition concerne les éditions/suppressions de page, quand une page est détruite entre le moment où le formulaire d'édition de la page est ouvert et celui où il est publié.

L'erreur en résultant peut provoquer un résultat incorrect si la valeur de la variable wpEdittime figurant dans les données envoyées au serveur est fausse. Il en est de même pour la variable wpStarttime dans le cas de conflits d'édition/suppression.

Malheureusement, pour résoudre de tels conflits, vous aurez à vérifier le document HTML lui-même. De façon générale, si, lors de la soumission du formulaire, le serveur renvoie, dans l'en-tête (header) du fichier HTML, le code "200 OK", alors l'édition n'a pas été réalisée (quelle qu'en soit la raison : conflit, perte de jeton de session, protection, verrouillage de la base de données). En cas de succès, le serveur renvoie le code "302 Moved Temporarily", avec l'URL dans le champ Location.

Vue d'ensemble du processus de développement d'un robot[modifier | modifier le code]

ou Dressage de votre bot.

En fait, le codage ou l'écriture n'est qu'une partie du processus de développement. En règle générale, on peut suivre le cycle de développement ci-dessous. Des manques dans le respect de ce cycle, et particulièrement des sections concernant les règles de Wikipédia (on peut voir, pour information, la version anglaise, en:Wikipedia:Bot policy) peuvent aboutir à un rejet lors de la demande d'agrément du bot, ou au blocage de ses fonctions d'édition.

Vue d'ensemble du cycle de développement (Note : le texte du diagramme reste à traduire. Pour l'instant, les termes en anglais sont signalés dans les paragraphes qui suivent.)

Déterminer ses objectifs (analyse préliminaire)[modifier | modifier le code]

Tâches : Initial bot idea ; Discuss the specification with others.

La première question à se poser lorsqu’on veut créer un bot est de savoir à quoi il servira (identifier les exigences ou l'idée de départ). Si vous n'avez pas d'idées claires dans cette phase, il est possible de consulter les requêtes adressées aux bots.

Assurez-vous qu'il n'existe pas déjà de bot réalisant les fonctions que vous avez identifiées. Pour connaître les fonctionnalités déjà existantes, voir la Liste des bots actifs sur la Wikipédia francophone. Si c’est le cas, contactez-le dresseur pour lui demander des conseils et savoir comment son bot fonctionne.

Écriture de la spécification[modifier | modifier le code]

Tâche : Write the specification.

La spécification consiste à décrire précisément le logiciel à écrire, autant que possible de façon formalisée. Vous devriez aboutir à une proposition détaillée décrivant les actions que votre bot devra effectuer. Discutez de ce projet avec d'autres éditeurs, afin de recueillir des commentaires, qui vous permettront de raffiner votre proposition. Même une bonne idée peut être améliorée en intégrant les idées d'autres personnes.

Même dans sa forme la plus élémentaire, votre bot doit impérativement répondre au moins aux critères suivants :

  • le bot est inoffensif : il ne doit pas dégrader le contenu des articles (ce qui serait considéré comme du vandalisme) ;
  • le bot est utile : il fournit un service plus rapide mais tout aussi efficace et précis que ne l'aurait rendu un éditeur humain ;
  • le bot ne gaspille pas les ressources du serveur.

Assurez-vous que votre proposition est conforme à la politique Wikipédia pour les bots.

Proposer votre bot[modifier | modifier le code]

Tâche : Make a bot proposal.

À ce moment, il est nécessaire de faire quelques opérations de mise en place du projet :

  • Créez un compte enregistré spécifique à votre bot, car vous ne devez pas éditer en mode bot sous votre propre compte. Idéalement, le nom de votre bot devrait contenir « Bot », et vous devriez choisir un nom du type « Votrenomd’utilisateurBot » ;
  • Ajoutez ces informations à votre proposition et la publier dans les propositions de bot ;
  • Indiquez sur la page utilisateur de votre bot quels sont ses objectifs. N’oubliez pas de préciser que votre bot est en phase de test et qu’il n’est pas encore un bot officiel. Vous devriez également ajouter un lien vers la page d'approbation (quel que soit le statut courant) ;
  • Indiquez dans votre compte principal que vous êtes le dresseur de ce bot.

Votre proposition est alors commentée, et acceptée ou rejetée.

Architecture[modifier | modifier le code]

Tâche : Implement the bot (1).

  • Lors de cette tâche, vous devez penser Comment vous pourriez développer le programme et quels langages et outils de programmation vous pourriez utiliser. L'architecture s'attache à s'assurer que le système satisfera aux exigences et que des exigences futures pourront être prises en compte (évolutions et maintenance). Il y a différents types de bots (pour information, vous pouvez voir la page anglaise en:Wikipedia:Types of bots, non traduite).

Implémentation (Codage)[modifier | modifier le code]

Tâche : Implement the bot (2).

L'implémentation (ou codage) consiste à transformer la conception en code informatique. Elle peut apparaître comme la partie la plus visible de l'ingénierie logicielle, mais ce n'est pas forcément la phase la plus longue. Dans cette phase, vous devrez :

  • coder votre bot dans le langage de programmation de votre choix.

Tests[modifier | modifier le code]

Tâches : Test the bot ; Bot approved and deployed

Même accepté, votre bot passe d'abord par une période d'essai pendant laquelle il est utilisé afin d'effectuer des ajustements fins et de détecter et résoudre les problèmes.

Tant que votre bot n’aura pas le statut officiel de bot, vous devriez le tester à vitesse réduite (5 édits/minute) afin de pouvoir vérifier toutes ses modifications et l’arrêter si nécessaire.

Documentation[modifier | modifier le code]

Tâche : Documentation

Une tâche très importante (et souvent négligée) est de documenter la conception interne de votre bot à des fins de de maintenance et d'améliorations futures.

N’hésitez pas à expliquer en détail le fonctionnement de votre bot sur sa page utilisateur et d’y publier le code source. Ce code devrait être bien auto-documenté pour faciliter la tâche. Ainsi vous permettrez aux contributeurs qui voudraient dresser un bot similaire d’utiliser votre travail. Cette documentation vous servira aussi de pense-bête pour les futurs entretiens et perfectionnements de votre bot. Enfin cette documentation permettra aux contributeurs de savoir précisément les actions que votre bot peut réaliser et de vous suggérer éventuellement de nouvelles fonctions.

Si vous désirez partager vos codes et expérience avec d'autre dresseurs, vous pouvez aussi vous inscrire au Projet:Bot.

Soutien et entretien[modifier | modifier le code]

Tâche : Support and maintenance

Vous devez vous attendre à recevoir des questions, commentaires et objections sur votre page de discussion. Cela fait partie de la vie des bots.

Maintenir et améliorer votre bot pour corriger les problèmes qui sont découverts régulièrement ou pour implémenter de nouvelles exigences peut prendre beaucoup plus de temps que l'élaboration initiale du logiciel : le code à ajouter peut être incompatible avec la conception initiale (il faudra donc la modifier). D'autre part, reprendre un logiciel après un certain temps demande un effort important de compréhension de son fonctionnement.

Si vous introduisez de nouvelles fonctionnalités, vous devrez reprendre une série de tests. De même, si des évolutions majeures sont envisagées, il faudra repasser par le processus d'approbation. Enfin, votre bot devra être entretenu et adapté pour faire face aux évolutions régulières du logiciel MediaWiki.

Orientations générales concernant la mise en œuvre d'un bot[modifier | modifier le code]

En plus de la politique officielle des bots, qui couvre les principaux points à considérer lors de l'élaboration du robot, on peut donner un certain nombre de conseils plus généraux à prendre en compte lors du développement du bot.

Bonnes pratiques[modifier | modifier le code]

Quelques recommandations :

  • Évitez de faire plus de 10 requêtes (lecture et écriture confondues) par minute.
  • Privilégiez les heures creuses du serveurs pour lancer vos requêtes. Tout au moins, diminuez le taux de requêtes aux heures de pointe (la charge des serveurs peut être vérifiée avec le paramètre Maxlag ; voir (en) Maxlag parameter - non traduit).
  • Les requêtes d'écriture sont plus coûteuses en temps de traitement côté serveur que les requêtes de lecture. Limitez les éditions !
  • Ne pas effectuer de requêtes en parallèle : effectuer vos requêtes successivement.
  • Arrêter son bot lorsqu’il reçoit des messages d’erreur de la part des serveurs, ce qui est souvent une indication de surcharge des serveurs. Dans ce cas, il est inutile d'assaillir le serveur en multipliant les requêtes. Il vaut mieux différer le traitement.
  • Essayer de regrouper les modifications. Il est préférable de faire une grosse modification qu’une dizaine de petites. Écrivez et testez votre code en gardant ceci à l'esprit.
  • Utilisez l'extension Assert Edit qui donne au bot accès à quelques flags utiles (actif sur Wikipédia).

Quelques considérations de conception[modifier | modifier le code]

Vous devez vous poser certaines questions au moment de préciser la conception du bot :

  • est-il exécuté sur le serveur (server-side) ou sur le poste de l'utilisateur (client-side) ?
  • est-il entièrement automatisé ou nécessite-t-il des interventions manuelles ?
  • est-ce que les requêtes doivent être enregistrées ?
  • est-ce qu'un rapport sur ses actions doit être envoyé à un humain ?

Fonctionnalités communes qui devraient être mises en œuvre[modifier | modifier le code]

Limitation de la vitesse d'édition[modifier | modifier le code]

Votre bot ne devrait pas avoir une vitesse d'édition trop importante. Les timers sont une façon pour les bots de contrôler cette vitesse : ils permettent d’interdire à votre bot d’éditer pendant un certain temps après une action (patienter 10 secondes entre chaque édit par exemple). Dans le langage Perl, cela peut être réalisé avec la fonction sleep(10), où 10 représente le nombre de secondes d’inactivité du bot. En C#, vous pouvez utiliser Thread.Sleep(10000); qui fait le même chose (il faut préalablement effectuer la déclaration using System.Threading).

Interventions manuelles[modifier | modifier le code]

Dans certains cas, votre bot peut avoir besoin de l'intervention de l'homme. C'est en particulier le cas si des décisions complexes doivent être prises (par exemple, évaluation du contexte avant modification, correction d'orthographe ou de grammaire, etc.). Il faut alors mettre en place des dispositifs permettant l'intervention humaine pendant l'exécution du bot, en particulier la confirmation manuelle des modifications proposées automatiquement par le bot.

Désactivation du bot[modifier | modifier le code]

Il est souhaitable de disposer d'un moyen pour arrêter votre bot en cas de besoin. Vous pouvez par exemple programmer l’arrêt automatique de votre bot s’il a reçu un message sur sa page de discussion, en faisant l'hypothèse que cela pourrait être une plainte contre ses activités (tester la présence d’une bannière « Vous avez de nouveaux messages… » dans le code HTML). Pensez à expliquer sur cette page que tout nouveau message provoquera l’arrêt automatique de votre bot et proposez une autre page pour les suggestions d'amélioration, requêtes à intégrer, etc. (votre page de discussion, par exemple). Vous pouvez également avoir une page spécifique qui permettra d'arrêter le bot : insérez sur la page une balise True dont la valeur pourra être modifiée. À l'exécution du bot, il suffira de tester cette information avant chaque édition pour autoriser ou interdire le fonctionnement du bot.

Signature[modifier | modifier le code]

Comme tout contributeur, si un bot édite une page de discussion, il devra signer sa contribution de la façon classique, c'est-à-dire avec quatre tildes (~~~~). Néanmoins, un bot n'est pas obligé de signer ses contributions dans l’espace encyclopédique.

Quelle technique et quel langage employer ?[modifier | modifier le code]

Les outils semi-automatisés[modifier | modifier le code]

En complément des vrais bots, il existe des bots semi-automatisés qui sont à la disposition de tous. La plupart d'entre eux se présentent comme des ajouts aux navigateurs web, leur donnant des fonctionnalités supplémentaires. Ils permettent par exemple de charger une page, d’effectuer automatiquement des modifications, puis de les valider manuellement. Le plus populaire est le logiciel AutoWikiBrowser.

Voir aussi :

Les clones[modifier | modifier le code]

Il y a déjà beaucoup de bots sur Wikipédia, dont un certain nombre qui publient leur code source afin de vous permettre de les télécharger et d'en utiliser une copie (un clone) en vue de réaliser des tâches utiles en parcourant Wikipédia.

Pour cela, contactez les dresseurs concernés.

Développer un nouveau bot[modifier | modifier le code]

Les bots sont de petits programmes ou applets qui peuvent être écrits dans divers langages de programmation. On distingue généralement deux types de bots : ceux exécutés sur le poste client (client-side) et ceux exécutés sur le serveur (server-side). Les premiers sont uniquement exécutés par l'utilisateur via son navigateur, et à sa demande. Les seconds peuvent être hébergés sur votre propre machine ou sur un serveur externe et démarrent automatiquement en fonction des tâches que vous avez programmées. Vous pouvez aussi autoriser leur lancement par d’autres contributeurs.

Un aperçu des différents langages utilisables pour les bots de Wikipédia figure ci-dessous. Dans chaque cas, des références d'articles fournissant des conseils externes sont indiquées, ainsi que les bibliothèques logicielles utilisables (qui vous éviteront de réinventer la roue pour les fonctions de base).

Note : les références sont en anglais. Merci à ceux (celles) qui pourront trouver les équivalences en français.

Perl[modifier | modifier le code]

Perl est un langage interprété : il n'est pas nécessaire de compiler votre code, comme cela se fait pour la plupart des langages de programmation. Il suffit de créer le programme avec un éditeur adapté (par exemple gvim, mais il en existe bien d'autres) puis de l'exécuter au travers d'un interpréteur qui peut résider sur votre ordinateur ou sur un serveur Web distant. Dans ce dernier cas, vous pouvez lancer le programme depuis votre navigateur et communiquer avec lui au travers de l'interface CGI (Common Gateway Interface). Perl est disponible sur la plupart de systèmes d'exploitation, y compris Microsoft Windows (qui existe sur bien des postes individuels client) et UNIX (que l'on trouve sur de très nombreux serveurs Web). Si votre fournisseur d'accès Internet vous met à disposition un espace pour vos pages personnelles, il y a de grandes chances qu'il vous fournisse également un interpréteur Perl que vous pourrez utiliser pour exécuter vos programmes Perl.

  • Le processus :
Perlwikipedia.png
  • Exemple de code Perl :
open (INPUT, "< $filepageid") || &file_open_error("$filepageid");
 
while ($page_id=<INPUT>){
    chomp($page_id);
    push @page_ids, $page_id;
 
    $hits_upto_sth->execute($page_id, $start_date);
    $hits{upto}{$page_id} = $hits_upto_sth->fetchrow_array();
 
    $hits_daily_sth->execute($page_id, $today);
    $hits{today}{$page_id} = $hits_daily_sth->fetchrow_array();
 
    $hits_daily_sth->execute($page_id, $yesterday);
    $hits{yesterday}{$page_id} = $hits_daily_sth->fetchrow_array();
 
    $hits_range_sth->execute($page_id, $start_of_30_days,
                                       $end_of_30_days,);
    $hits{monthly}{$page_id} = $hits_range_sth->fetchrow_array();
}
  • Bibliothèques :
    • (en) Anura -- Interface Perl à base de MediaWiki libwww-perl. Note : cette interface n'est pas recommandée car elle ne traite pas les conflits d'édition.
    • (en) WWW::Mediawiki::Client -- Les modules Perl et la ligne de commande côté client
    • (en) WWW::Wikipedia -- Les modules Perl pour interfacer Wikipédia)
    • (en) Perl Wikipedia ToolKit -- Modules Perls, analyse du texte et extraction des données
    • (en) perlwikipedia : un environnement de développement à peu près complet développé en Perl pour Wikipédia.

PHP[modifier | modifier le code]

PHP peut également être utilisé pour programmer les bots. PHP est particulièrement adapté si vous désirez fournir à votre bot une interface basée sur les formulaires web. Par exemple, supposons que vous vouliez créer un bot pour renommer des catégories. Vous pourriez créer un formulaire HTML dans lequel vous pourriez saisir l'ancien et le nouveau nom de la catégorie. Au moment où le formulaire est envoyé, votre bot lit ces données, puis édite tous les articles contenant la catégorie courante avant de les déplacer dans la catégorie désirée (il faut évidemment que ce type de bots soient sécurisés contre les internautes qui pourraient y accéder par hasard).

Pour vous connecter à votre bot, vous devez savoir comment utiliser PHP pour envoyer et recevoir des cookies. Pour éditer avec votre bot, vous devez savoir comment envoyer des variables dans un formulaire. Des bibliothèques comme (en) Snoopy permettent de simplifier ces actions.

Bibliothèques :

  • (en) BasicBot - Un environnement basique avec des exemples de scripts pour les bots basé sur (en) Snoopy.
  • (en) SxWiki - Un environnement de développement extrêmement simple.
Article détaillé : Catégorie:Bot publié en PHP.

Python[modifier | modifier le code]

Juste une introduction...

  • Un exemple de code Python :
def addt5(x):
    return x+5
 
def dotwrite(ast):
    nodename = getNodeName()
    label=symbol.sym_name.get(int(ast[0]),ast[0])
    print ' %s [label="%s' % (nodename, label),
    if isinstance(ast[1], str):
        if ast[1].strip():
            print '= %s "];' % ast[1]
        else:
            print '"]'
    else:
        print '"]'
        children = []
        for n, child in enumerate(ast[1:]):
            children.append(dotwrite(child))
        print ' %s -> {' % nodename,
        for name in children:
            print '%s' % name,
Article détaillé : Catégorie:Bot publié en python.

Microsoft .NET[modifier | modifier le code]

Cet environnement comprend les langages C#, Managed C++, Visual Basic .NET, J#, JScript .NET, IronPython, et Windows PowerShell.

Il existe une version gratuite de Microsoft Visual Studio (Visual Studio Express), avec des fonctionnalités réduites.

using System;
using DotNetWikiBot;
 
class MyBot : Bot
{						            
     public static void Main()
     {  
         Site enWP = new Site("http://en.wikipedia.org", "myLogin", 
                              "myPassword");
         Page p = new Page(enWP, "Art");
         p.Load();
         p.AddToCategory("Visual arts");
         p.Save("comment: category link added", true);
 
         PageList pl = new PageList(enWP);
         pl.FillFromPageHistory("Science", 30);
         pl.LoadEx();
         pl.SaveXMLDumpToFile("Dumps\\ScienceArticleHistory.xml");
     }
}
  • Débuter avec .NET :
    • à compléter

Java[modifier | modifier le code]

Raccourci [+]
WP:JWBF

Souvent développé grâce à l'IDE Eclipse.

  • Exemple de code :
public static void main(String [] args) throws Exception {
     MediaWikiBot bot = new MediaWikiBot("http://en.wikipedia.org/w/");
     bot.login("user", "pw");
     SimpleArticle a = null;
     try {
          a = new SimpleArticle(bot.readContent("Main Page"));
     }catch(Exception e){
          System.out.println("The bot could not find the main page");
     }
     modifyContent(a);
     bot.writeContent(a);
}

Ruby[modifier | modifier le code]

RWikiBot est un environnement basé sur Ruby pour la création de bots. Actuellement, il est en cours de développement et a besoin de contributeurs. Il implémente l'API officielle MediaWiki et, de ce fait, présente un certain nombre de limitations.

  • Un exemple simple :
require "rubygems"
require "rwikibot"
 
# Créer un bot
bot = RWikiBot.new "TestBot", "http://site.tld/wiki/api.php"
 
# Authentification
bot.login
 
# Récupère le contenu de l'article "Cheval"
content = bot.content "cheval"

(en) Chicken Scheme[modifier | modifier le code]

Iron Chicken est une extension (appelée aussi egg) de Chicken Scheme (voir l'article anglais : en:Chicken Scheme) qui rend l'API de Mediawiki programmable au moyen des S-expressions, et permet de convertir les pages HTML et les contenus retournés par l'API en SXML (voir l'article anglais : en:SXML), de manière à les traiter plus facilement.

Un exemple simple qui récupère les articles d'une catégorie et les écrit dans une sous-page utilisateur :

Librairies :


JavaScript[modifier | modifier le code]

Article détaillé : Utilisateur:Dr_Bot/Scripts.

Références[modifier | modifier le code]

Sur les autres projets Wikimedia :