Progetto:Bot/Programmi in Python per i bot/ListeAutori.py
Aspetto
#!/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 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"),
#### 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()
[visualizza] [modifica] Documentazione
Questa documentazione è transclusa da Progetto:Bot/Programmi in Python per i bot/ListeAutori.py/doc. (modifica | cronologia)
Descrizione
Questo programma aggiorna le liste relative a tutte le categorie di autori. In questo modo vengono generate degli elenchi automatici da inserire nelle pagine di servizio.
Quando usarlo
Il programma viene lanciato ogni notte in modo automatico.
Può essere lanciato all'occorrenza quando si è certi che siano stati aggiunti/rimossi degli autori.
Nome del file
ListeAutori.py
Comando
- python ListeAutori.py
- Aggiorna le liste relative a tutte le categorie di autori
- python ListeAutori.py -solo "NOME CATEGORIA"
- Aggiorna le liste solo relative alla categoria specificata
- python ListeAutori.py -contiene "PAROLA CONTENUTA NELLA CATEGORIA"
- Aggiorna le liste per tutte le categorie che contengono una parola definita
Esempi
- python ListeAutori.py -solo "Autori del XVIII secolo"
- Per aggiornare la lista presente su Wikisource:Indice cronologico degli autori del XVIII secolo
- python ListeAutori.py -contiene "Autori-"
- Per aggiornare tutte le liste di Wikisource:Indice alfabetico degli autori