Progetto:Bot/Programmi in Python per i bot/Infotesto.py
# -*- coding: utf-8 -*-
"""
Crea le pagine discussione delle sottopagine di un opera,
includendo come un template la pagina discussione della
pagina principale dell'opera.
Parametri da passare allo script:
-titolo:XX - con XX che e` il nome pagina principale dell'opera.
-inizio:YY: - con YY che e` il nome pagina da cui deve iniziare,
cioe` non crea le pagine che sarebbero create prima di YY
Esempio:
python Infotesto.py "-titolo:Amori (Marino)"
python Infotesto.py "-titolo:Amori (Marino)" "-inizio:Discussione:33 - Giuoco di dadi"
Note:
Lo script è ricorsivo, può dunque inserire lo stesso infotesto anche nelle varie sottopagine di un opera.
E' richiesto lo script templateHandler.py per poter funzionare.
"""
import pagegenerators
import templateHandler
import wikipedia
import re
class Infotesto:
"""Si occupa di includere i template infotesto pag discussione delle sottopagine.
"""
NS_DISCUSS = "Discussione:"
wikipedia.action = "Bot: includo la pagina con infotesto"
def __init__(self, paginaPrincipale, startPage=None):
"""
Argomenti:
* paginaPrincipale - la pagina principale dell'opera
* startPage - se specificata, ignora tutte le pagine che dovrebbe
creare prima di startPage.
"""
self.pagPrincipale = paginaPrincipale
if self.pagPrincipale.startswith("Indice:"):
lPrefix = len("Indice:")
self.daInserire = "{{Discussioni indice:%s}}" % paginaPrincipale[lPrefix:]
self.nsDiscussione = "Discussioni pagina:"
self.nsSottoPagAtteso = 108
else:
self.daInserire = "{{Discussione:%s}}" % paginaPrincipale
self.nsDiscussione = "Discussione:"
self.nsSottoPagAtteso = 0
self.startPage = startPage
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:
self.aggiungiTemplate(sottoPagina)
### considera come link da seguire anche il primo parametro del template Testo.
for template in templateHandler.templatesFromPage(pagina.get()):
if re.match("[tT]esto", template.name):
sottoPagina = wikipedia.Page(sito, template[0])
self.aggiungiTemplate(sottoPagina)
def aggiungiTemplate(self, sottoPagina):
### scorri i link che contiene e controlla che siano "sottopagine normali"
titolo = sottoPagina.sectionFreeTitle()
titoloSenzaNs = titolo[len("Pagina:"):] if titolo.startswith("Pagina:") else titolo
titoloDiscussione = self.nsDiscussione + titoloSenzaNs
# finchè c'è una startPage, ignora la pagina corrente.
if self.startPage == titoloDiscussione:
self.startPage = None
if self.startPage is not None:
return
if sottoPagina.namespace() != self.nsSottoPagAtteso:
print u"\"%s\" non si trova nel namespace principale. La salto" % titolo
return
if not self.pagPrincipale.startswith("Indice:") and not titolo.startswith(self.pagPrincipale + "/"):
print u"\"%s\" non è sottopagina di %s. La salto" % (titolo, self.pagPrincipale)
return
if self.pagPrincipale.startswith("Indice:") and not titolo.startswith("Pagina:"):
print u"\"%s\" non è sottopagina di %s. La salto" % (titolo, self.pagPrincipale)
return
if sottoPagina.isCategory():
print u"\"%s\" è una categoria. La salto." % titolo
return
if sottoPagina.isImage():
print u"\"%s\" è un immagine. La salto." % titolo
return
if not sottoPagina.exists():
print u"\"%s\" non esiste. La salto." % titolo
return
### inserisco nella sottopagina discussione il "template"
pagDiscussione = wikipedia.Page(wikipedia.getSite(), titoloDiscussione)
if not pagDiscussione.exists():
print u"\nscrivo: \"", self.daInserire, "\" in: ", titoloDiscussione , '"'
pagDiscussione.put(self.daInserire)
sottoBot = Infotesto(titolo)
sottoBot.run()
def main():
### gestisci gli argomenti
titolo = ""
inizio = None
for arg in wikipedia.handleArgs():
if arg.startswith("-titolo:"):
titolo = arg[len("-titolo:"):]
if arg.startswith("-inizio:"):
inizio = arg[len("-inizio:"):]
if titolo == "":
print "Parametri non validi.\n\n\n**** ISTRUZIONI ***\n"
print __doc__
return
### usa la classe che gestisce questo bot
bot = Infotesto(titolo, inizio)
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/Infotesto.py/doc. (modifica | cronologia)
Descrizione[modifica]
Crea le pagine discussione delle sottopagine di un opera, includendo come un template la pagina discussione della pagina principale dell'opera. Lo script è ricorsivo, può dunque inserire lo stesso infotesto anche nelle varie sottopagine di un opera.
Per funzionare è necessario avere anche lo script templateHandler.py (aggiornato all'ultima versione pubbilcata).
Quando usarlo[modifica]
Quando un testo ha delle sottopagine e bisogna segnalare la fonte usata per ogni sottopagina.
Nome del file[modifica]
Infotesto.py
Comando[modifica]
- python Infotesto.py -titolo:XX
- con XX che è il nome pagina principale dell'opera.
- python Infotesto.py -inizio:YY
- con YY che è il nome della pagina discussione da cui iniziare.
Esempi[modifica]
- python Infotesto.py "-titolo:Amori (Marino)"
- Crea le pagine discussione delle sottopagine di Amori (Marino) inserendo il template infotesto dell'opera.
- python Infotesto.py "-titolo:Amori (Marino)" "-inizio:Discussione:33 - Giuoco di dadi"
- È come il comando precedente, ma inizia a crearle a partire da Discussione:33 - Giuoco di dadi.