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

Wikibooks, manuali e libri di testo liberi.
Contenuto cancellato Contenuto aggiunto
aggiorno e correggo script
mNessun oggetto della modifica
Riga 46: Riga 46:
risultato = [];
risultato = [];
for(i = 0; i < ripiani.length; i++) {
for(i = 0; i < ripiani.length; i++) {
console.log("Scarico ripiano " + i + "/" + ripiani.length);
console.log("Scarico ripiano " + (i + 1) + "/" + ripiani.length);
json = apiSync({ action: 'parse', format: 'json', page: ripiani[i] });
json = apiSync({ action: 'parse', format: 'json', page: ripiani[i] });
html = JSON.parse( json ).parse.text["*"];
html = JSON.parse( json ).parse.text["*"];

Versione delle 07:41, 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 + 1) + "/" + 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

  1. Accademie_teatrali_nel_mondo
  2. Aziende_di_Erogazione,_Azienda_dello_Stato_e_Enti_Locali
  3. Armi_tedesche_seconda_guerra_mondiale
  4. Bavaria_(Nervesa_della_Battaglia)
  5. Buchi_neri_e_Universo
  6. Carmina_(Catullo)
  7. Catalogo_Monete_Italiane_1946-2001
  8. Chimica_fisica
  9. Costruire_un_orario_scolastico
  10. Elementi_di_Euclide
  11. Elettronica_di_Potenza
  12. Elezioni_in_Italia
  13. Elettrotecnica
  14. Esercitazioni_pratiche_di_Elettrotecnica
  15. Farmacologia
  16. F-104_Starfighter
  17. Filosofia_del_diritto
  18. Finlandia
  19. Fondamenti_di_automatica
  20. Geometria_per_le_medie_inferiori
  21. Giappone
  22. Geometria_per_scuola_elementare
  23. Geometrie_non_euclidee
  24. Impero_asburgico
  25. Informatica_ecologica
  26. Italia
  27. La_terra_per_nutrire_il_pianeta
  28. Lua
  29. MariaDB
  30. Orto
  31. Numero_misto
  32. Osservare_il_cielo_da_40°N
  33. Pagina_principale
  34. Pensare_da_informatico
  35. Poesie_(Palazzeschi)
  36. Reazioni_di_chimica_organica
  37. Pyturtle
  38. Reti_logiche
  39. Semplici_modelli_differenziali
  40. Storia_delle_miniere_di_sale_siciliane
  41. Teoria_delle_aperture_negli_scacchi
  42. Ungheria
  43. VirtualDubMod
  44. Yu-Gi-Oh!