Inscris-toi pour écrire dans l'encyclopédie Wikimini!

« MediaWiki:Bot/PagesSansImage.js » : différence entre les versions

Jump to navigation Jump to search
Aucun résumé des modifications
Aucun résumé des modifications
 
(9 versions intermédiaires par le même utilisateur non affichées)
Ligne 38 : Ligne 38 :


var PagesSansImage_Text_RunListagePage = "Listage des pages<br/>Page ";
var PagesSansImage_Text_RunListagePage = "Listage des pages<br/>Page ";
var PagesSansImage_Text_RunCheckImages = "Requête API des pages de $1 à $2";
var PagesSansImage_Text_RunCheckImages = "Requête API des pages de <b>$1</b> à <b>$2</b>";
var PagesSansImage_Text_RunCheckImagesYes = "Page avec image";
var PagesSansImage_Text_RunCheckImagesYes = "Page avec image";
var PagesSansImage_Text_RunCheckImagesNo = "Page sans image";
var PagesSansImage_Text_RunCheckImagesNo = "<u>Page sans image</u>";
var PagesSansImage_Text_RunDoEdit = "Édition de la page";
var PagesSansImage_Text_RunDoEdit = "Édition de la page";


var PagesSansImage_Text_Summary = "Bot : mise à jour de la page";
var PagesSansImage_Text_PageTemplate = '__NORICHEDITOR__\n'
var PagesSansImage_Text_PageTemplate = '__NORICHEDITOR__\n'
+ '{{$1/Intro|$1|$2|$3|$4|$5|$6|$7}}\n'
+ '{{$1/Intro|$1|$2|$3|$4|$5|$6|$7}}\n'
+ '\n'
+ '\n'
+ '<div style="-moz-column-count:2; column-count:2;">\n';
+ '<div style="-moz-column-count:2; column-count:2;">\n'
+ '$8'
+ '$8'
+ '</div>\n'
+ '</div>\n'

// =========================================================================================================

// =========================================================================================================
// Variables

var PagesSansImage_positionPeriod = 50; // Nombre de pages par requête ( fonction "PagesSansImage_CheckImages" )
var PagesSansImage_IsTest = false; // true pour ne vérifier que les 15 premières pages (tests)


// =========================================================================================================
// =========================================================================================================
Ligne 73 : Ligne 82 :


// =========================================================================================================
// =========================================================================================================
// Initialisation


function PagesSansImage_LancementBot(){
function PagesSansImage_LancementBot(){
Ligne 93 : Ligne 103 :
PagesSansImage_ListagePage(1, '');
PagesSansImage_ListagePage(1, '');
}
}
// =========================================================================================================


// =========================================================================================================
// Listage de toutes les pages du site


function PagesSansImage_ListagePage(Numero, PageDebut){
function PagesSansImage_ListagePage(Numero, PageDebut){
Ligne 104 : Ligne 119 :
Reponse.innerHTML = PagesSansImage_Text_RunListagePage+Numero;
Reponse.innerHTML = PagesSansImage_Text_RunListagePage+Numero;
var ObjetXML = Requete.responseXML;
var ObjetXML = Requete.responseXML;
if(!ObjetXML){
PagesSansImage_ListagePage(Numero, PageDebut);
return;
}
var AllPages = ObjetXML.getElementsByTagName('p');
var AllPages = ObjetXML.getElementsByTagName('p');
for(var a=0;a<AllPages.length;a++){
for(var a=0;a<AllPages.length;a++){
Ligne 112 : Ligne 131 :
if(OtherPage){
if(OtherPage){
var OtherPageTitle = OtherPage.getElementsByTagName("allpages")[0].getAttribute("apfrom");
var OtherPageTitle = OtherPage.getElementsByTagName("allpages")[0].getAttribute("apfrom");
PagesSansImage_ListagePage((Numero+1),"&apfrom="+OtherPageTitle);
PagesSansImage_ListagePage((Numero+1),"&apfrom="+encodeURIComponent(OtherPageTitle));
}else{
}else{
PagesSansImage_CheckImages(0);
PagesSansImage_CheckImages(0);
Ligne 120 : Ligne 139 :
}
}


// =========================================================================================================
var positionPeriod = 50;



// =========================================================================================================
// Vérification de la présence d'image


function PagesSansImage_CheckImages(position){
function PagesSansImage_CheckImages(position){
if(!position) position = 0;
if(!position) position = 0;
//if(position>15){ PagesSansImage_doEdit(); return; } // à décommenter pour tester sans passer les 2500 pages
if(PagesSansImage_IsTest && position>15){ PagesSansImage_doEdit(); return; }
var PageRequete = PagesSansImage_ListePages[position];
var PageRequete = PagesSansImage_ListePages[position];
if(!PageRequete){ PagesSansImage_doEdit(); return; }
if(!PageRequete){ PagesSansImage_doEdit(); return; }
Ligne 131 : Ligne 153 :


var Titres = new Array();
var Titres = new Array();
var TitresEncoded = new Array();
for(var a=position;a<(position+positionPeriod);a++){
for(var a=position;a<(position+PagesSansImage_positionPeriod);a++){
if(PagesSansImage_ListePages[a]) Titres.push(PagesSansImage_ListePages[a]);
if(PagesSansImage_ListePages[a]){
Titres.push(PagesSansImage_ListePages[a]);
TitresEncoded.push(encodeURIComponent(PagesSansImage_ListePages[a]));
}
}
}
Requete = sajax_init_object();
Requete = sajax_init_object();
var url = wgServer+wgScriptPath+'/api.php?format=xml&action=query&prop=images&imlimit=499&titles='+Titres.join("|");
var url = wgServer+wgScriptPath+'/api.php?format=xml&action=query&prop=images&imlimit=499&titles='+TitresEncoded.join("|");
Requete.open('GET',url, true);
Requete.open('GET',url, true);
Requete.onreadystatechange = function(){
Requete.onreadystatechange = function(){
Ligne 142 : Ligne 168 :
Reponse.innerHTML = PagesSansImage_Text_RunCheckImages.split('$1').join(Titres[0]).split('$2').join(Titres[(Titres.length-1)])+'<br/><ol id="PageListe"></ol>';
Reponse.innerHTML = PagesSansImage_Text_RunCheckImages.split('$1').join(Titres[0]).split('$2').join(Titres[(Titres.length-1)])+'<br/><ol id="PageListe"></ol>';
var ObjetXML = Requete.responseXML;
var ObjetXML = Requete.responseXML;
if(!ObjetXML){
PagesSansImage_CheckImages(position);
return;
}
var Pages = ObjetXML.getElementsByTagName("page");
var Pages = ObjetXML.getElementsByTagName("page");
for(a=0;a<Pages.length;a++){
for(a=0;a<Pages.length;a++){
Ligne 153 : Ligne 183 :
}
}
}
}
PagesSansImage_CheckImages((position+positionPeriod));
PagesSansImage_CheckImages((position+PagesSansImage_positionPeriod));
}
}
Requete.send(null);
Requete.send(null);
}
}

// =========================================================================================================


// =========================================================================================================
// Édition


function PagesSansImage_doEdit(){
function PagesSansImage_doEdit(){


Requete = sajax_init_object();
Requete = sajax_init_object();
var url = wgServer + wgScript + '?title=' + PagesSansImage_Text_PageEdit.replace(/&/g, "%26") + '&action=edit';
var url = wgServer + wgScript + '?title=' + encodeURIComponent(PagesSansImage_Text_PageEdit) + '&action=edit';
Requete.open('GET',url, true);
Requete.open('GET',url, true);
Requete.onreadystatechange = function(){
Requete.onreadystatechange = function(){
Ligne 181 : Ligne 217 :


var ListePagesSansImage = "";
var ListePagesSansImage = "";
for(a=0;a<PagesSansImage.length;a++){
for(a=0;a<PagesSansImage_PagesSansImage.length;a++){
ListePagesSansImage += '# [[' + PagesSansImage_PagesSansImage[a] + ']]\n';
ListePagesSansImage += '# [[' + PagesSansImage_PagesSansImage[a] + ']]\n';
}
}
Ligne 196 : Ligne 232 :


document.getElementById('wpTextbox1').value = TexteFinal ;
document.getElementById('wpTextbox1').value = TexteFinal ;
document.editform.wpSummary.value = 'Bot : mise à jour de la page';
document.editform.wpSummary.value = PagesSansImage_Text_Summary;
document.editform.submit();
document.editform.submit();
}
}

Dernière version du 12 février 2012 à 12:16

//__NORICHEDITOR__  
//<pre><nowiki>
/////////////////////////////////////////////////////////////////////////////// BOT ////////// 

/************************************************* ************************************************* 

Fonction : 
* dresser la liste des pages sans image
* Mettre à jour la page Wikimini:Pages à illuster


Pense-bête requêtes API : (limite de requête : 499 pouvant être portées à 4999 avec un statut Bot ou Wikitechnicien)

* Toutes les pages : 
http://fr.wikimini.org/w/api.php?action=query&list=allpages&prop=info&aplimit=499                          (Première requête)
http://fr.wikimini.org/w/api.php?action=query&list=allpages&prop=info&aplimit=499&apfrom=???              (requêtes suivantes (??? = titre de la page suivante à la requête précédente))
* Infos sur les images d'une page
http://fr.wikimini.org/w/api.php?action=query&prop=images&imlimit=1&titles=???            (??? = titre de la page)

********************************************************* ***************************************************************** */

// C'est parti !!!

// =========================================================================================================
// Textes.

var PagesSansImage_Text_PageEdit = "Wikimini:Pages à illustrer";
var PagesSansImage_Text_PageAide = "MediaWiki:Bot/PagesSansImage";

var PagesSansImage_Text_Aide = "aide";
var PagesSansImage_Text_GoText = "Lancer le robot de mise à jour";
var PagesSansImage_Text_GoTitle = "Lancement BOT : Pages à illustrer";
var PagesSansImage_Text_StopText = "Arrêt BOT";
var PagesSansImage_Text_StopTitle = "Arrêter le robot de mise à jour";

var PagesSansImage_Text_AlertEdition = "Il y a déjà une fenêtre d\'édition ouverte.\nFermez-là pour pouvoir lancer le bot.";
var PagesSansImage_Text_AlertCertain = "Lancement du bot ?";

var PagesSansImage_Text_RunListagePage = "Listage des pages<br/>Page ";
var PagesSansImage_Text_RunCheckImages = "Requête API des pages de <b>$1</b> à <b>$2</b>";
var PagesSansImage_Text_RunCheckImagesYes = "Page avec image";
var PagesSansImage_Text_RunCheckImagesNo = "<u>Page sans image</u>";
var PagesSansImage_Text_RunDoEdit = "Édition de la page";

var PagesSansImage_Text_Summary = "Bot : mise à jour de la page";
var PagesSansImage_Text_PageTemplate = '__NORICHEDITOR__\n'
                                     + '{{$1/Intro|$1|$2|$3|$4|$5|$6|$7}}\n'
                                     + '\n'    
                                     + '<div style="-moz-column-count:2; column-count:2;">\n'          
                                     + '$8'
                                     + '</div>\n'

// =========================================================================================================

// =========================================================================================================
// Variables

var PagesSansImage_positionPeriod = 50; // Nombre de pages par requête ( fonction "PagesSansImage_CheckImages" )
var PagesSansImage_IsTest = false;      // true pour ne vérifier que les 15 premières pages (tests)

// =========================================================================================================

// =========================================================================================================
// Ajout d'un lien en haut à gauche de la page pour lancer/arrêter le bot.

addOnloadHook( function() {  
    var LienBot = document.createElement('li');
    LienBot.innerHTML = '<sup><small>(<a href="'+wgServer + wgArticlePath.split('$1').join(PagesSansImage_Text_PageAide)+ '">'+PagesSansImage_Text_Aide+'</a>)</small></sup> <a id="BOTon" href="javascript:PagesSansImage_LancementBot()" title="'+PagesSansImage_Text_GoTitle+'">'+PagesSansImage_Text_GoText+'</a>';
    document.body.insertBefore(LienBot, document.body.firstChild);
});
// =========================================================================================================


// =========================================================================================================
// Définition des liste de pages et infos correspondantes

var PagesSansImage_ListePages = new Array();
var PagesSansImage_PagesSansImage = new Array();

// =========================================================================================================


// =========================================================================================================
// Initialisation

function PagesSansImage_LancementBot(){
     if(document.getElementById('editform')){
          alert(PagesSansImage_Text_AlertEdition);
          return;
     }
     var SurEtCertain = confirm(PagesSansImage_Text_AlertCertain);
     if(!SurEtCertain) return;
     var Button = document.getElementById('BOTon');
     Button.innerHTML = PagesSansImage_Text_StopText;
     Button.title = PagesSansImage_Text_StopTitle;
     Button.href = 'javascript:window.location.reload();';
     var Result = document.createElement('div');
     Result.id = 'API_Result';
     Result.style.Width = '100%';
     Button.parentNode.insertBefore(Result, Button.nextSibling);
     var Page = document.getElementById('site_center');
     if(Page) Page.style.display = "none";
     PagesSansImage_ListagePage(1, '');
}
// =========================================================================================================


// =========================================================================================================
// Listage de toutes les pages du site

function PagesSansImage_ListagePage(Numero, PageDebut){
     if(!PageDebut) PageDebut = '';
     Requete = sajax_init_object();
     var url = wgServer+wgScriptPath+'/api.php?format=xml&action=query&list=allpages&prop=info&apfilterredir=nonredirects&aplimit=499'+PageDebut;
     Requete.open('GET',url, true);
     Requete.onreadystatechange = function(){
          if(Requete.readyState != 4) return;
          var Reponse = document.getElementById('API_Result');
          Reponse.innerHTML = PagesSansImage_Text_RunListagePage+Numero;
          var ObjetXML = Requete.responseXML;
          if(!ObjetXML){
               PagesSansImage_ListagePage(Numero, PageDebut);
               return;
          }
          var AllPages = ObjetXML.getElementsByTagName('p');
          for(var a=0;a<AllPages.length;a++){
               var ThisPageName = AllPages[a].getAttribute("title");
               PagesSansImage_ListePages.push(ThisPageName);
          }
          var OtherPage = ObjetXML.getElementsByTagName('query-continue')[0];
          if(OtherPage){
               var OtherPageTitle = OtherPage.getElementsByTagName("allpages")[0].getAttribute("apfrom");
               PagesSansImage_ListagePage((Numero+1),"&apfrom="+encodeURIComponent(OtherPageTitle));
          }else{
               PagesSansImage_CheckImages(0);
          }
     }
     Requete.send(null);
}

// =========================================================================================================


// =========================================================================================================
// Vérification de la présence d'image

function PagesSansImage_CheckImages(position){
     if(!position) position = 0;
     if(PagesSansImage_IsTest && position>15){ PagesSansImage_doEdit(); return; }
     var PageRequete = PagesSansImage_ListePages[position];
     if(!PageRequete){ PagesSansImage_doEdit(); return; }
     if(PageRequete=="undefined"){ PagesSansImage_doEdit(); return; }

     var Titres = new Array();
     var TitresEncoded = new Array();
     for(var a=position;a<(position+PagesSansImage_positionPeriod);a++){
          if(PagesSansImage_ListePages[a]){
               Titres.push(PagesSansImage_ListePages[a]);
               TitresEncoded.push(encodeURIComponent(PagesSansImage_ListePages[a]));
          }
     }
     Requete = sajax_init_object();
     var url = wgServer+wgScriptPath+'/api.php?format=xml&action=query&prop=images&imlimit=499&titles='+TitresEncoded.join("|");
     Requete.open('GET',url, true);
     Requete.onreadystatechange = function(){
          if(Requete.readyState != 4) return;
          var Reponse = document.getElementById('API_Result');
          Reponse.innerHTML = PagesSansImage_Text_RunCheckImages.split('$1').join(Titres[0]).split('$2').join(Titres[(Titres.length-1)])+'<br/><ol id="PageListe"></ol>';
          var ObjetXML = Requete.responseXML;
          if(!ObjetXML){
               PagesSansImage_CheckImages(position);
               return;
          }
          var Pages = ObjetXML.getElementsByTagName("page");
          for(a=0;a<Pages.length;a++){
               var PageTitle = Pages[a].getAttribute("title")
               var Image = Pages[a].getElementsByTagName("im")[0];
               if(!Image){
                    document.getElementById("PageListe").innerHTML += '<li>'+PageTitle+' : '+PagesSansImage_Text_RunCheckImagesNo+'</li>';
                    PagesSansImage_PagesSansImage.push(PageTitle);
               }else{
                    document.getElementById("PageListe").innerHTML += '<li>'+PageTitle+' : '+PagesSansImage_Text_RunCheckImagesYes+'</li>';                    
               }
          }
          PagesSansImage_CheckImages((position+PagesSansImage_positionPeriod));
     }
     Requete.send(null);
}

// =========================================================================================================


// =========================================================================================================
// Édition

function PagesSansImage_doEdit(){

     Requete = sajax_init_object();
     var url = wgServer + wgScript + '?title=' + encodeURIComponent(PagesSansImage_Text_PageEdit) + '&action=edit';
     Requete.open('GET',url, true);
     Requete.onreadystatechange = function(){
          if(Requete.readyState != 4) return;
          var Reponse = document.getElementById('API_Result');
          Reponse.innerHTML = url +'<br/>'+PagesSansImage_Text_RunDoEdit+' : ' + decodeURIComponent(PagesSansImage_Text_PageEdit) + '<br/>' + Requete.responseText;
          
          var Aujourdhui = new Date();
          var Minutes   = Aujourdhui.getMinutes()
          if(Minutes<10){ var ZeroMinutes = "0" ; }else{ var ZeroMinutes = "";}
          var Heures   = Aujourdhui.getHours()
          if(Heures<10){ var ZeroHeures = "0" ; }else{ var ZeroHeures = "";}
          var Jour   = Aujourdhui.getDate();
          if(Jour<10){ var ZeroJour = "0" ; }else{ var ZeroJour = "";}
          var Mois = Aujourdhui.getMonth() + 1;
          if(Mois<10){ var ZeroMois = "0" ; }else{ var ZeroMois = "";}
          var Annee  = Aujourdhui.getYear();
          if (Annee < 2000){ Annee = Annee + 1900; }

          var ListePagesSansImage = "";       
          for(a=0;a<PagesSansImage_PagesSansImage.length;a++){
               ListePagesSansImage += '# [[' + PagesSansImage_PagesSansImage[a] + ']]\n';
          }

          var TexteFinal = PagesSansImage_Text_PageTemplate;
          TexteFinal = TexteFinal.split('$1').join(PagesSansImage_Text_PageEdit);
          TexteFinal = TexteFinal.split('$2').join(PagesSansImage_Text_PageAide);
          TexteFinal = TexteFinal.split('$3').join(ZeroJour + Jour);
          TexteFinal = TexteFinal.split('$4').join(ZeroMois + Mois);
          TexteFinal = TexteFinal.split('$5').join(Annee);
          TexteFinal = TexteFinal.split('$6').join(ZeroHeures + Heures);
          TexteFinal = TexteFinal.split('$7').join(ZeroMinutes + Minutes);
          TexteFinal = TexteFinal.split('$8').join(ListePagesSansImage);

          document.getElementById('wpTextbox1').value = TexteFinal ;
          document.editform.wpSummary.value = PagesSansImage_Text_Summary;
          document.editform.submit();
     }
     Requete.send(null);
}

//</nowiki></pre>
Wikiboo Outils personnels