Wikibooks:Elenchi generati offline/Libri non linkati nei ripiani: differenze tra le versioni

aggiorno e correggo script
m (aggiorno)
(aggiorno e correggo script)
|query =
|alternative=
*Apri la console Javascript del browser.
*Apri [http://dumps.wikimedia.org/itwikibooks/], scorri fino al dump più recente, scarica il dump "List of page titles"; scompattalo.
*Crea un array con tutti i titoli dei libri (per es. dall'[[WB:Elenchi generati offline/Libri|apposito elenco gen. offline]]).
*Esegui su terminale (Unix/Linux):
<pre><nowiki>
echo 'titoli = [' > titoli.txt
grep -v '/' < list_of_page_titles | sed 's/\"/\\"/g ; s/^/"/ ; s/$/",/' >> titoli.txt
echo '];' >> titoli.txt
</nowiki></pre>
*Apri una pagina di Wikibooks, e la console Javascript del browser.
*Copia tutto il testo del file titoli.txt ed eseguilo nella console come una sola istruzione JS.
*Incolla questo codice nella console ed eseguilo:
<pre><nowiki>
codificaTitoli(); // modifica l'array titoli
console.log("Libri che non sono linkati dai ripiani:");
libriLinkati = libriLinkatiNeiRipiani();
for(i = 0, j = 10; i < titoli.length; i+= 10, j+= 10) {
libriNonLinkati = $.grep( titoli, function(obj, index) { return !isTitoloInArray(obj, libriLinkati) } );
analizza(titoli.slice(i, j));
stampaArray( libriNonLinkati );
 
// @return Un array con i titoli dei libri linkati nei ripiani.
function libriLinkatiNeiRipiani() {
ripiani = elencaRipiani();
ripianiInFormatoHtml = scaricaRipianiInHtml(ripiani);
 
var libriLinkati = [];
for(i = 0; i < ripianiInFormatoHtml.length; i++) {
libriLinkati = libriLinkati.concat( libriLinkatiNellHtml(ripianiInFormatoHtml[i]) );
}
return libriLinkati;
}
// @return Un array con i nomi dei ripiani.
console.log("Fine elenco.");
function elencaRipiani() {
console.log("Scarico elenco dei ripiani...")
json = apiSync({ action: 'query', format: 'json', list: 'allpages', apnamespace: 102, aplimit: 500 });
pagine = JSON.parse( json ).query.allpages;
 
elenco = [];
// @param titoli Un array di non più di 10 titoli.
for(i = 0; i < pagine.length; i++) {
function analizza(titoli) {
elenco.push(pagine[i].title);
query = $.ajax({
}
url: mw.util.wikiScript('api'),
// Questa API non supporta più di 10 titoli alla volta...
data: { action: 'query', prop: 'info', titles: titoli.join("|"), format: 'json' },
type: 'POST', async: false
});
pagine = JSON.parse(query.responseText).query.pages;
 
// Workaround temporaneo: finché le vecchie sottopagine dei ripiani, che non hanno il DynamicPageList, non sono cancellate.
for(id in pagine) {
elenco = $.grep(elenco, function(obj) {return obj.indexOf('/') == -1;});
if (pagine[id].redirect != undefined) // è un redirect
 
continue;
return elenco;
 
query = $.ajax({
}
url: mw.util.wikiScript('api'),
// @return Un array il cui elemento i-esimo è il contenuto in html del ripiano
data: { action: 'query', list: 'backlinks', blnamespace: 102, bltitle: pagine[id].title, format: 'json' },
// il cui titolo è ripiani[i].
async: false
function scaricaRipianiInHtml(ripiani) {
risultato = [];
for(i = 0; i < ripiani.length; i++) {
console.log("Scarico ripiano " + i + "/" + ripiani.length);
json = apiSync({ action: 'parse', format: 'json', page: ripiani[i] });
html = JSON.parse( json ).parse.text["*"];
risultato.push(html);
}
return risultato;
}
// @return Un array dei titoli dei libri linkati nel codice html specificato.
function libriLinkatiNellHtml(html) {
var libriLinkati = [];
// Il selettore jQuery che segue è un po' "strano", ma empiricamente pare che non funzioni se lo modifico
$(html).children("").children("li a").each(function() {
href = $(this).attr("href");
// Prendendo ciò che viene dopo "/wiki/", escludo automaticamente i link che non puntano a MediaWiki.
// Tuttavia, potrebbero esserci dei link che puntano a wiki diverse da it.wikibooks.
match = (/\/wiki\/(.*)$/).exec( href ); // null se non c'è corrispondenza. Altrimenti, [0] è il testo comprensivo di "/wiki/", [1] è il capturing group.
if (match != null) {
libriLinkati.push(match[1]);
}
});
return libriLinkati;
backlinks = JSON.parse(query.responseText).query.backlinks;
}
// Richiesta sincrona alle API di MediaWiki.
function apiSync(data) {
return $.ajax({
url:mw.util.wikiScript('api'),
data: data,
async:false
}) .responseText;
}
function codificaTitoli() {
for(i = 0; i < titoli.length; i++) {
titoli[i] = mw.util.wikiUrlencode(titoli[i]);
}
}
// @return true se il titolo è nell'array di titoli specificato, false altrimenti.
function isTitoloInArray(titolo, array) {
for(i = 0; i < array.length; i++) {
if (titolo == array[i] || mw.util.wikiUrlencode(titolo) == array[i])
return true;
}
return false;
if (backlinks.length == 0) console.log("# [[" + pagine[id].title + "]]");
}
 
function stampaArray(array) {
console.log( "Libri non linkati nei ripiani:" );
console.log( "# [[" + array.join("]]\n# [[") + "]]" );
console.log( "Fine elenco" );
}
</nowiki></pre>
 
|elenco=
# [[Accademie_teatrali_nel_mondo]]
# [[Algebra]]
# [[Aziende_di_Erogazione%2C_Azienda_dello_Stato_e_Enti_Locali]]
# [[Aeromodellismo]]
# [[Armi_tedesche_seconda_guerra_mondiale]]
# [[Accademie teatrali nel mondo]]
# [[Bavaria_%28Nervesa_della_Battaglia%29]]
# [[Page title]]
# [[AraboBuchi_neri_e_Universo]]
# [[ApicolturaCarmina_%28Catullo%29]]
# [[Catalogo_Monete_Italiane_1946-2001]]
# [[Archiviazione documenti cartacei]]
# [[Chimica_fisica]]
# [[Architettura dei calcolatori]]
# [[Costruire_un_orario_scolastico]]
# [[Atletica leggera]]
# [[Elementi_di_Euclide]]
# [[Armi avanzate della Seconda Guerra Mondiale]]
# [[Elettronica_di_Potenza]]
# [[Armi tedesche seconda guerra mondiale]]
# [[BasketElezioni_in_Italia]]
# [[B-52 Stratofortress]]
# [[Bavaria (Nervesa della Battaglia)]]
# [[Buchi neri e Universo]]
# [[Calcio]]
# [[Caccia tattici in azione]]
# [[Catalogo Filatelico Internazionale]]
# [[Catalano]]
# [[Catalogo Monete Italiane 1946-2001]]
# [[Cinese]]
# [[Chitarra]]
# [[Comunicazione formativa]]
# [[Come costruire una casa]]
# [[Consultare l'Orario Ferroviario]]
# [[Comunicazioni digitali]]
# [[Costruire un acquario]]
# [[Creare DVD]]
# [[Costituzione del Giappone del 1889]]
# [[Croato]]
# [[Dati utili per wargamers]]
# [[Cronologia delle invenzioni]]
# [[Ebraico]]
# [[Disturbi mentali]]
# [[Diventare un bravo studente]]
# [[Doma dei cavalli]]
# [[Elettronica fisica]]
# [[Elezioni in Italia]]
# [[Elettronica di Potenza]]
# [[Elettrotecnica]]
# [[Esercitazioni_pratiche_di_Elettrotecnica]]
# [[Esercitazioni pratiche di Elettrotecnica]]
# [[EquitazioneFarmacologia]]
# [[F-104_Starfighter]]
# [[Eserciziario di informatica]]
# [[Estetica contestualeFilosofia_del_diritto]]
# [[FantacalcioFinlandia]]
# [[Fondamenti_di_automatica]]
# [[F-104 Starfighter]]
# [[Geometria_per_le_medie_inferiori]]
# [[Finlandese]]
# [[Filosofia del dirittoGiappone]]
# [[Geometria_per_scuola_elementare]]
# [[Fondamenti di informatica 1]]
# [[Flora italianaGeometrie_non_euclidee]]
# [[GeometriaImpero_asburgico]]
# [[Gaelico irlandeseInformatica_ecologica]]
# [[FranceseItalia]]
# [[La_terra_per_nutrire_il_pianeta]]
# [[Forze armate mondiali dal secondo dopoguerra al XXI secolo]]
# [[FotografiaLua]]
# [[Giapponese]]
# [[Giochi con carta e penna]]
# [[Grammatica contestuale]]
# [[Giochi di carte]]
# [[Greco antico]]
# [[Greco moderno]]
# [[Guida difensiva]]
# [[Interlingua]]
# [[Inglese]]
# [[Intensificazione dell'intelligenza]]
# [[Insubre]]
# [[Inform e Glulx]]
# [[Informatica ecologica]]
# [[L'uomo di casa]]
# [[Italiano]]
# [[Latino]]
# [[Libro di cucina]]
# [[Lingua greca moderna]]
# [[La terra per nutrire il pianeta]]
# [[Linguistica contestuale]]
# [[Lucidatura autoveicolo]]
# [[Metin2]]
# [[Manuale nautico]]
# [[MariaDB]]
# [[Matrici]]
# [[Napoletano]]
# [[Navigazione in Internet]]
# [[Metrica classica]]
# [[Na'vi]]
# [[Norvegese]]
# [[Organo]]
# [[OpenProj]]
# [[Neopets]]
# [[Orto]]
# [[Numero_misto]]
# [[Organizzare un matrimonio]]
# [[Osservare_il_cielo_da_40%C2%B0N]]
# [[Pagina principale]]
# [[PallavoloPagina_principale]]
# [[OtorinolaringoiatriaPensare_da_informatico]]
# [[Poesie_%28Palazzeschi%29]]
# [[Pesca alla trota]]
# [[Reazioni_di_chimica_organica]]
# [[Pensiero castanedico]]
# [[Prendere appuntiPyturtle]]
# [[PiemonteseReti_logiche]]
# [[Semplici_modelli_differenziali]]
# [[Recitazione]]
# [[Storia_delle_miniere_di_sale_siciliane]]
# [[Puntamento della parabola]]
# [[Teoria_delle_aperture_negli_scacchi]]
# [[Razzimodellismo]]
# [[Ungheria]]
# [[Riparazione della bicicletta]]
# [[RocciaVirtualDubMod]]
# [[RompicapiYu-Gi-Oh%21]]
# [[Rete LAN crossover]]
# [[Risolvere il cubo di Rubik]]
# [[Russo]]
# [[Scacchi]]
# [[Rumeno]]
# [[Semplici modelli differenziali]]
# [[Scienze della Terra per le superiori]]
# [[Sardo]]
# [[Sloveno]]
# [[Skateboard]]
# [[Sistema delle acque bolognesi]]
# [[Smettere di fumare]]
# [[Snort]]
# [[Spagnolo]]
# [[Sogno lucido]]
# [[Storia delle Forze armate tedesche dal 1945]]
# [[Storia della filosofia]]
# [[Storia dei papi del Novecento]]
# [[Storia della definizione geografica del Friuli]]
# [[Storia delle miniere di sale siciliane]]
# [[Strutture dati e database]]
# [[Svedese]]
# [[Storia di Roma]]
# [[Suonare la batteria]]
# [[Swahili]]
# [[Tarantino]]
# [[Storia per le medie]]
# [[Tedesco]]
# [[Teoria musicale]]
# [[Teoria delle aperture negli scacchi]]
# [[Texas Hold'em]]
# [[Teoria della Probabilità]]
# [[Tecnologie Informatiche]]
# [[Travian]]
# [[Tribal Wars]]
# [[Unione Europea]]
# [[Video editing]]
# [[Wikijunior Grandi felini]]
# [[Wikijunior Giochi per bambini]]
# [[Wikijunior Dinosauri]]
# [[Wikijunior Il corpo umano]]
# [[Wikijunior Alfabeto degli animali]]
# [[Wikijunior Colori]]
# [[Wikijunior Europa]]
# [[Wikijunior Il sistema solare]]
# [[Wikijunior Sudamerica]]
# [[Wikijunior lingue]]
# [[Yu-Gi-Oh!]]
}}