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


Descrizione modifica

Crea/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 modifica

Il 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 modifica

TemplateAutori.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

Autore modifica

Qualc1, iPork