Utente:Qualc1/BotScripts/listeAutori.py

Da Wikisource.
Nome del programma listeAutori.py
Autore Qualc1
Descrizione
  • Genera tutte le pagine contenenti gli elenchi degli autori, partendo dalle categorie degli autori.
Come si usa
python listeAutori.py
Crea le liste relative a tutte le categorie di autori
python listeAutori.py -solo Autori-A "Autori del XII secolo"
Crea le liste solo relative alle categorie specificate
python listeAutori.py -contiene secolo
Crea le liste per "Autori del XI secolo", "Autori del X
Dove si trova Utente:Qualc1/BotScripts/listeAutori.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
"""
Crea le liste relative alle categorie di autori.
 
Parametri da passare allo script:
-solo lista_categorie
    Crea le liste relative solo alle categorie specificate.
-contiene pattern
    Crea le liste relative solo alle categorie che contengono nel titolo "pattern".
-aiuto
    Mostra queste informazioni di aiuto.
 
Esempio:
        python listeAutori.py
            Crea le liste relative a tutte le categorie di autori
        python listeAutori.py -solo Autori-A "Autori del XII secolo"
            Crea le liste solo relative alle categorie specificate
        python listeAutori.py -contiene secolo
            Crea le liste per "Autori del XI secolo", "Autori del XII secolo",..
"""
 
import time
import wikipedia, catlib
 
# la parte di testo "costante" in tutte le pagine lista.
paginaListaSchema = u"""<noinclude>{{Lista Bot}}</noinclude>
{|style="width:100%; background:transparent"
*LISTA*|}
<div style="text-align:right;"><small>''[[Aiuto:Elenchi generati da bot|Elenco generato il giorno """ + \
time.strftime("%d.%m.%Y, %H:%M", time.gmtime()) + """]]''
"""
 
# un lista di coppie "categoria di qualche tipo di autore" - "corrispondente lista"
categorieListe = [ 
# Indice alfabetico
    ("Categoria:Autori-A", "Wikisource:Elenco alfabetico degli autori A"), 
    ("Categoria:Autori-B", "Wikisource:Elenco alfabetico degli autori B"),
    ("Categoria:Autori-C", "Wikisource:Elenco alfabetico degli autori C"),
    ("Categoria:Autori-D", "Wikisource:Elenco alfabetico degli autori D"),
    ("Categoria:Autori-E", "Wikisource:Elenco alfabetico degli autori E"),
    ("Categoria:Autori-F", "Wikisource:Elenco alfabetico degli autori F"),
    ("Categoria:Autori-G", "Wikisource:Elenco alfabetico degli autori G"),
    ("Categoria:Autori-H", "Wikisource:Elenco alfabetico degli autori H"),
    ("Categoria:Autori-I", "Wikisource:Elenco alfabetico degli autori I"),
    ("Categoria:Autori-J", "Wikisource:Elenco alfabetico degli autori J"),
    ("Categoria:Autori-K", "Wikisource:Elenco alfabetico degli autori K"),
    ("Categoria:Autori-L", "Wikisource:Elenco alfabetico degli autori L"),
    ("Categoria:Autori-M", "Wikisource:Elenco alfabetico degli autori M"),
    ("Categoria:Autori-N", "Wikisource:Elenco alfabetico degli autori N"),
    ("Categoria:Autori-O", "Wikisource:Elenco alfabetico degli autori O"),
    ("Categoria:Autori-P", "Wikisource:Elenco alfabetico degli autori P"),
    ("Categoria:Autori-Q", "Wikisource:Elenco alfabetico degli autori Q"),
    ("Categoria:Autori-R", "Wikisource:Elenco alfabetico degli autori R"),
    ("Categoria:Autori-S", "Wikisource:Elenco alfabetico degli autori S"),
    ("Categoria:Autori-T", "Wikisource:Elenco alfabetico degli autori T"),
    ("Categoria:Autori-U", "Wikisource:Elenco alfabetico degli autori U"),
    ("Categoria:Autori-V", "Wikisource:Elenco alfabetico degli autori V"),
    ("Categoria:Autori-W", "Wikisource:Elenco alfabetico degli autori W"),
    ("Categoria:Autori-X", "Wikisource:Elenco alfabetico degli autori X"),
    ("Categoria:Autori-Y", "Wikisource:Elenco alfabetico degli autori Y"),
    ("Categoria:Autori-Z", "Wikisource:Elenco alfabetico degli autori Z"),
# Indice cronologico
    (u"Categoria:Autori dell'Antichità", u"Wikisource:Elenco cronologico degli autori dell'Antichità"),
    (u"Categoria:Autori del Medioevo", u"Wikisource:Elenco cronologico degli autori del Medioevo"),
    (u"Categoria:Autori del XI secolo", u"Wikisource:Elenco cronologico degli autori del XI secolo"),
    (u"Categoria:Autori del XII secolo", u"Wikisource:Elenco cronologico degli autori del XII secolo"),
    (u"Categoria:Autori del XIII secolo", u"Wikisource:Elenco cronologico degli autori del XIII secolo"),
    (u"Categoria:Autori del XIV secolo", u"Wikisource:Elenco cronologico degli autori del XIV secolo"),
    (u"Categoria:Autori del XV secolo", u"Wikisource:Elenco cronologico degli autori del XV secolo"),
    (u"Categoria:Autori del XVI secolo", u"Wikisource:Elenco cronologico degli autori del XVI secolo"),
    (u"Categoria:Autori del XVII secolo", u"Wikisource:Elenco cronologico degli autori del XVII secolo"),
    (u"Categoria:Autori del XVIII secolo", u"Wikisource:Elenco cronologico degli autori del XVIII secolo"),
    (u"Categoria:Autori del XIX secolo", u"Wikisource:Elenco cronologico degli autori del XIX secolo"),
    (u"Categoria:Autori del XX secolo", u"Wikisource:Elenco cronologico degli autori del XX secolo"),
    (u"Categoria:Autori del XXI secolo", u"Wikisource:Elenco cronologico degli autori del XXI secolo"),
# Autori citati
    ("Categoria:Autori citati in opere pubblicate", "Wikisource:Elenco degli autori citati in opere pubblicate"),
# Indice per argomento
## Arti
    ("Categoria:Autori di testi delle arti", "Wikisource:Elenco degli autori di testi delle arti"), 
### Arti performative
    ("Categoria:Autori di testi delle arti performative", "Wikisource:Elenco degli autori di testi delle arti performative"), 
#### Musica
    ("Categoria:Autori di testi musicali", "Wikisource:Elenco degli autori di testi musicali"), 
    ("Categoria:Musicisti", "Wikisource:Elenco dei musicisti"), 
    ("Categoria:Compositori", "Wikisource:Elenco dei compositori"), 
#### Teatro
    ("Categoria:Autori di opere teatrali", "Wikisource:Elenco degli autori di opere teatrali"), 
    ("Categoria:Drammaturghi", "Wikisource:Elenco dei drammaturghi"), 
### Arti visive
    ("Categoria:Autori di testi delle arti visive", "Wikisource:Elenco degli autori di testi delle arti visive"), 
#### Arti plastiche
    ("Categoria:Autori di testi delle arti plastiche", "Wikisource:Elenco degli autori di testi delle arti plastiche"), 
##### Scultura
    ("Categoria:Autori di testi di scultura", "Wikisource:Elenco degli autori di testi di scultura"), 
    ("Categoria:Scultori", "Wikisource:Elenco degli scultori"),
#### Pittura
    ("Categoria:Autori di testi di pittura", "Wikisource:Elenco degli autori di testi di pittura"), 
    ("Categoria:Pittori", "Wikisource:Elenco dei pittori"),

### Letteratura
    ("Categoria:Autori di opere letterarie", "Wikisource:Elenco degli autori di opere letterarie"), 

## Filosofia
    ("Categoria:Autori di testi di filosofia", "Wikisource:Elenco degli autori di testi di filosofia"), 
    ("Categoria:Filosofi", "Wikisource:Elenco dei filosofi"),
    ("Categoria:Filosofi britannici", "Wikisource:Elenco dei filosofi britannici"),
    ("Categoria:Filosofi cinesi", "Wikisource:Elenco dei filosofi cinesi"),
    ("Categoria:Filosofi francesi", "Wikisource:Elenco dei filosofi francesi"),
    ("Categoria:Filosofi greci", "Wikisource:Elenco dei filosofi greci"),
    ("Categoria:Filosofi italiani", "Wikisource:Elenco dei filosofi italiani"),
    ("Categoria:Filosofi latini", "Wikisource:Elenco dei filosofi latini"),
## Scienze
### Scienze matematiche, fisiche e naturali
    ("Categoria:Autori di testi delle scienze matematiche, fisiche e naturali", "Wikisource:Elenco degli autori di testi delle scienze matematiche, fisiche e naturali"),
    ("Categoria:Scienziati", "Wikisource:Elenco degli scienziati"),
#### Astronomia
    ("Categoria:Autori di testi di astronomia", "Wikisource:Elenco degli autori di testi di astronomia"),
    ("Categoria:Astronomi", "Wikisource:Elenco degli astronomi"),
    ("Categoria:Saggisti di astronomia", "Wikisource:Elenco dei saggisti di astronomia"),
#### Fisica
    ("Categoria:Autori di testi di fisica", "Wikisource:Elenco degli autori di testi di fisica"),
    ("Categoria:Fisici", "Wikisource:Elenco dei fisici"),
#### Geografia
    ("Categoria:Autori di testi di geografia", "Wikisource:Elenco degli autori di testi di geografia"),
    ("Categoria:Esploratori", "Wikisource:Elenco degli esploratori"),
    ("Categoria:Geografi", "Wikisource:Elenco dei geografi"),
    ("Categoria:Viaggiatori", "Wikisource:Elenco dei viaggiatori"),
#### Matematica
    ("Categoria:Autori di testi di matematica", "Wikisource:Elenco degli autori di testi di matematica"),
    ("Categoria:Matematici", "Wikisource:Elenco dei matematici"),
    ("Categoria:Saggisti di matematica", "Wikisource:Elenco dei saggisti di matematica"),
    ("Categoria:Storici delle matematiche", "Wikisource:Elenco degli storici delle matematiche"),
#### Scienze naturali
    ("Categoria:Autori di testi delle scienze naturali", "Wikisource:Elenco degli autori di testi delle scienze naturali"),
    ("Categoria:Naturalisti", "Wikisource:Elenco dei naturalisti"),
### Scienze sociali

### Tecnologia e scienze applicate
    ("Categoria:Autori di testi di tecnologia e scienze applicate", "Wikisource:Elenco degli autori di testi di tecnologia e scienze applicate"), 
#### Architettura
    ("Categoria:Autori di testi di architettura", "Wikisource:Elenco degli autori di testi di architettura"),
    ("Categoria:Architetti", "Wikisource:Elenco degli architetti"),
#### Informatica
    ("Categoria:Autori di testi di informatica", "Wikisource:Elenco degli autori di testi di informatica"),
    ("Categoria:Informatici", "Wikisource:Elenco degli informatici"),
    ("Categoria:Programmatori", "Wikisource:Elenco dei programmatori"),
#### Ingegneria
    ("Categoria:Autori di testi di ingegneria", "Wikisource:Elenco degli autori di testi di ingegneria"),
    ("Categoria:Ingegneri", "Wikisource:Elenco degli ingegneri"),
#### Medicina
    ("Categoria:Autori di testi di medicina", "Wikisource:Elenco degli autori di testi di medicina"),
    ("Categoria:Medici", "Wikisource:Elenco dei medici"),
    ]
 
 
class ListeAutori:
    """Bot che date delle coppie "categoria"-"pagina elenco",
        genera gli elenchi partendo dalle categorie.
    """
 
    def __init__(self, listeDaGenerare):
        """Costruisce un bot che agira` sulle coppie di pagine in "listeDaGenerare".
        """
        self.listeDaGenerare = listeDaGenerare
        self.sito = wikipedia.getSite()
        wikipedia.action = "Bot: aggiornamento delle liste relativi agli autori"
 
    def run(self):
        """Avvia la generazione delle pagine lista."""
        for (categoria, lista) in self.listeDaGenerare:
#            print categoria, " -> ", lista
            categoria = catlib.Category(self.sito, categoria)
            autori = categoria.articles()
            contenutoPagina = u""
            for autore in autori:
                contenutoPagina += (
                    "{{Template:" + autore.titleWithoutNamespace() + "}}\n" )
            contenutoPagina = paginaListaSchema.replace("*LISTA*", contenutoPagina)
            lista = wikipedia.Page(self.sito, lista)
            lista.put(contenutoPagina)
 
 
def main():
    """Lancia il bot sulle pagine elencate in "categorieListe". """
    import sys
    listeDaGenerare = []
    argomenti = sys.argv[1:]
    if len(argomenti) == 0:
        listeDaGenerare = categorieListe
    else:
        operazione = argomenti[0]
        altriArg = argomenti[1:]
        if operazione == "-solo" and len(altriArg) >= 1:
            catChieste = [u"Categoria:" + cat for cat in argomenti[1:]]
            listeDaGenerare = [catList for catList in categorieListe if catList[0] in catChieste]
        elif operazione == "-contiene" and len(altriArg) == 1:
            listeDaGenerare = [catList for catList in categorieListe if catList[0].find(argomenti[1]) >= 0]
        elif operazione == "-aiuto":
            print __doc__
            sys.exit(0)
        else:
            print "Parametri non validi.\n\nIstruzioni:\n" + __doc__
            sys.exit(1)
    bot = ListeAutori(listeDaGenerare)
    bot.run()
 
 
if __name__  == "__main__":
        try:
                main()
        except:
                wikipedia.stopme()
                raise
        else:
                wikipedia.stopme()