Utente:Qualc1/BotScripts/autoreToTemplate.py
Nome del programma | autoreToTemplate.py |
Autore | Qualc1 |
Descrizione |
|
Come si usa |
Da avviare semplicemente con "python autoreToTemplate.py" senza nessuna opzione. |
Dove si trova | Utente:Qualc1/BotScripts/autoreToTemplate.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 autoreToTemplate.py
Crea/aggiorna il template di ogni autore
python autoreToTemplate.py -solo "Dante Alighieri"
Crea/aggionra il template di Dante Alighieri
python autoreToTemplate.py -solo "Dante Alighieri" "Cecco Angiolieri"
Crea/aggionra 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("{{.*?}}", 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 = sys.argv[1:]
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()