#!/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()