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

MediaWiki:Bot/PagesSansImage.js

Jump to navigation Jump to search

Note : après avoir enregistré tes préférences, tu devras forcer son rechargement complet en ignorant le contenu actuel du cache de ton explorateur pour voir les changements : Mozilla / Firefox / Konqueror / Safari : maintiens la touche Majuscule (Shift) en cliquant le bouton Actualiser (Reload,) ou presse Maj-Ctrl-R (Maj-Cmd-R sur Apple Mac) ; Internet Explorer / Opera : maintiens la touche Ctrl en cliquant le bouton Actualiser ou presse Ctrl-F5.

//__NORICHEDITOR__  

/////////////////////////////////////////////////////////////////////////////// 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 !!!

// =========================================================================================================
// 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 + '/wiki/MediaWiki:Bot/PagesSansImage">aide</a>)</small></sup> <a id="BOTon" href="javascript:LancementBot()" title="Lancer le bot">Lancement BOT : Pages à illustrer</a>';
    document.body.insertBefore(LienBot, document.body.firstChild);
});
// =========================================================================================================


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

var ListePages = new Array();
var PagesSansImage = new Array();

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


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

function LancementBot(){
     if(document.getElementById('editform')){
          alert('Il y a déjà une fenêtre d\'édition ouverte.\nFermez-là pour pouvoir lancer le bot.');
          return;
     }
     var SurEtCertain = confirm('Lancement du bot ?');
     if(!SurEtCertain) return;
     var Button = document.getElementById('BOTon');
     Button.innerHTML = 'Arrêt BOT';
     Button.title = 'Arrêter le bot';
     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";
     ListagePage();
}

function ListagePage(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){
               var Reponse = document.getElementById('API_Result');
               Reponse.innerHTML = url +'<br/>Listage des pages<br/>';
               var ObjetXML = Requete.responseXML;
               var AllPages = ObjetXML.getElementsByTagName('p');
               for(var a=0;a<AllPages.length;a++){
                    var ThisPageName = AllPages[a].getAttribute("title");
                    ListePages.push(ThisPageName);
               }
               var OtherPage = ObjetXML.getElementsByTagName('query-continue')[0];
               if(OtherPage){
                    var OtherPageTitle = OtherPage.getElementsByTagName("allpages")[0].getAttribute("apfrom");
                    ListagePage("&apfrom="+OtherPageTitle);
               }else{
                    CheckImages(0);
               }
          }
     }
     Requete.send(null);
}

function CheckImages(position){
     if(!position) position = 0;
     //if(position>15){ doEdit(); return; }  // à décommenter pour faire des tests sans passer les 2500 pages...
     var PageRequete = ListePages[position];
     if(!PageRequete){ doEdit(); return; }
     if(PageRequete=="undefined"){ doEdit(); return; }
     Requete = sajax_init_object();
     var url = wgServer+wgScriptPath+'/api.php?format=xml&action=query&prop=images&imlimit=1&titles='+PageRequete;
     Requete.open('GET',url, true);
     Requete.onreadystatechange = function(){
          if(Requete.readyState == 4){
               var Reponse = document.getElementById('API_Result');
               Reponse.innerHTML = url +'<br/>Requête API de la page : ' + PageRequete + '<br/>';
               var ObjetXML = Requete.responseXML;
               if(ObjetXML==null){
                    alert("ObjetXML = null");
                    CheckImages(position);
                    return;
               }
               var Image = ObjetXML.getElementsByTagName("im")[0];
               if(!Image){
                    Reponse.innerHTML += 'Page sans image';
                    PagesSansImage.push(PageRequete);
               }else{
                    Reponse.innerHTML += 'Page avec image';                    
               }
               CheckImages((position+1));
          }
     }
     Requete.send(null);
}

function doEdit(){
     var PageEdit = 'Wikimini:Pages à illustrer';

     Requete = sajax_init_object();
     var url = wgServer + wgScript + '?title=' + PageEdit.replace(/&/g, "%26") + '&action=edit';
     Requete.open('GET',url, true);
     Requete.onreadystatechange = function(){
          if(Requete.readyState == 4){
               var Reponse = document.getElementById('API_Result');
               Reponse.innerHTML = url +'<br/>Édition de la page : ' + decodeURIComponent(PageEdit) + '<br/>';
               Reponse.innerHTML += Requete.responseText;
               var TextArea = document.getElementById('wpTextbox1');
               
               var TexteFinal = '__NORICHEDITOR__\n';

               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;
               }
               TexteFinal += 'Cette liste est mise à jour de façon automatique par un robot. <sup>([[MediaWiki:Bot/PagesSansImage|Aide]])</sup>\n\n'
              +'Dernière mise à jour : le ' + ZeroJour + Jour + '/' + ZeroMois + Mois + '/' + Annee + ' à ' + ZeroHeures + Heures + ':' + ZeroMinutes + Minutes + '\n\n';               
               for(a=0;a<PagesSansImage.length;a++){
                   TexteFinal += '# [[' + PagesSansImage[a] + ']]\n';
               }
               document.getElementById('wpTextbox1').value = TexteFinal ;
               document.editform.wpSummary.value = 'Bot : mise à jour de la page';
               document.editform.submit();
          }
     }
     Requete.send(null);
}
Wikiboo Outils personnels