Wicri:Dilib source, module Wicri, commande WicriStatistiquesSite
De Wicri Outils
Code source
/* -*- coding: utf-8 -*- */
/*
WicriStatistiquesSite.c
*/
#include <stdio.h> /* for printf */
#include <stdlib.h> /* for exit */
#include <getopt.h>
#include "SxmlNode.h"
#include "Buffer.h"
/* Cumul data */
int cumulPages;
int cumulArticles;
int cumulEdits;
int cumulImages;
int nWikis;
/* Process Options */
int cumulOnly; /* 0 = complete ; 1 = cumul only */
int statIntro()
{
printf("Cette page introduit les [[Wicri:Statistiques|statistiques]] volumétriques du réseau Wicri au ");
printf("%s", BufferFrenchDateOfTheDay());
printf(".\n");
printf("__TOC__\n");
return 0;
}
int listIntro()
{
printf("==Statistiques par wiki==\n");
printf ("{| class=\"wikitable sortable\" \n");
printf ("|- \n");
printf ("!Wiki\n");
printf ("!Pages\n");
printf ("!Articles significatifs\n");
printf ("!Modifications\n");
printf ("!Fichiers (images...)\n");
printf ("|- \n");
return 0;
}
int main(int argc, char **argv)
{
SxmlNode *apiNode ;
SxmlNode *queryNode;
SxmlNode *statNode;
Buffer *bufPrint;
char *pagesStr;
char *articlesStr;
char *editsStr;
char *imagesStr;
int pagesNum;
int articlesNum;
int editsNum;
int imagesNum;
int cOption;
cumulOnly=0;
while((cOption=getopt(argc,argv,"c"))!=EOF)
{switch (cOption)
{
case 'c':
cumulOnly=1;
break;
}
}
bufPrint=NewBuffer();
if (cumulOnly==0)
{
statIntro();
listIntro();
}
cumulPages=0;
cumulArticles=0;
cumulEdits=0;
cumulImages=0;
nWikis=0;
while ((apiNode=SxmlInputGetDocumentElement()))
{
queryNode=SxmlGetFirstChildByTagName(apiNode, "query");
if (!queryNode)continue;
statNode= SxmlGetFirstChildByTagName(queryNode, "statistics");
if (!statNode)continue;
pagesStr=SxmlGetAttribute(statNode,"pages");
articlesStr=SxmlGetAttribute(statNode,"articles");
editsStr=SxmlGetAttribute(statNode,"edits");
imagesStr=SxmlGetAttribute(statNode,"images");
if (cumulOnly==0)
{
printf ("|%s\n", SxmlInputRecordKey);
printf ("|{{formatnum:%s}}\n", pagesStr);
printf ("|{{formatnum:%s}}\n", articlesStr);
printf ("|{{formatnum:%s}}\n", editsStr);
printf ("|{{formatnum:%s}}\n", imagesStr);
printf ("|- \n");
}
pagesNum= atoi(pagesStr);
articlesNum= atoi(articlesStr);
editsNum= atoi(editsStr);
imagesNum= atoi(imagesStr);
cumulPages+=pagesNum;
cumulArticles+=articlesNum;
cumulEdits+=editsNum;
cumulImages+=imagesNum;
nWikis++;
};
if (cumulOnly==0) printf ("|}\n");
printf("==Statistiques cumulées==\n");
printf ("{| class=\"wikitable\" \n");
printf ("|- \n");
printf ("!Wikis<br/>(nombre)\n");
printf ("!Pages\n");
printf ("!Articles\n");
printf ("!Modifications\n");
printf ("!Fichiers\n");
printf ("|- \n");
printf ("|{{formatnum:%d}}\n", nWikis);
printf ("|{{formatnum:%d}}\n", cumulPages);
printf ("|{{formatnum:%d}}\n", cumulArticles);
printf ("|{{formatnum:%d}}\n", cumulEdits);
printf ("|{{formatnum:%d}}\n", cumulImages);
printf ("|- \n");
printf ("|}\n");
if (cumulOnly==1) exit(EXIT_SUCCESS);
printf("==Voir aussi==\n");
printf(";Sur ce wiki:\n");
printf("* [[Wicri:Statistiques/2020/ ... / .. |état précédent ( ... )]]\n");
printf("<!-- \n");
printf("* [[Wicri:Statistiques/2020/ ... / .. |état suivant ( ... )]]\n");
printf("-->\n");
printf("<!-- page précédente\n");
BufferStrcpy(bufPrint, "* [[Wicri:Statistiques/");
BufferAppendDirDateOfTheDay(bufPrint);
BufferStrcat(bufPrint, "|état suivant (.. ");
BufferAppendFrenchMonthOfTheDay(bufPrint);
BufferStrcat(bufPrint," ");
BufferAppendYearOfTheDay(bufPrint);;
BufferStrcat(bufPrint,")]]\n");
printf("%s",BufferString(bufPrint));
printf("-->\n");
printf("<!-- page d'accueil\n");
printf("* [[Wicri:Statistiques/");
printf(BufferDirFrenchDateOfTheDay());
printf("]]\n");
exit(EXIT_SUCCESS);
}
Mise en œuvre
Importation
WicriGetPage -l wicri-outils.fr -p "Wicri:Dilib source, module Wicri, commande WicriStatistiquesSite" \
| MediaWikiExtractSources -w | HfdStoreFile
Compilation
gcc testDilib/WicriStatistiquesSite.c $DILIB_CC -l curl -o testDilib/WicriStatistiquesSite
Test
- Pour visualiser la liste d'entrée
cat testDilib/wiki.dict \
| ./testDilib/WicriExpandApiFromList -a "meta=siteinfo&siprop=statistics" \
| SxmlIndent
- Pour tester
cat testDilib/wiki.dict \
| ./testDilib/WicriExpandApiFromList -a "meta=siteinfo&siprop=statistics" \
| ./testDilib/WicriStatistiquesSite
Voir le résultat en page Discussion
- Avec la version sous Dilib
( cat testDilib/wiki.dict \
| WicriExpandApiFromList -a "meta=siteinfo&siprop=statistics"
cat testDilib/statsPriv.list
) | WicriStatistiquesSite