Wikipédia:Créer un bot
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 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 interagit 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 , 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 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 le code]Vue d’ensemble
[modifier le code]À 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 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 le code]MediaWiki possède une interface de programmation (API) qui permet aux programmes informatiques d'interagir avec Wikipédia. Les données peuvent être traitées dans différents formats, notamment JSON et XML. Le point d'entrée est la page https://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 https 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 https, utiliser les commandes de l'API.
Par exemple, pour remplacer du texte, il faut utiliser les commandes suivantes de l'API : action=login
(pour vous connecter), action=query
(pour obtenir le texte) et edit
(pour modifier ce texte). Sans requête spécifique, https://fr.wikipedia.org/w/api.php fournit une documentation complète de l'API, générée automatiquement. En parallèle, une documentation est maintenue sur le site de MediaWiki : mw:API:Main page/fr.
Les serveurs Wikipédia peuvent traiter les requêtes sur du contenu compressé au format gzip et renvoyer une réponse compressée. Il est recommandé d'autoriser la compression de la réponse en incluant une ligne « Accept-Encoding: gzip » dans l'en-tête de la requête HTTP. Dans ce cas, 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é).
Exemples
[modifier le code]Obtenir les informations à propos de la dernière révision de la page Accueil : |
api.php ? action=query & prop=info|revisions & rvprop=timestamp & titles=Accueil
<?xml version="1.0"?>
<api batchcomplete="">
<query>
<pages>
<page _idx="3216891" pageid="3216891" ns="0" title="Accueil" contentmodel="wikitext" pagelanguage="fr" pagelanguagehtmlcode="fr" pagelanguagedir="ltr" touched="2021-03-13T13:27:10Z" lastrevid="174749103" length="2249">
<revisions>
<rev timestamp="2020-09-15T17:43:26Z"/>
</revisions>
</page>
</pages>
</query>
</api>
Le 14 mai 2009 à 17:36 (CEST), le dernier contributeur à avoir modifié la page é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 contributeur de la page d'accueil en ce moment, cliquez sur le lien ci-dessus qui affiche ce document XML.
XML |
api.php ? action=query & titles=Albert%20Einstein & prop=info & format=xmlfm
<?xml version="1.0" encoding="utf-8"?>
<api>
<query>
<pages>
<page pageid="736" ns="0" title="Albert Einstein" touched="2007-07-06T04:37:30Z" lastrevid="142335140" counter="4698" length="86906" />
</pages>
</query>
</api>
JSON |
api.php ? action=query & titles=Albert%20Einstein & prop=info & format=jsonfm
{
"query": {
"pages": {
"736": {
"pageid": 736,
"ns": 0,
"title": "Albert Einstein",
"touched": "2007-07-06T04:37:30Z",
"lastrevid": 142335140,
"counter": 4698,
"length": 86906
}
}
}
}
PHP (serialized format, with line breaks added for readability. Use PHP's unserialize() function to recover data.) |
api.php ? action=query & titles=Albert%20Einstein & prop=info & format=php
a:1:{s:5:"query";a:1:{s:5:"pages";a:1:{i:736;a:7:{s:6:"pageid";i:736;s:2:"ns";i:0;s:5:"title";s:15:"Albert Einstein";
s:7:"touched";s:20:"2007-07-06T04:37:30Z";s:9:"lastrevid";i:142335140;s:7:"counter";i:4698;s:6:"length";i:86906;}}}}
Connexion en tant que bot (fonctions d'écriture sur Wikipédia)
[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) :
- via une requête POST passée en URL de la forme
http://fr.wikipedia.org/w/index.php?title=Special:Userlogin&action=submitlogin&type=login
en passant les donnéeswpName=BOTUSERNAME&wpPassword=BOTPASSWORD&wpRemember=1&wpLoginattempt=Log+in
- via API, en utilisant un URL comme
http://fr.wikipedia.org/w/api.php?action=login&lgname=BOTUSERNAME&lgpassword=BOTPASSWORD
. - pour des questions de sécurité, il est plus sûr d'utiliser le protocole HTTPS
https://fr.wikipedia.org/w/api.php?action=login
et d'envoyerlgname=BOTUSERNAME&lgpassword=BOTPASSWORD
avec la méthode POST.
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 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
ouhttp://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 jetonenwiki_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 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 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 (dressage de votre bot)
[modifier le code]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.
Déterminer ses objectifs (analyse préliminaire)
[modifier le code]Tâches : Idée initiale pour le bot ; Discutez de la spécification avec les autres.
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 le code]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 d'affiner 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 le code]À 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 le code]Tâche : Implémentez votre 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 le code]Tâche : Implémentez votre 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 le code]Tâches : Testez le bot ; Le Bot est approuvé et déployé
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 le code]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 le code]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 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 le code]Quelques recommandations :
- Évitez de faire plus de 10 requêtes (lecture et écriture confondues) par minute.
- Privilégiez les heures creuses des 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 reporter 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 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 le code]Limitation de la vitesse d'édition
[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 la même chose (il faut préalablement effectuer la déclaration using System.Threading
).
Interventions manuelles
[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 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 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 (~~~~).
Quelle technique et quel langage employer ?
[modifier le code]Les outils semi-automatisés
[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 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 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 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 :
- 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();
}
- Guides pour débuter en Perl :
- (en) A Beginner's Introduction to Perl (Perl pour les débutants)
- (en) CGI Programming 101: Learn CGI Today! (Programmation CGI 101 : Apprenez CGI aujoud'hui !)
- (en) Perl lessons (Cours de Perl)
- (en) Get started learning Perl (Démarrer en Perl)
- (fr) [1] (Apprendre le Perl)
- 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 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 :
- botclasses.php
- (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.
- (en) Peachy - Une interface de communication complète avec MediaWiki, supportant l'authentification OAuth. Documentation faible.
Python est un language de haut niveau, permettant de réaliser facilement et rapidement des scripts allant analyser ou éditer des pages de Wikipédia, en s'aidant des très nombreuses bibliothèques spécialisées.
- Commencer avec Python :
- (en) Official Python tutorial -- Tutoriel officiel de Python.
- (en) Beginner's Guide to coding in python -- Coder en Python pour les débutants.
- (fr) [2] -- Apprendre Python
- Bibliothèques :
- (fr) PyWikiBot, une librairie Python et une collection d'outils permettant d'automatiser des tâches sur les sites utilisant MediaWiki.
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.
- Exemple de code C# pour les bots (extrait de (en) DotNetWikiBot Framework) :
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
- Bibliothèques :
- (en) DotNetWikiBot Framework -- Une API propre et complète en C# disponible sour forme de dll qui permet de créer des programmes et des robots facilement afin de gérer les information sur les sites qui utilisent MediaWiki. Une documentation détaillée est disponible.
- (en) WikiFunctions .NET library - Livrée avec AWB, c'est une bibliothèque d'utilitaires pour les bots (générations de listes, chargement/édition d'articles, connexion aux IRC de chargement récents, et bien d'autres).
- (en) WikiAccess library -- Bibliothèque WikiAccess.
- (en) MediaWikiEngine -- Moteur MediaWiki utilisé par Commonplace upload tool.
- (en) Tyng.MediaWiki class library -- API MediaWiki API utilisée by NrhpBot.
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);
}
- Pour débuter avec Java :
- (en) Getting started -- débuter avec Java.
- Bibliothèques :
- (en) Java Wiki Bot Framework -- Environnement de développement Java pour les bots Wiki.
- en:User:MER-C/Wiki.java
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"
- Bibliothèques :
Iron Chicken est une extension (appelée aussi egg) de Chicken Scheme (en) 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 (en), 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 :
- (en) irnc-base
Références
[modifier le code]- (en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Wikipedia:Creating a bot » (voir la liste des auteurs).