Wicri:Dilib source, module Wicri, commande WicriStatistiquesSite : Différence entre versions

De Wicri Outils
imported>Asma Lahssini
(Code source)
(Code source)
 
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"
 +
#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 main()
+
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)
 
{
 
{
// Déclaration des variables
 
 
   SxmlNode *apiNode ;
 
   SxmlNode *apiNode ;
 
   SxmlNode *queryNode;
 
   SxmlNode *queryNode;
 
   SxmlNode *statNode;
 
   SxmlNode *statNode;
 +
 +
  Buffer *bufPrint;
 
   
 
   
 
   char *pagesStr;
 
   char *pagesStr;
Ligne 21 : Ligne 66 :
 
   int imagesNum;
 
   int imagesNum;
  
  int cumulPages;
+
    int cOption;
  int cumulArticles;
+
 
   int cumulEdits;
+
   cumulOnly=0;
  int cumulImages;
+
 
// Création d'un tableau de 5 colonnes
+
  while((cOption=getopt(argc,argv,"c"))!=EOF)
  printf ("{| class=\"wikitable sortable\" \n");
+
    {switch (cOption)
  printf ("|- \n");
+
    {  
  printf ("!Wiki\n");
+
      case 'c':
   printf ("!Pages\n");
+
cumulOnly=1;
   printf ("!Articles significatifs\n");
+
break;
  printf ("!Modifications\n");
+
}
  printf ("!Fichiers (images...)\n");
+
    }
  printf ("|-  \n");
+
 
//Initiation des varibales
+
   bufPrint=NewBuffer();
 +
   if (cumulOnly==0)
 +
    {
 +
      statIntro();
 +
      listIntro();
 +
    }
 +
 
 +
 
 
   cumulPages=0;
 
   cumulPages=0;
 
   cumulArticles=0;
 
   cumulArticles=0;
 
   cumulEdits=0;
 
   cumulEdits=0;
 
   cumulImages=0;
 
   cumulImages=0;
// une boucle qui prendre en entré  tout les documents XML
+
  nWikis=0;
 +
 
 
   while ((apiNode=SxmlInputGetDocumentElement()))
 
   while ((apiNode=SxmlInputGetDocumentElement()))
 
     {
 
     {
 
       queryNode=SxmlGetFirstChildByTagName(apiNode, "query");  
 
       queryNode=SxmlGetFirstChildByTagName(apiNode, "query");  
 
       if (!queryNode)continue;
 
       if (!queryNode)continue;
//Si "query" est un premier fils de l'api on continue le programme sinon on s'arrête
 
  
 
       statNode= SxmlGetFirstChildByTagName(queryNode, "statistics");
 
       statNode= SxmlGetFirstChildByTagName(queryNode, "statistics");
 
       if (!statNode)continue;
 
       if (!statNode)continue;
//Si "statistics" est un premier fils de "query" on continue le programme sinon on s'arrête 
+
 
// La récupération des variables
 
 
       pagesStr=SxmlGetAttribute(statNode,"pages");
 
       pagesStr=SxmlGetAttribute(statNode,"pages");
 
       articlesStr=SxmlGetAttribute(statNode,"articles");
 
       articlesStr=SxmlGetAttribute(statNode,"articles");
Ligne 55 : Ligne 106 :
 
       imagesStr=SxmlGetAttribute(statNode,"images");
 
       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");
 +
}
  
      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");
 
  
 
// convertir le type String en Entier
 
 
       pagesNum=    atoi(pagesStr);
 
       pagesNum=    atoi(pagesStr);
 
       articlesNum= atoi(articlesStr);
 
       articlesNum= atoi(articlesStr);
 
       editsNum=    atoi(editsStr);     
 
       editsNum=    atoi(editsStr);     
 
       imagesNum=  atoi(imagesStr);
 
       imagesNum=  atoi(imagesStr);
// Calculer les cumules
+
 
 
       cumulPages+=pagesNum;
 
       cumulPages+=pagesNum;
 
       cumulArticles+=articlesNum;
 
       cumulArticles+=articlesNum;
 
       cumulEdits+=editsNum;
 
       cumulEdits+=editsNum;
 
       cumulImages+=imagesNum;
 
       cumulImages+=imagesNum;
 
+
      nWikis++;
  
 
     };
 
     };
   printf ("|}\n");
+
 
 +
   if (cumulOnly==0) printf ("|}\n");
  
   printf(";Statistiques cumulées:\n");
+
   printf("==Statistiques cumulées==\n");
 
   printf ("{| class=\"wikitable\" \n");
 
   printf ("{| class=\"wikitable\" \n");
 
   printf ("|-  \n");
 
   printf ("|-  \n");
 +
  printf ("!Wikis<br/>(nombre)\n");
 
   printf ("!Pages\n");
 
   printf ("!Pages\n");
 
   printf ("!Articles\n");
 
   printf ("!Articles\n");
Ligne 87 : Ligne 141 :
 
   printf ("!Fichiers\n");
 
   printf ("!Fichiers\n");
 
   printf ("|-  \n");
 
   printf ("|-  \n");
 +
 +
  printf ("|{{formatnum:%d}}\n", nWikis);
 
   printf ("|{{formatnum:%d}}\n", cumulPages);
 
   printf ("|{{formatnum:%d}}\n", cumulPages);
 
   printf ("|{{formatnum:%d}}\n", cumulArticles);
 
   printf ("|{{formatnum:%d}}\n", cumulArticles);
Ligne 94 : Ligne 150 :
 
   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>
  

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

Voir aussi

Voir : Dilib, module Wicri, commande WicriStatistiquesSite