« Utilisateur:Pinocchio/citations images du jour.js » : différence entre les versions
De BoyWiki
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 10 : | Ligne 10 : | ||
function prepare_idj_exec() { | function prepare_idj_exec() { | ||
var progressop = document.getElementById('progress_op'); | var progressop = document.getElementById('progress_op'); | ||
progressop.innerHTML += '<br />Recherche images disponibles...<br />'; | progressop.innerHTML += '<br /><br />Recherche images disponibles...<br />'; | ||
prepareidjtabimgs[0] = '0'; | prepareidjtabimgs[0] = '0'; | ||
prepare_idj_reqlistimg(); | prepare_idj_reqlistimg(); | ||
Ligne 85 : | Ligne 85 : | ||
var rdm = tabsw[i-1].match(/default=\n[^-]--([0-9a-f]{40})--/); | var rdm = tabsw[i-1].match(/default=\n[^-]--([0-9a-f]{40})--/); | ||
if (rdm) rtop = rdm[1]; | if (rdm) rtop = rdm[1]; | ||
alert( | alert(rdm); | ||
if (nbj >= 30) {progressop.innerHTML += 'Le nombre maximum (30) de jours couverts est atteint'; return;} | if (nbj >= 30) {progressop.innerHTML += 'Le nombre maximum (30) de jours couverts est atteint'; return;} | ||
Ligne 120 : | Ligne 120 : | ||
// trouve titre et descr correspondant chaque id | // trouve titre et descr correspondant chaque id | ||
for (var ni= | for (var ni=1; ni < prepareidjtabimgs.length; ni++) { | ||
if (prepareidjtabimgs[ni]['cksum'] == tirage[tb]) { | if (prepareidjtabimgs[ni]['cksum'] == tirage[tb]) { | ||
buf += '\n| '+nextday+'=[['+prepareidjtabimgs[ni]['title']+'|400px|thumb|center|'+prepareidjtabimgs[ni]['descr']+']]'; | buf += '\n| '+nextday+'=[['+prepareidjtabimgs[ni]['title']+'|400px|thumb|center|'+prepareidjtabimgs[ni]['descr']+']]'; |
Version du 4 décembre 2010 à 22:59
/************* Images du jour ****************/
/* Lancé par bouton page Utilisateur:Pinocchio/citation_du_jour.js */
/* Recherche images disponibles, sélection pseudo aléatoire,
/* maj sous-page Accueil/image du jour */
var prepareidjtabimgs = new Array();
/* liste img dispo - requête premier lot (lots suivants enchainés par prepare_idj_receiver) */
function prepare_idj_exec() {
var progressop = document.getElementById('progress_op');
progressop.innerHTML += '<br /><br />Recherche images disponibles...<br />';
prepareidjtabimgs[0] = '0';
prepare_idj_reqlistimg();
}
// prepare_idj_exec continue apres fin load listes imgs
function prepare_idj_exec_cont() {
var progressop = document.getElementById('progress_op');
progressop.innerHTML += 'images trouvées : '+ (parseInt(prepareidjtabimgs.length)-1) +'<br />';
var tabid = new Array();
// filtrage img admises
for (var ni=1; ni<prepareidjtabimgs.length; ni++) {
var dscr = prepareidjtabimgs[ni]['descr'];
// test des types à prévoir
if (!dscr.replace(/\\|"/g,'').match('id=mainpix lang=fr') && !dscr.match(/affichable.{20,30}BoyWiki francophone/)) {
prepareidjtabimgs[ni]['cksum'] = 0;
continue;
}
// filtre descr (recup 1ere ligne non vide)
dscr = dscr.match(/.{5,}/);
prepareidjtabimgs[ni]['descr'] = dscr;
// recup id
tabid[tabid.length] = prepareidjtabimgs[ni]['cksum'];
}
progressop.innerHTML += 'images retenues : '+tabid.length+'<br />';
progressop.innerHTML += 'Lecture état actuel...';
var xhr_object = createxhrobject();
if (xhr_object == null) {
progressop.innerHTML = 'Erreur 1 - Abandon';
return;
}
// init requete serveur - lecture sous-page Accueil/image
xhr_object.open('GET', '/w/index.php?title=BoyWiki:Accueil/Image_du_jour&action=edit', false);
xhr_object.send('');
if (xhr_object.readyState != 4 || xhr_object.status != 200) {
progressop.innerHTML += 'Erreur 2 - Abandon';
return;
}
// recup contenu utile
var pagedit = xhr_object.responseText.split(/<textarea[^>]*>|<\/textarea>/gi);
// init date du jour - date min - date max
var now = new Date();
var today = formatdateyyyymmdd(now);
now.setDate(now.getDate() - 2);
var minday = formatdateyyyymmdd(now);
now.setDate(now.getDate() + 30);
var maxday = formatdateyyyymmdd(now);
// découpe contenu par cas du switch
var tabsw = pagedit[1].split(/\n ?\| ?/);
// conserve début page jusqu'à switch
var buf = tabsw[0];
// parcourt dates: compte jours restant, élimine cas obsolètes, copie dans buf cas conservés
var nbj = 0;
var jtop = '00000000';
var rtop = '0';
for (var i = 1; i < tabsw.length ; i++) {
var cas = tabsw[i].match(/^([0-9]{8})=/);
if (cas != null) {
if (cas[1] > jtop) jtop = cas[1];
if (cas[1] >= minday) buf += '\n| '+tabsw[i];
if (cas[1] > today) nbj++;
}
}
if (jtop == '00000000') jtop = today;
// recup id top
var rdm = tabsw[i-1].match(/default=\n[^-]--([0-9a-f]{40})--/);
if (rdm) rtop = rdm[1];
alert(rdm);
if (nbj >= 30) {progressop.innerHTML += 'Le nombre maximum (30) de jours couverts est atteint'; return;}
else if (nbj > 1) progressop.innerHTML += 'Il y a actuellement '+nbj+' jours couverts<br />';
else progressop.innerHTML += 'Il y a actuellement '+nbj+' jour couvert<br />';
// date de jtop
var djtop = new Date(jtop.substr(0,4)+','+jtop.substr(4,2)+','+jtop.substr(6,2));
progressop.innerHTML += 'Tri images par ordre id...<br />';
// tri par ordre cksum
tabid.sort();
progressop.innerHTML += 'Tirage de '+(30 - nbj)+' images...<br />';
// cherche rtop (ids tirés dans ordre croissant à partir du plus haut actuel)
for (var ta = 0; ta < tabid.length ; ta++) {
if (tabid[ta] > rtop) break;
}
// si fin table des ids reprend au début (>30 imgs dispo)
if (ta >= tabid.length) ta = 0;
// tirage de 30 - nbj id > rtop
var tirage = new Array();
for (var tb=0; tb < (30 - nbj) ; tb++) {
tirage[tb] = tabid[ta++];
if (ta >= tabid.length) ta = 0;
}
// récup images tirées et ajoute dans buf page
for (var tb=0; tb < tirage.length ; tb++) {
// jour suivant
djtop.setDate(djtop.getDate() + 1);
var nextday = formatdateyyyymmdd(djtop);
// trouve titre et descr correspondant chaque id
for (var ni=1; ni < prepareidjtabimgs.length; ni++) {
if (prepareidjtabimgs[ni]['cksum'] == tirage[tb]) {
buf += '\n| '+nextday+'=[['+prepareidjtabimgs[ni]['title']+'|400px|thumb|center|'+prepareidjtabimgs[ni]['descr']+']]';
break;
}
}
}
// ajoute fin switch et id top
buf += '\n|#default=\n}}<!--'+tirage[tb]+'-->';
// remplace html entities (pb dû à texte orig format edit vers view) */
buf = buf.replace(/</g, '<');
buf = buf.replace(/>/g, '>');
buf = buf.replace(/&/g, '&');
buf = buf.replace(/"/g, '"');
progressop.innerHTML += 'Mise à jour sous-page image...<br />';
// récup éléments du formulaire
pagedit = pagedit[0]+pagedit[2];
pagedit = pagedit.replace(/\n/g, '');
var startime = pagedit.match(/wpSection.*name="wpStarttime/i);
startime = startime[0].replace(/.*value="([0-9]+)" name="wpStarttime/i, '$1');
var editime = pagedit.match(/wpStarttime.*name="wpEdittime/i);
editime = editime[0].replace(/.*value="([0-9]+)" name="wpEdittime/i, '$1');
var editoken = pagedit.match(/.{80}name="wpEditToken/i);
editoken = editoken[0].replace(/.*value="([0-f+]+)" name="wpEditToken/i, '$1');
var autosummary = pagedit.match(/wpAutoSummary.{1,30}value="[^"]+"/i);
autosummary = autosummary[0].replace(/.*value="([0-f]+)"/i, '$1');
var summary = 'Routine prepare image du jour';
// init requete serveur - maj sous-page Accueil/Image
var boundary = '--------------23242526272829';
var data = '';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpSection"\r\n\r\n\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpScrolltop"\r\n\r\n0\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpStarttime"\r\n\r\n'+startime+'\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpEdittime"\r\n\r\n'+editime+'\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpEditToken"\r\n\r\n'+editoken+'\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpSummary"\r\n\r\n'+summary+'\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpSave"\r\n\r\nPublier\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpTextbox1"\r\n\r\n'+buf+'\r\n';
data += '--'+boundary+'--\r\n';
xhr_object.open('POST', '/w/index.php?title=BoyWiki:Accueil/Image_du_jour&action=submit', false);
xhr_object.setRequestHeader("Charset", "utf-8");
xhr_object.setRequestHeader("Content-Type", "multipart/form-data; boundary="+boundary);
xhr_object.setRequestHeader("Content-Length", String(data.length));
xhr_object.send(data);
if (xhr_object.readyState != 4 || xhr_object.status != 200) {
progressop.innerHTML += 'Erreur 6 - Abandon';
}
else progressop.innerHTML += 'Fin procédure.';
}
/* Traitement recept lots img et lancemt suite ou fin */
/* Attention pages_id < 2000 (à ajuster pour no pgimg max) */
function prepare_idj_receiver(jsondata) {
// si suite indic reprise (50 max par req)
if (jsondata['query-continue']) prepareidjtabimgs[0] = jsondata['query-continue'].allpages.gapfrom;
else prepareidjtabimgs[0] = null;
// récup infos nom_img, descr, cksum (pour id)
var ni = prepareidjtabimgs.length;
for (var i=0; i<2000; i++) {
if (jsondata['query'].pages[i]) {
prepareidjtabimgs[ni] = new Array();
prepareidjtabimgs[ni]['cksum'] = jsondata.query.pages[i].imageinfo[0].sha1;
prepareidjtabimgs[ni]['title'] = jsondata.query.pages[i].title;
prepareidjtabimgs[ni]['descr'] = jsondata.query.pages[i].revisions[0].*;
ni++;
}
}
// requete suite liste img ou continue
if (prepareidjtabimgs[0] == null) prepare_idj_exec_cont();
else prepare_idj_reqlistimg();
// prevoir nbre boucles maxi
}
/* requete transfert liste pages et prop images espace 6 sans redirect format json (par lot 50 max) */
function prepare_idj_reqlistimg() {
var scrtag = document.createElement('script');
scrtag.type = 'text/javascript';
scrtag.src = 'https://media.boywiki.org/w/api.php?action=query&generator=allpages&gaplimit=50&gapnamespace=6&gapfilterredir=nonredirects&prop=revisions|imageinfo&rvprop=content&rvexpandtemplates&iiprop=user|size|sha1&format=json&gapfrom='+prepareidjtabimgs[0]+'&callback=prepare_idj_receiver';
document.getElementsByTagName('head')[0].appendChild(scrtag);
}
/************ Citations du jour ***************/
/* Lancé par bouton page Utilisateur:Pinocchio/citation_du_jour.js */
/* Recherche des pages de citations, extract citations,
/* sélection pseudo aléatoire, maj sous-page Accueil/Citation du jour */
function prepare_cdj_exec() {
var progressop = document.getElementById('progress_op');
var xhr_object = createxhrobject();
if (xhr_object == null) {
progressop.innerHTML = 'Erreur 1 - Abandon';
return;
}
progressop.innerHTML = 'Lecture état actuel...';
/* init requete serveur - lecture sous-page citations */
xhr_object.open('GET', '/w/index.php?title=BoyWiki:Accueil/Citation_du_jour&action=edit', false);
xhr_object.send('');
if (xhr_object.readyState != 4 || xhr_object.status != 200) {
progressop.innerHTML += 'Erreur 2 - Abandon';
return;
}
/* recup contenu utile */
var pagedit = xhr_object.responseText.split(/<textarea[^>]*>|<\/textarea>/gi);
/* init date du jour - date min - date max */
var now = new Date();
var today = formatdateyyyymmdd(now);
now.setDate(now.getDate() - 2);
var minday = formatdateyyyymmdd(now);
now.setDate(now.getDate() + 30);
var maxday = formatdateyyyymmdd(now);
/* découpe contenu par cas du switch */
var tabsw = pagedit[1].split(/\n ?\| ?/);
/* conserve début page jusqu'à switch */
var buf = tabsw[0];
/* parcourt les dates compte jours restant, élimine cas obsolètes, copie dans buf cas conservés */
var nbj = 0;
var jtop = '00000000';
var rtop = '0000000';
for (var i = 1; i < tabsw.length ; i++) {
var cas = tabsw[i].match(/^([0-9]{8})=/);
if (cas == null) break;
if (cas[1] > jtop) {
jtop = cas[1];
var rdm = tabsw[i].match(/\{\{[Ee]xtrait\|id=([0-9]{6,9})\|/);
rtop = rdm[1];
}
if (cas[1] >= minday) buf += '\n| '+tabsw[i];
if (cas[1] > today) nbj++;
}
if (jtop == '00000000') jtop = today;
if (nbj >= 30) {progressop.innerHTML += 'Le nombre maximum (30) de jours couverts est atteint'; return;}
else if (nbj > 1) progressop.innerHTML += 'Il y a actuellement '+nbj+' jours couverts<br />';
else progressop.innerHTML += 'Il y a actuellement '+nbj+' jour couvert<br />';
/* date de jtop */
var djtop = new Date(jtop.substr(0,4)+','+jtop.substr(4,2)+','+jtop.substr(6,2));
/* recherche liste pages citations */
progressop.innerHTML += 'Recherche pages de citations...<br />';
xhr_object.open('GET', '/w/index.php?title=Special%3APages+li%C3%A9es&limit=500&target=Mod%C3%A8le%3AExtrait&namespace=0', false);
xhr_object.send('');
if (xhr_object.readyState != 4 || xhr_object.status != 200) {
progressop.innerHTML += 'Erreur 3 - Abandon';
return;
}
/* recup contenu utile */
var pagesrch = xhr_object.responseText.split(/Voir \([0-9]+ précédentes\)/g);
tabul = pagesrch[1].split(/<ul><li>|<\/ul>/gi);
tabli = tabul[1].split(/<li>/gi);
var n = 0;
var tabpagecit = new Array();
/* sauve liste des pages */
for (var i = 0; i < tabli.length ; i++) {
if (tabli[i].match(/title="Accueil"/i)) continue;
tabpagecit[n] = new Array();
tabpagecit[n]['href'] = tabli[i].match(/href="([^"]*)"/i)[1];
tabpagecit[n]['title'] = tabli[i].match(/title="([^"]*)"/i)[1];
n++;
}
progressop.innerHTML += 'Pages trouvées : '+n+'<br />Recherche liste des citations...<br />';
/* crée sous-tableaux citations */
var nbc = 0;
for (var i = 0; i < n ; i++) {
progressop.innerHTML += '...'+tabpagecit[i]["title"]+'...<br />';
tabpagecit[i]['list'] = getabcitationperpage(xhr_object, tabpagecit[i]['href']);
nbc += tabpagecit[i]['list'].length;
}
progressop.innerHTML += 'Citations trouvées : '+nbc+'<br />';
progressop.innerHTML += 'Tri par ordre d’identifiants...<br />';
/* récup et tri des id */
var tabid = new Array();
var ri = 0;
var rc = 0;
for (var i = 0; i < n ; i++) {
while (tabpagecit[i]['list'][rc] != undefined) tabid[ri++] = tabpagecit[i]['list'][rc++]['id'];
rc = 0;
}
tabid = tabid.sort();
/* controle doublons */
for (var db = 1; db < tabid.length ; db++) {
if (tabid[db] == tabid[db-1]) progressop.innerHTML += '<font color="red">Trouvé identifiant en double : '+tabid[db]+'</font><br />';
}
progressop.innerHTML += 'Tirage de '+(30 - nbj)+' citations...<br />';
/* cherche rtop (les ids sont tirés dans l'ordre croissant à partir du plus haut actuellement dans la liste des citations) */
for (var ta = 0; ta < tabid.length ; ta++) {
if (tabid[ta] > rtop) break;
}
/* si fin de la table des ids reprend au début */
if (ta >= tabid.length) ta = 0;
/* tirage de 30 - nbj id > rtop */
var tirage = new Array();
for (var tb = 0; tb < (30 - nbj) ; tb++) {
tirage[tb] = tabid[ta++];
if (ta >= tabid.length) ta = 0;
}
/* récup citations tirées et ajoute dans buf page citations */
for (var tb = 0; tb < tirage.length ; tb++) {
/* jour suivant */
djtop.setDate(djtop.getDate() + 1);
var nextday = formatdateyyyymmdd(djtop);
/* cherche texte et page pour chaque id choisi */
stop: for (var np = 0; np < tabpagecit.length; np++) {
for (var rx = 0; rx < tabpagecit[np]['list'].length; rx++) {
if (tabpagecit[np]['list'][rx]['id'] == tirage[tb]) {
buf += '\n| '+nextday+'=<div id="cdj_lnk">➤ Citation extraite de la page [['+tabpagecit[np]['title']+']]</div>';
buf += '\n'+tabpagecit[np]['list'][rx]['cit'];
break stop;
}
}
}
}
/* ajoute fin switch */
buf += '\n|#default=\n}}';
/* remplace html entities (dues à texte origine edit vers view) */
buf = buf.replace(/</g, '<');
buf = buf.replace(/>/g, '>');
buf = buf.replace(/&/g, '&');
buf = buf.replace(/"/g, '"');
progressop.innerHTML += 'Mise à jour page des citations...<br />';
/* récup éléments du formulaire */
pagedit = pagedit[0]+pagedit[2];
pagedit = pagedit.replace(/\n/g, '');
var startime = pagedit.match(/wpSection.*name="wpStarttime/i);
startime = startime[0].replace(/.*value="([0-9]+)" name="wpStarttime/i, '$1');
var editime = pagedit.match(/wpStarttime.*name="wpEdittime/i);
editime = editime[0].replace(/.*value="([0-9]+)" name="wpEdittime/i, '$1');
var editoken = pagedit.match(/.{80}name="wpEditToken/i);
editoken = editoken[0].replace(/.*value="([0-f+]+)" name="wpEditToken/i, '$1');
var autosummary = pagedit.match(/wpAutoSummary.{1,30}value="[^"]+"/i);
autosummary = autosummary[0].replace(/.*value="([0-f]+)"/i, '$1');
var summary = 'Routine prepare citation du jour';
/* init requete serveur - maj sous-page Accueil/Citation */
var boundary = '--------------23242526272829';
var data = '';
//data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpAntispam"\r\n\r\n\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpSection"\r\n\r\n\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpScrolltop"\r\n\r\n0\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpStarttime"\r\n\r\n'+startime+'\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpEdittime"\r\n\r\n'+editime+'\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpEditToken"\r\n\r\n'+editoken+'\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpSummary"\r\n\r\n'+summary+'\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpAutoSummary"\r\n\r\n'+autosummary+'\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpSave"\r\n\r\nPublier\r\n';
data += '--'+boundary+'\r\nContent-Disposition: form-data; name="wpTextbox1"\r\n\r\n'+buf+'\r\n';
data += '--'+boundary+'--\r\n';
xhr_object.open('POST', '/w/index.php?title=BoyWiki:Accueil/Citation_du_jour&action=submit', false);
//xhr_object.setRequestHeader("Host", "fr.boywiki.org");
xhr_object.setRequestHeader("Charset", "utf-8");
xhr_object.setRequestHeader("Content-Type", "multipart/form-data; boundary="+boundary);
xhr_object.setRequestHeader("Content-Length", String(data.length));
xhr_object.send(data);
if (xhr_object.readyState != 4 || xhr_object.status != 200) {
progressop.innerHTML += 'Erreur 6 - Abandon';
}
else progressop.innerHTML += 'Fin procédure.';
}
/* retourne un tableau des citations extraites par id pour chaque page href */
function getabcitationperpage(xhr_object,href) {
/* init requete serveur - lecture page href */
href = href.replace(/\/wiki\//, '/w/index.php?title=')+'&action=edit';
xhr_object.open('GET', href, false);
xhr_object.send('');
if (xhr_object.readyState != 4 || xhr_object.status != 200) {
progressop.innerHTML = 'Erreur 4 - Abandon';
return;
}
var tabcit = new Array();
/* recup contenu utile */
var pagedit = xhr_object.responseText.split(/<textarea[^>]*>|<\/textarea>/gi);
/* recherche chaines modèles {{Extrait}} */
var content = pagedit[1].split(/\{\{[Ee]xtrait\|/g);
if (content == null) return;
/* pour chaque modèle trouvé */
var nc = 0;
for (var m = 1; m < content.length ; m++) {
/* recherche fin modèle (parenthèses de fermeture) - extraction contenu */
var open = 1;
var close = 0;
for (var i = 0; i < content[m].length ; i++) {
if (content[m][i] == '{' && content[m][i+1] == '{') {open++; i++;}
if (content[m][i] == '}' && content[m][i+1] == '}') {close++; i++;}
if (open == close) break;
}
var submodl = content[m].substr(0,i-1);
/* controle args (si id absent ou cdj=non) */
var id = submodl.match(/^id=([0-9]{6,9})\|/);
if (id == null) continue;
if (submodl.match(/^ ?cdj=non ?\|/)) continue;
/* tronque citation si trop longue */
var nbchrmax = 740;
var citrc = '';
var trc = submodl.split(/\{\{[Rr]éf [Ll]ivre\|/);
if (trc[0].length > nbchrmax) {
citrc = trc[0].substr(0,(nbchrmax-10));
citrc = citrc.substr(0, citrc.lastIndexOf(' '));
if (trc[1] != undefined) citrc = citrc+' (...)\n{{Réf Livre|'+trc[1];
else citrc = citrc+' (...)';
}
/* copie contenu modèle */
tabcit[nc] = new Array();
tabcit[nc]['id'] = id[1];
if (citrc.length > 0) tabcit[nc]['cit'] = '{{Extrait|'+citrc+'}}';
else tabcit[nc]['cit'] = '{{Extrait|'+submodl+'}}';
nc++;
}
return tabcit;
}