MediaWiki:Bot/PagesSansImage.js
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__ //<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>