Progetto:Bot/Programmi in Python per i bot/TemplateAutori.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Crea i template contententi i dati utili per ogni autore.
Parametri da passare allo script:
-solo "nome autore"
Crea le liste relative solo al nome specificato
-aiuto
Mostra queste informazioni di aiuto.
Esempi:
python TemplateAutori.py
Crea/aggiorna il template di ogni autore
python TemplateAutori.py -solo "Dante Alighieri"
Crea/aggiorna il template di Dante Alighieri
python TemplateAutori.py -solo "Dante Alighieri" "Cecco Angiolieri"
Crea/aggiorna il template di Dante Alighieri e di Cecco Angiolieri
"""
import re # python libs
import wikipedia, pagegenerators, catlib # pywikipedia libs
import templateHandler # my libs
paginaTemplate = \
u"""<noinclude>{{Lista Bot}}</noinclude><includeonly>*TEMPLATE_AUTORE*</includeonly><noinclude>__NOEDITSECTION__
<div class="toccolours" style="clear:both; margin-bottom: 0.5em; font-size: 90%;">
=== Descrizione ===
Inserisce i dati relativi all'autore formattati per le pagine indice.
=== Uso ===
Ricopiare il testo sottostante.
: '''<nowiki>{{*AUTORE*}}</nowiki>'''
</div>[[Categoria:Template per gli autori|{{PAGENAME}}]]</noinclude>
"""
class autoreToTemplate:
"""Deve prende una pagina contenente qualcosa tipo:
============================
{{Autore
|Nome=Cesare
|Cognome=Beccaria
|Iniziale del cognome=B
|Eventuale altro nome=
|Eventuale pseudonimo=
|Eventuale nome reale=
|Giorno e mese di nascita=15 marzo
|Anno di nascita=1738
|Giorno e mese di morte=28 novembre
|Anno di morte=1794
|Secolo di attivita`=
|Professione e nazionalita`=letterato, filosofo, giurista ed economista italiano
|Nome della pagina su Wikipedia=Cesare Beccaria
|Nome della pagina su Wikiquote=Cesare Beccaria
|Nome della pagina su Wikinotizie=
|Nome della pagina su Commons=Category:Cesare Beccaria
|Nome dell'immagine=CesareBeccaria.jpg
|Vuoi l'indice dei contenuti?=no
|Abbiamo testi scritti dall'autore?=si
|Abbiamo traduzioni scritte dall'autore?=no
|L'autore e` citato in altre opere pubblicate?=no
}}
==========================
E resituire:
==========================
{{Autore per indici
|Nome=Cesare
|Cognome=Beccaria
|Iniziale del cognome=B
|Eventuale altro nome=
|Eventuale pseudonimo=
|Eventuale nome reale=
|Giorno e mese di nascita=15 marzo
|Anno di nascita=1738
|Giorno e mese di morte=28 novembre
|Anno di morte=1794
|Secolo di attivita`=
|Professione e nazionalita`=letterato, filosofo, giurista ed economista italiano
}}
==========================
"""
wikipedia.action = "Bot: aggiornamento dei template relativi agli autori"
parametriDaEliminare = [ u"Nome della pagina su Wikipedia",
u"Nome della pagina su Wikiquote",
u"Nome della pagina su Wikinotizie",
u"Nome della pagina su Commons",
u"Nome dell'immagine",
u"Vuoi l'indice dei contenuti?",
u"Abbiamo testi scritti dall'autore?",
u"Abbiamo traduzioni scritte dall'autore?",
u"L'autore è citato in altre opere pubblicate?" ]
def __init__(self):
self.sito = wikipedia.getSite()
def autoreToTemplate(self, paginaAutore):
"""Da una pagina di autore (il cui titolo e` "paginaAutore") restituisce il
testo del template corrispondente.
"""
pagina = wikipedia.Page(self.sito, paginaAutore).get()
templatesText = re.findall("\{\{.*?\n[\s]*\}\}", pagina, re.S)
templAutore = None
for templateText in templatesText:
templ = templateHandler.Template(fromText = templateText)
if templ.name == "Autore":
templAutore = templ
break
if templAutore is None:
raise ValueError("La pagina" + paginaAutore + \
" non ha un template Autore. Non posso usarla!")
# "converto il template
templAutore.name = "Autore per indici"
templAutore.removeByParamName(autoreToTemplate.parametriDaEliminare)
return templAutore
def autoriToTemplates():
"""Crea le pagine "template:nomeAutore".
"""
import sys
argomenti = wikipedia.handleArgs()
sito = wikipedia.getSite()
cat = catlib.Category(sito, "Categoria:Autori in ordine alfabetico")
generatoreAutori = pagegenerators.CategorizedPageGenerator(cat, recurse = True)
print "Sto raccogliendo le informazioni sugli autori..." # TODO eliminare...
bot = autoreToTemplate()
if len(argomenti) == 0:
for autore in generatoreAutori:
if not autore.isRedirectPage():
templateAutore = bot.autoreToTemplate(autore.title()).toText()
pagina = paginaTemplate.replace("*TEMPLATE_AUTORE*", templateAutore)
pagina = pagina.replace("*AUTORE*", autore.titleWithoutNamespace())
wikiPagina = wikipedia.Page(sito, u"template:" + autore.titleWithoutNamespace())
wikiPagina.put(pagina)
else:
operazione = argomenti[0]
autoriDaGenerare = argomenti[1:]
if operazione == "-solo" and len(autoriDaGenerare) >= 1:
for (autore) in autoriDaGenerare:
print "Raccolgo le informazioni su " + autore + " e genero il template"
templateAutore = bot.autoreToTemplate("Autore:"+autore).toText()
pagina = paginaTemplate.replace("*TEMPLATE_AUTORE*", templateAutore)
pagina = pagina.replace("*AUTORE*", autore)
wikiPagina = wikipedia.Page(sito, u"template:" + autore)
wikiPagina.put(pagina)
elif operazione == "-aiuto":
print __doc__
sys.exit(0)
else:
print "Parametri non validi.\n\nIstruzioni:\n" + __doc__
sys.exit(1)
def main():
autoriToTemplates()
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/TemplateAutori.py/doc. (modifica | cronologia)
Descrizione
modificaCrea/Aggiorna i template contententi i dati utili per ogni autore. Questi template vengo inseriti automaticamente negli elenchi automatici generati dal programma ListeAutori.py. In questo modo è possibile inserire nelle pagine di servizio i dati più importanti degli autori e non solo, come accade nelle categorie, il loro nome e cognome.
Richiede templateHandler.py
Quando usarlo
modificaIl programma viene lanciato ogni notte in modo automatico.
Può essere lanciato all'occorrenza quando si ha la certezza che sono stati aggiunti/rimossi degli autori.
Nome del file
modificaTemplateAutori.py
Comando
modifica- python TemplateAutori.py
- Crea/aggiorna il template di ogni autore
- python TemplateAutori.py -solo "NOME COGNOME AUTORE"
- Crea/aggiorna il template di un determinato autore
Esempi
modifica- python TemplateAutori.py -solo "Dante Alighieri"
- Crea/aggiorna il template di Dante Alighieri
- python TemplateAutori.py -solo "Dante Alighieri" "Cecco Angiolieri"
- Crea/aggiorna il template di Dante Alighieri e di Cecco Angiolieri