Utilisateur:DroopigBot
Ce compte est celui d'un bot appartenant à Droop (d · c · b).
Ce n'est pas un faux-nez, il est employé par des programmes automatiques ou semi-automatiques qui aident son propriétaire à effectuer des modifications répétitives trop longues à faire manuellement.
Cet ancien bot autorisé ne sert plus et ne fera plus de modifications ici.
Cliquez ici pour voir les contributions effectuées par le bot.
Administrateurs : si ce bot est en flagrant délit de mauvais fonctionnement voire de destruction d’articles, prière de le bloquer.
Non-administrateurs, en cas de dommages à grande échelle, déposez un message sur la page de discussion du bot, s'il ne cesse pas de fonctionner, contactez un administrateur pour le bloquer.
Utilisation de DroopigBot
[modifier | modifier le code]Mise à jour population
[modifier | modifier le code]Ci-dessous, quelques exemples de lancement du bot :
- Simulation et nombre limité de mise à jour :
php update_commune_population.php \ --town-listing ./conf/liste_commune_17.lst --population-listing ./conf/population_17.csv --year 2006 \ --message-template "Mise à jour population avec les chiffres de l'Insee 2006" \ --year-wikification-msg "Wikification du lien 2006 dans l'infoboxe" --density-msg "Mise à jour densité"
- Pas de simulation et nombre illimité de mise à jour :
php update_commune_population.php \ --town-listing ./conf/liste_commune_17.lst --population-listing ./conf/population_17.csv --year 2006 \ --message-template "Mise à jour population avec les chiffres de l'Insee 2006" \ --year-wikification-msg "Wikification du lien 2006 dans l'infoboxe" --density-msg "Mise à jour densité" \ --edit-count 0 --no-simulation
Pour info, voici à quoi ressemble la sortie du bot lors d'une mise à jour sur les villes de Charente-Maritime :
- Lancement du programme :
Loading towns name Loading population count by town Parsing population count Checking data integrity between town and population count .[...].. Good news ! Population count seems fine (472 towns).
- Exemple de sortie du script sur une commune sans mise à jour :
Processing 'Agudelle' in progress ... cache content * Population is up to date => try to wikify year. * Nothing to do for 'Agudelle'
- Ici, un autre exemple avec mise à jour de la population :
* Updating article for 'Boscamnant'. Warning : Current template for 'Boscamnant' if not up to date ** Need to update article 'Boscamnant' (Mise à jour population avec les chiffres de l'Insee 2006): 20,21c20,21 < |sans=346 < |date-sans=[[1999]] --- > |sans=336 > |date-sans=[[2006]]
- Mise à jour population + densité (sur une 'vieille' infoboxe ne gérant pas la densité) :
* Updating article for 'La Clotte'. Warning : Current template for 'La Clotte' if not up to date * Updating density (population = 531 / area = 17.84). => new density : 30 (old : 27) ** Need to update article 'La Clotte' (Mise à jour population avec les chiffres de l'Insee 2006 + Mise à jour densité): 20,22c20,22 < |sans=490 < |date-sans=[[1999]] < |dens=27|}} --- > |sans=531 > |date-sans=[[2006]] > |dens=30|}}
- Mise à jour densité + population sur une commune utilisation le modèle 'Infobox Communes de France' (suppression du champ 'dens') :
Processing 'Coivert' in progress ... cache content * Updating article for 'Coivert'. Good ! 'Coivert' use 'Infobox Communes de France' template. Warning ! 'Coivert' use 'dens' field with the template 'Infobox Communes de France' => dropping 'dens' field ** Need to update article 'Coivert' (Mise à jour population avec les chiffres de l'Insee 2006): 18,20c18,20 < |sans=219 < |date-sans=1999 < |dens=14 --- > |sans=228 > |date-sans=[[2006]] >
Code source
[modifier | modifier le code]Le fonctionnement du bot repose sur les éléments suivants :
- la classe DroopigBot (s'appuyant elle même sur Snoopy) : robot.php
- le script à proprement parlé du bot de mise à jour : update_commune_population.php
- un fichier de listing des communes à mettre à jour : liste_commune_17.lst
- un fichier de mise à jour des valeurs des populations des communes : population_17.csv
Pour info, le code source est également hébergé sur google code sous subversion à l'emplacement suivant : [1]
classe DroopigBot (robot.php)
[modifier | modifier le code]Le Bot utilise la classe Snoopy. Le code source se trouve à l'emplacement suivant : [2].
Script de mise à jour de la population (update_commune_population.php)
[modifier | modifier le code]Le code source est disponible à l'adresse suivante : update_commune_population.php
Son fonctionnement se fait à l'aide de la commande php update_commune_population.php. Ci-dessous le résultat de la commande avec l'option --help :
$ php update_commune_population.php --help Hi ! My name is DroopigBot. I'm a wikipedia robot which is capable to update population count in town articles. To do my work, I'm need to have two files : - one for towns article name - another with population count by town Usage for DroopigBot : -h --help Display this message then exit --no-simulation Write for real modification. USE THIS WITH CARE !!! --town-listing <FILE> Use <FILE> as town listing --population-listing <FILE> Use <FILE> as population listing --message-template '<MSG>' Use '<MSG>' as update messages --density-msg '<MSG>' Use '<MSG>' as message when changing density --year-wikification-msg '<MSG>' Message to use if not updating population but wikifying year (ie: 2006 -> [[2006]) --edit-count <COUNT> Set max edition count to <COUNT> (0 = no limitation) --year <YEAR> Use <YEAR> as year of the update --verbose Verbose mode
Pour info, ci-dessous l'algorithme de principe de fonctionnement du robot :
- Gestion des options de la ligne de commnade
- Positionnement des options en fonction des lignes de commandes (simulation, mode verbeux)
- Vérification de certains paramètres (nombre d'édition max, message de mise à jour)
- Vérification des deux fichiers de population et de liste des articles
- Chargement et fusion des fichiers de population et du nom des articles
- Vérification de l'intégrité des données : chaque ville doit posséder une valeur pour sa population
- Boucle principal de traitement - pour chaque article faire :
- Update du cache local du contenu de l'article de la ville
- Vérification qu'il ne s'agit pas d'un REDIRECT. Si c'est le cas => arrêt du traitement.
- Vérification de la taille de l'article. Si trop petit (inférieur à 100 octets) => arrêt du traitement.
- Mise à jour de la population.
- Si quelque chose à changer
- Changement de la date de l'année du recensement dans l'article + wikification de l'année.
- Création d'un fichier avec le nouveau contenu.
- comparaison à l'aide de diff du contenu.
- Si changement supérieur à 0 lignes et inférieur à 3 lignes et pas de simulation
- update de l'article.
- Si quelque chose à changer
- Fin de boucle
Extrait du fichier de la liste des communes (liste_commune_17.lst)
[modifier | modifier le code]Agudelle Aigrefeuille-d'Aunis Allas-Bocage [...] Voissay Vouhé (Charente-Maritime) Yves (Charente-Maritime)
Emplacement du fichier complet : [3].
Nb : Droop, il faudrait étudier l'intérêt d'utiliser des données directement intégrées dans le wiki (plus de fichier externe et données accessibles directement depuis le wiki).
Extrait du fichier des populations/communes (population_17.csv)
[modifier | modifier le code]"Agudelle",114 "Aigrefeuille-d'Aunis",3523 "Allas-Bocage",175 "Allas-Champagne",224 [...] "Vinax",62 "Virollet",256 "Virson",635 "Voissay",146 "Vouhé",549 "Yves",1359
Emplacement du fichier complet : [4].
Même remarque que précédemment.
Outils annexes
[modifier | modifier le code]Afin de faire nos tests tranquillement sans tout péter, nous avons également écrit un outil permettant de faire un export/import automatique d'article de wikipedia dans un wiki en local. Cet outil est disponible à l'adresse suivante : copy_article.php.template.
Pour s'en servir, deux choses à faire :
- Modifier l'extension du fichier en .php.
- Modifier la chaîne de connexion à l'utilisateur des deux wikis (le maître et le destinataire) :
- $robot_wiki = new DroopigBot("Account", "pass", "http://fr.wikipedia.org/w") : Objet utilisé pour la connexion à wikipedia (en lecture seule).
- $robot_local = new DroopigBot("Account", "pass", "http://localhost/wiki") : Objet utilisé pour l'import de la liste des articles.
Modifier éventuellement le fichier "./conf/liste_commune_17.lst" afin d'y mettre la liste des articles à synchroniser. Vous pouvez éventuellement changer le nom du fichier. Une fois votre configuration terminée, vous pouvez lancer l'import dans votre wiki en local :
php copy_article.php
Suivi des bugs du bot
[modifier | modifier le code]Erreur sur les populations avec un espace
[modifier | modifier le code]Exemple : [5]
Origine : l'expression régulière attend un nombre. Malheureusement, il y avait également un espace dans le nombre pour marquer les milliers.
Solution : Changement de l'expression régulière de remplacement :
- avant :
$new_content = preg_replace("/(\s*\|\s*sans\s*=\s*)(\d+)?/", "\${1}".$count[$to_look], $commune_content);
$new_content = preg_replace("/(\s*\|\s*date-sans\s*=\s*)(.+)?/", "\${1}[[2006]]", $new_content);
- après :
$new_content = preg_replace("/(\s*\|\s*sans\s*=\s*)(\d[\s\d]+)?/", "\${1}".$count[$to_look], $commune_content);
$new_content = preg_replace("/(\s*\|\s*date-sans\s*=\s*)(.+)?/", "\${1}[[2006]]", $new_content);