Utente:Qualc1/BotScripts/scheletroPagina.py

Descrizione del programma

modifica
Nome del programma scheletroPagina.py
Autore Qualc1
Descrizione

Dopo aver letto la pagina Indice: specificata, inserisce in tutte le sue sottopagine Pagina: uno "scheletro" della pagina,
cioè i tag per la corretta formattazione, il template per il sal e la richiesta di trascrizione del testo a destra.

Come si usa
Dove si trova Utente:Qualc1/BotScripts/scheletroPagina.py


Codice del programma

modifica
# -*- coding: utf-8 -*-

"""
Inserisce un "contenuto scheletro" nelle "pagine Pagina:" di un opera.

Parametri da passare allo script:

-titolo:XX    - con XX che è il nome "pagina Indice:" dell'opera.

Esempio:
	python scheletroPagina "-titolo:Indice:Il Volapük: Critici e Abolitori"
	Effetto: viene inserito lo "scheletro" in tutte le "pagine Pagina:" contenute nell'indice.
"""

#TODO: sarebbe bene poter passare al bot anche un altro che specifica se
#	volere inserire sempre/mai nella sezione footer i codici per le note ???

import pagegenerators
import wikipedia

class ScheletroPagina:
	"""Si occupa di creare le "pagine Pagina:" di un opera rimpiendole con uno scheletro.
	
	L'unico parametro di cui necessita è la "pagina Indice:" di un opera.
	"""

	header = u"""<div class="pagetext">"""
	body = u"""{{Qualità pagina|25%}}<!-- INSERISCI DOPO QUESTA FRASE IL TESTO CHE VEDI A DESTRA -->"""
	footer = u"""<br /><br />
----
<br /><references/>"""

	wikipedia.action = u'Bot: creo lo scheletro della "(sotto)Pagina:"'

	def __init__(self, paginaPrincipale):
		"""
		Argomenti:
		* paginaPrincipale - la pagina principale dell'opera
		"""
		self.pagPrincipale = paginaPrincipale
		self.chiedi = True
	
	def run(self):
		"""
		Fa quel che deve.
		"""

		### ottieni pagina principale e le pagine a cui puntano i link che contiene.
		sito = wikipedia.getSite()
		pagina = wikipedia.Page(sito, self.pagPrincipale)
		generatoreSottoPag = pagegenerators.LinkedPageGenerator(pagina)

		for sottoPagina in generatoreSottoPag:
			### scorri i link contenuti e controlla che siano "sottopagine Pagina:" e vuote.
			titolo = sottoPagina.sectionFreeTitle()
			if not titolo.startswith("Pagina:"):
				print u"\"%s\" non è sottopagina \"Pagina:\". La salto" % titolo
				continue
			if sottoPagina.isCategory():
				print u"\"%s\" è una categoria. La salto." % titolo
				continue
			if sottoPagina.exists():
				print u"\"%s\" è già esistente. La salto." %  titolo
				continue

			### Costruisco il testo da inserire (varia a seconda che ci siano le note nel footer)
			if self.chiedi:
				conFooter = wikipedia.inputChoice("\"%s\" contiene note?" % titolo, ["Si", "No"], ["s", "n"], "S")
				conFooter = True if conFooter in ["S", "s"] else False
			daInserire = u"<noinclude>" + self.header + u"</noinclude>" + self.body
			if conFooter:
				daInserire = daInserire + u"<noinclude>" + self.footer + u"</noinclude>"
			
			### inserisco nella "sottopagina Pagina:" lo scheletro.
			print "\nscrivo \":", daInserire, "\" in: ", titolo
			sottoPagina.put(daInserire)

def main():
	### gestisci gli argomenti
	titolo = ""
	for arg in wikipedia.handleArgs():
		if arg.startswith("-titolo:"):
			titolo = arg[len("-titolo:"):]
	if titolo == "":
		print u"Parametri non validi.\n\n\n**** ISTRUZIONI ***\n"
		print __doc__
		return

	### usa la classe che gestisce questo bot
	bot = ScheletroPagina(titolo)
	bot.run()
	
if __name__  == "__main__":
	try:
		main()
	except:
		wikipedia.stopme()
		raise
	else:
		wikipedia.stopme()