Utilisateur:DroopigBot

Une page de Wikipédia, l'encyclopédie libre.

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.
  • 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);