Gestion des images dans un réseau MediaWiki

De Wicri Outils

Nous décrivons ici un ensemble de procédures mises en œuvre lors du portage d'un ensemble de wikis d'un site (Loria) sur un autre (Inpl) et où nous avions décidé de dupliquer le pool d'images.

Le problème qui se pose est alors de comparer la liste des images utilisées dans un wiki avec celle du pool du site cible.

logo travaux le contenu de cette page est relativement ancien et donne plutôt des pistes que des solutions

Connaître la liste des images utilisées dans un wiki à partir d'un dump

Sauvegarde en Xml du wiki

Pour analyser le contenu du wiki, le plus simple est de partir d'un dump Xml de tout ou partie du wiki.

Sur un ensemble de pages

Si on souhaite ne travailler que sur un ensemble de pages, on peut utiliser la commande d'exportation. Par exemple, sur ce wiki : Special:Exporter. On obtient ainsi un fichier dont le nom est de la forme : Ticri+Outils-20100608154753.xml.


Sur un wiki au complet

Pour cela on a besoin :

  • De PHP5;
  • Des accès à la base de données;
  • Des droits d'exécution sur le répertoire maintenance du wiki;
  • Des droits d'écriture sur le fichier AdminSettings.sample (ou AdminSettings.php (voir plus bas)).

Vous devez vous connecter à votre serveur et aller dans le répertoire du wiki dont vous souhaitez exporter les pages. Si vous n'avez jamais fait d'opérations de maintenance, vous êtes censé posséder un fichier nommé AdminSettings.sample. Renommez le AdminSettings.php. Une fois cela fait, éditez le et modifiez les variables qui suivent avec les accès à la base de données (repérable dans le fichier LocalSettings.php)

$wgDBadminuser      = 'admin_du_wiki';
$wgDBadminpassword  = 'mp_de_l'admin_du_wiki';

Une fois cela fait, allez dans le répertoire maintenance et lancez la commande :

php dumpBackup.php --current > ~/dump.xml

Un fichier XML sera alors généré dans votre répertoire personnel. Il sera automatiquement mal formé, car cette opération crée des lignes supplémentaires au début du fichier :

X-Powered-By: PHP/5.1.2
Content-type: text/html

Il vous suffira de les supprimer.

Extraire la liste des images

Voici un exemple de code lex qui permet d'extraire des noms d'images :

%START IMAGE
%START IMAGE_MAP
%%
"[[Image:{{"          ;
"[[Image:"            BEGIN IMAGE;
"[[Fichier:"          BEGIN IMAGE;
"<imagemap>"    BEGIN IMAGE_MAP;
<IMAGE>"|"            {putchar('\n'); BEGIN 0;}
<IMAGE>\015           {putchar('\n'); BEGIN 0;}
<IMAGE>"]]"           {putchar('\n'); BEGIN 0;}
<IMAGE>.              ECHO;
<IMAGE_MAP>^"Image:"  BEGIN IMAGE;
.                     ;
\n                    ;
%%
main()
{
yylex();

Soit getImage.lex le nom du ficier source, il se compile alors par :

lex getImage.lex
gcc lex.yy.c -ll -o getImage

Il s'exécute par :

./getImage < Ticri+Outils-20100608154753.xml | sort -u


Connaître la liste des images manquantes par analyse de requêtes

Voici un exemple plus complet dans lequel on extrait deux listes d'images par des commandes en ligne.

Récupérer la liste des images d'un pool

Si le pool n'a pas un volume d'images trop important on peut téléverser la page Special:PrefixIndex par une commande cURL et obtenir la liste des images par une suite de commandes Dilib.

Par exemple, pour le pool Inpl, voici un ensemble de commandes shell qui utilisent les commandes SgmlSelect de la bibliothèque Dilib  :

POOL_INPL=http://ticri.inpl-nancy.fr/wicri.pool/index.php
curl $POOL_INPL?title=Special%3APrefixIndex\&from=\&namespace=6  2>/dev/null       \
    | SgmlStreamExtract -t body                                                    \
    | SgmlSelect -s body/div/div/div/div/table@id=mw-prefixindex-list-table -p @s1 \
    | SgmlSelect -s table/tr/td/a# -p @s1


Comparer la liste des images d'un pool avec les images les plus demandées

À partir de la version 1.15 de MediaWiki, on peut obtenir la liste des fichiers les plus demandés. Les exemples qui suivent montre comment extraire des listes d'images et les comparer.

Sur un wiki français :

. /var/www/ticri/Dilib/init.sh

POOL_INPL=http://ticri.inpl-nancy.fr/wicri.pool/index.php
WIKI=http://ticri.inpl-nancy.fr/wicri-als.fr/index.php

{
curl $WIKI?title=Sp%C3%A9cial:Fichiers_demand%C3%A9s\&limit=100\&offset=0 2>/dev/null  \
   | SgmlStreamExtract -t ol  \
   | SgmlSelect -s ol/li -p @s1    \
   | SgmlSelect -g li/a# -p @g1 -p wiki

curl $POOL_INPL?title=Special%3APrefixIndex\&from=\&namespace=6  2>/dev/null  \
    | SgmlStreamExtract -t body  \
    | SgmlSelect -s body/div/div/div/div/table@id=mw-prefixindex-list-table -p @s1 \
    | SgmlSelect -s table/tr/td/a# -p @s1 -p pool
} | sort |IndexBuildRec | SgmlSelect -g idx/f#1 -g idx/l/e#wiki

Sur un wiki en anglais (exemple Wicri/Water)

. /var/www/ticri/Dilib/init.sh

POOL_INPL=http://ticri.inpl-nancy.fr/wicri.pool/index.php
WIKI=http://ticri.inpl-nancy.fr/eau.en/index.php

{
curl $WIKI?title=Special:WantedFiles\&limit=100\&offset=0 2>/dev/null  \
   | SgmlStreamExtract -t ol  \
   | SgmlSelect -s ol/li -p @s1    \
   | SgmlSelect -g li/a# -p @g1 -p wiki

curl $POOL_INPL?title=Special%3APrefixIndex\&from=\&namespace=6  2>/dev/null  \
    | SgmlStreamExtract -t body  \
    | SgmlSelect -s body/div/div/div/div/table@id=mw-prefixindex-list-table -p @s1 \
    | SgmlSelect -s table/tr/td/a# -p File:@s1 -p pool
} | sort |IndexBuildRec | SgmlSelect -g idx/f#1 -g idx/l/e#wiki

Articles connexes

Voir aussi :