Wicri:Dilib source, module Wicri, commande WicriStatistiquesSite : Différence entre versions
De Wicri Outils
imported>Jacques Ducloy |
(→Code source) |
||
(44 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 2 : | Ligne 2 : | ||
<source lang="c" dilib:file="testDilib/WicriStatistiquesSite.c"> | <source lang="c" dilib:file="testDilib/WicriStatistiquesSite.c"> | ||
/* -*- coding: utf-8 -*- */ | /* -*- coding: utf-8 -*- */ | ||
+ | /* | ||
+ | WicriStatistiquesSite.c | ||
+ | |||
+ | */ | ||
+ | |||
+ | #include <stdio.h> /* for printf */ | ||
+ | #include <stdlib.h> /* for exit */ | ||
+ | #include <getopt.h> | ||
#include "SxmlNode.h" | #include "SxmlNode.h" | ||
− | int main() | + | #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 *apiNode ; | ||
SxmlNode *queryNode; | SxmlNode *queryNode; | ||
SxmlNode *statNode; | SxmlNode *statNode; | ||
+ | |||
+ | Buffer *bufPrint; | ||
+ | |||
char *pagesStr; | char *pagesStr; | ||
+ | char *articlesStr; | ||
+ | char *editsStr; | ||
+ | char *imagesStr; | ||
+ | |||
int pagesNum; | 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())) | while ((apiNode=SxmlInputGetDocumentElement())) | ||
{ | { | ||
− | queryNode= | + | queryNode=SxmlGetFirstChildByTagName(apiNode, "query"); |
if (!queryNode)continue; | 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); | ||
} | } | ||
+ | |||
</source> | </source> | ||
Ligne 54 : | Ligne 197 : | ||
<source lang="sh"> | <source lang="sh"> | ||
cat testDilib/wiki.dict \ | cat testDilib/wiki.dict \ | ||
− | | ./testDilib/WicriExpandApiFromList -a "meta=siteinfo&siprop=statistics" | + | | ./testDilib/WicriExpandApiFromList -a "meta=siteinfo&siprop=statistics" \ |
+ | | SxmlIndent | ||
</source> | </source> | ||
Ligne 63 : | Ligne 207 : | ||
| ./testDilib/WicriStatistiquesSite | | ./testDilib/WicriStatistiquesSite | ||
</source> | </source> | ||
+ | |||
+ | |||
+ | ''Voir le résultat en [[Discussion Wicri:{{PAGENAME}}|page Discussion]]'' | ||
+ | |||
+ | ;Avec la version sous Dilib: | ||
+ | <source lang="sh"> | ||
+ | ( cat testDilib/wiki.dict \ | ||
+ | | WicriExpandApiFromList -a "meta=siteinfo&siprop=statistics" | ||
+ | cat testDilib/statsPriv.list | ||
+ | ) | WicriStatistiquesSite | ||
+ | </source> | ||
+ | |||
+ | ==Voir aussi== | ||
+ | Voir : [[Dilib, module Wicri, commande WicriStatistiquesSite]] |
Version actuelle datée du 31 mai 2021 à 09:24
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