Wicri:Dilib source, module Wicri, commande WicriRecentChanges
De Wicri Outils
Code source
/* -*- coding: utf-8 -*- */
#include "SxmlNode.h"
#include <getopt.h>
#include "Buffer.h"
char *dateDebut;
Buffer *bd1;
Buffer *bd2;
// Fonction qui retourne la date du jour en format "AAAA-MM-JJ"
char *DateDuJour()
{
BufferReset(bd1);
BufferAppendIsoDateOfTheDay(bd1);
BufferReset(bd2);
BufferStrncpy(bd2, BufferString(bd1), 4);
BufferStrcat(bd2,"-");
BufferStrncat(bd2, BufferString(bd1)+4, 2);
BufferStrcat(bd2,"-");
BufferStrncat(bd2, BufferString(bd1)+6, 2);
return BufferString(bd2);
}
int main()
{
// Initialisation des variables
int compteur=0;
char *dateModif;
SxmlNode *docu ,*son;
bd1=NewBuffer();
bd2=NewBuffer();
dateDebut=DateDuJour();
printf("Date du jour : %s\n", dateDebut);
printf("Voici la liste des pages ayant été modifiées aujourd'hui :\n");
while ((docu=SxmlInputGetDocumentElement())) {
// Si 'docu' a au moins un fils, on le stock dans 'son'
if ((son=SxmlFirstChild(docu))){
// Boucle qui traite tous les fils de 'docu'
do{
// On regarde si un des fils de 'docu' est une balise 'query'
if(strcmp(SxmlNodeName(son),"query")==0){
// On regarde si le premier fils de 'son' est une balise 'recentchanges'
if(strcmp(SxmlNodeName(SxmlFirstChild(son)),"recentchanges")==0){
// On prend le premier fils de la balise 'recentchanges' qui s'appelle 'rc' et qui contient toutes les informations sur les modifications
SxmlNode *rc=SxmlFirstChild(SxmlFirstChild(son));
do{
dateModif=SxmlGetAttribute(rc,"timestamp"); // On récupère la date de la modification
if (strcmp(dateDebut,dateModif)<0){ // On calcule la différence entre la date du jour et celle de la modification
printf ("\t- Nom du Wicri : %s\n", SxmlInputRecordKey); // On affiche le nom du wicri concerné
compteur++; // On rajoute 1 au compteur de pages modifiées
// On affiche le nom de la page modifiée et l'utilisateur à l'origine de cette modification
printf("Page modifiée : %s, par %s.\n", SxmlGetAttribute(rc,"title"), SxmlGetAttribute(rc,"user"));
putchar('\n');}
}while(rc=SxmlNextSibling(rc)); // On répète la même opération pour chaque modification sur le wicri
}
}
}while((son=SxmlNextSibling(son)));
}
};
printf("%d pages ont été modifiées aujourd'hui.\n", compteur);
}
Mise en œuvre
Importation
WicriGetPage -l wicri-outils.fr -p "Wicri:Dilib source, module Wicri, commande WicriRecentChanges" \
| MediaWikiExtractSources -w | HfdStoreFile
Compilation
gcc testDilib/WicriRecentChanges.c $DILIB_CC -o testDilib/WicriRecentChanges
Test
- Sur les machines des stagiaires
cat testDilib/wiki.dict \
| ./testDilib/WicriExpandApiFromList \
-a "list=recentchanges&rcprop=title|ids|sizes|flags|user|timestamp&rclimit=3" \
| ./testDilib/WicriRecentChanges
- A partir de la version V0.6.35 de Dilib
cat testDilib/wiki.dict \
| WicriExpandApiFromList \
-a "list=recentchanges&rcprop=title|ids|sizes|flags|user|timestamp&rclimit=3" \
| ./testDilib/WicriRecentChanges