#!/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
{{subst:REVISIONDAY}}.{{subst:REVISIONMONTH}}.{{subst:REVISIONYEAR}}]]''</small></div><noinclude>[[Categoria:Liste di sistema per gli autori| ]]</noinclude>
"""
# 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 VI secolo", u"Wikisource:Elenco cronologico degli autori del VI secolo"),
(u"Categoria:Autori del VII secolo", u"Wikisource:Elenco cronologico degli autori del VII secolo"),
(u"Categoria:Autori del VIII secolo", u"Wikisource:Elenco cronologico degli autori del VIII secolo"),
(u"Categoria:Autori del IX secolo", u"Wikisource:Elenco cronologico degli autori del IX secolo"),
(u"Categoria:Autori del X secolo", u"Wikisource:Elenco cronologico degli autori del X secolo"),
(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
#troppo lunga! ("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"),
#### Scrittori
# ("Categoria:Scrittori", "Wikisource:Elenco degli scrittori"),
# ("Categoria:Bibliofili", "Wikisource:Elenco dei bibliofili"),
#### Scrittori per genere
# ("Categoria:Scrittori per genere", "Wikisource:Elenco degli scrittori per genere"),
# ("Categoria:Critici letterari", "Wikisource:Elenco dei critici letterari"),
## 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
# ("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"),
]
def find_stringa(stringa,idi,idf,dc=0,side="left"):
if side=="right":
idip=stringa.rfind(idi)
else:
idip=stringa.find(idi)
idfp=stringa.find(idf,idip+len(idi))+len(idf)
if idip>-1 and idfp>0:
if dc==0:
vvalore=stringa[idip+len(idi):idfp-len(idf)]
else:
vvalore=stringa[idip:idfp]
else:
vvalore=""
return vvalore
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('it', 'wikisource')
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 += (
"{{AutoreIndici|" + autore.titleWithoutNamespace() + "}}\n" )
listanuova=contenutoPagina
contenutoPagina = paginaListaSchema.replace("*LISTA*", contenutoPagina)
lista = wikipedia.Page(self.sito, lista)
listavecchia=find_stringa(lista.get(),'{|style="width:100%; background:transparent"\n','|}')
if "<!-- blocca ListaAutori.py -->" in lista.get():
wikipedia.output("La pagina " + lista.title() + " non e' aggiornabile con ListaAutori.py")
elif listanuova==listavecchia:
wikipedia.output("La pagina " + lista.title() + " non ha subito modifiche rispetto all'ultimo edit")
else:
lista.put(contenutoPagina)
def main():
"""Lancia il bot sulle pagine elencate in "categorieListe". """
import sys
listeDaGenerare = []
argomenti = wikipedia.handleArgs()
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 argomenti[1] in catList[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()