Wikibooks:Elenchi generati offline/Libri non linkati nei ripiani: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m aggiorno |
aggiorno e correggo script |
||
Riga 4: | Riga 4: | ||
|query = |
|query = |
||
|alternative= |
|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: |
*Incolla questo codice nella console ed eseguilo: |
||
<pre><nowiki> |
<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> |
</nowiki></pre> |
||
|elenco= |
|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]] |
|||
# [[ |
# [[Buchi_neri_e_Universo]] |
||
# [[ |
# [[Carmina_%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]] |
|||
# [[ |
# [[Elezioni_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]] |
# [[Elettrotecnica]] |
||
# [[Esercitazioni_pratiche_di_Elettrotecnica]] |
|||
# [[Esercitazioni pratiche di Elettrotecnica]] |
|||
# [[ |
# [[Farmacologia]] |
||
# [[F-104_Starfighter]] |
|||
# [[Eserciziario di informatica]] |
|||
# [[ |
# [[Filosofia_del_diritto]] |
||
# [[ |
# [[Finlandia]] |
||
# [[Fondamenti_di_automatica]] |
|||
# [[F-104 Starfighter]] |
|||
# [[Geometria_per_le_medie_inferiori]] |
|||
# [[Finlandese]] |
|||
# [[ |
# [[Giappone]] |
||
# [[Geometria_per_scuola_elementare]] |
|||
# [[Fondamenti di informatica 1]] |
|||
# [[ |
# [[Geometrie_non_euclidee]] |
||
# [[ |
# [[Impero_asburgico]] |
||
# [[ |
# [[Informatica_ecologica]] |
||
# [[ |
# [[Italia]] |
||
# [[La_terra_per_nutrire_il_pianeta]] |
|||
# [[Forze armate mondiali dal secondo dopoguerra al XXI secolo]] |
|||
# [[ |
# [[Lua]] |
||
# [[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]] |
# [[MariaDB]] |
||
# [[Matrici]] |
|||
# [[Napoletano]] |
|||
# [[Navigazione in Internet]] |
|||
# [[Metrica classica]] |
|||
# [[Na'vi]] |
|||
# [[Norvegese]] |
|||
# [[Organo]] |
|||
# [[OpenProj]] |
|||
# [[Neopets]] |
|||
# [[Orto]] |
# [[Orto]] |
||
# [[Numero_misto]] |
|||
# [[Organizzare un matrimonio]] |
|||
# [[Osservare_il_cielo_da_40%C2%B0N]] |
|||
# [[Pagina principale]] |
|||
# [[ |
# [[Pagina_principale]] |
||
# [[ |
# [[Pensare_da_informatico]] |
||
# [[Poesie_%28Palazzeschi%29]] |
|||
# [[Pesca alla trota]] |
|||
# [[Reazioni_di_chimica_organica]] |
|||
# [[Pensiero castanedico]] |
|||
# [[ |
# [[Pyturtle]] |
||
# [[ |
# [[Reti_logiche]] |
||
# [[Semplici_modelli_differenziali]] |
|||
# [[Recitazione]] |
|||
# [[Storia_delle_miniere_di_sale_siciliane]] |
|||
# [[Puntamento della parabola]] |
|||
# [[Teoria_delle_aperture_negli_scacchi]] |
|||
# [[Razzimodellismo]] |
|||
# [[Ungheria]] |
|||
# [[Riparazione della bicicletta]] |
|||
# [[ |
# [[VirtualDubMod]] |
||
# [[ |
# [[Yu-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!]] |
|||
}} |
}} |
||
Versione delle 07:04, 21 set 2012
Questo elenco generato il 18 settembre 2012 da una query su una copia del database di Wikibooks raccoglie tutte le pagine che sono libri non linkati in alcun ripiano.
Query
Alternative
- Apri la console Javascript del browser.
- Crea un array con tutti i titoli dei libri (per es. dall'apposito elenco gen. offline).
- Incolla questo codice nella console ed eseguilo:
codificaTitoli(); // modifica l'array titoli libriLinkati = libriLinkatiNeiRipiani(); libriNonLinkati = $.grep( titoli, function(obj, index) { return !isTitoloInArray(obj, libriLinkati) } ); 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. 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 = []; for(i = 0; i < pagine.length; i++) { elenco.push(pagine[i].title); } // Workaround temporaneo: finché le vecchie sottopagine dei ripiani, che non hanno il DynamicPageList, non sono cancellate. elenco = $.grep(elenco, function(obj) {return obj.indexOf('/') == -1;}); return elenco; } // @return Un array il cui elemento i-esimo è il contenuto in html del ripiano // il cui titolo è ripiani[i]. 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; } // 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; } function stampaArray(array) { console.log( "Libri non linkati nei ripiani:" ); console.log( "# [[" + array.join("]]\n# [[") + "]]" ); console.log( "Fine elenco" ); }
Elenco
- Accademie_teatrali_nel_mondo
- Aziende_di_Erogazione,_Azienda_dello_Stato_e_Enti_Locali
- Armi_tedesche_seconda_guerra_mondiale
- Bavaria_(Nervesa_della_Battaglia)
- Buchi_neri_e_Universo
- Carmina_(Catullo)
- Catalogo_Monete_Italiane_1946-2001
- Chimica_fisica
- Costruire_un_orario_scolastico
- Elementi_di_Euclide
- Elettronica_di_Potenza
- Elezioni_in_Italia
- Elettrotecnica
- Esercitazioni_pratiche_di_Elettrotecnica
- Farmacologia
- F-104_Starfighter
- Filosofia_del_diritto
- Finlandia
- Fondamenti_di_automatica
- Geometria_per_le_medie_inferiori
- Giappone
- Geometria_per_scuola_elementare
- Geometrie_non_euclidee
- Impero_asburgico
- Informatica_ecologica
- Italia
- La_terra_per_nutrire_il_pianeta
- Lua
- MariaDB
- Orto
- Numero_misto
- Osservare_il_cielo_da_40°N
- Pagina_principale
- Pensare_da_informatico
- Poesie_(Palazzeschi)
- Reazioni_di_chimica_organica
- Pyturtle
- Reti_logiche
- Semplici_modelli_differenziali
- Storia_delle_miniere_di_sale_siciliane
- Teoria_delle_aperture_negli_scacchi
- Ungheria
- VirtualDubMod
- Yu-Gi-Oh!