Wicri:Dilib source, module Wicri, commande WicriRecentChanges : Différence entre versions
De Wicri Outils
imported>William Tardot |
imported>William Tardot (→Code source) |
||
Ligne 13 : | Ligne 13 : | ||
Buffer *bd2; | Buffer *bd2; | ||
+ | // Fonction qui retourne la date du jour en format "AAAA-MM-JJ" | ||
char *DateDuJour() | char *DateDuJour() | ||
{ | { | ||
Ligne 28 : | Ligne 29 : | ||
int main() | 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); | |
− | |||
− | |||
− | |||
} | } | ||
</source> | </source> |
Version du 9 juillet 2020 à 12:19
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
cat testDilib/wiki.dict \
| ./testDilib/WicriExpandApiFromList \
-a "list=recentchanges&rcprop=title|ids|sizes|flags|user|timestamp&rclimit=3" \
| ./testDilib/WicriRecentChanges