Template:Bollettino/Script
Questo è lo script usato per creare i bollettini
Parametri
modifica-file:xxx
modificaIl parametro file indica al bot di cercare sul disco rigido locale un file di testo che elenchi i libri dei quali fare i bollettini.
Esempio: bollettino.py -file:c:/testo_bollettini.txt testo bollettini.txt: Magic C ecc.
Lo script sostituisce gli _ con spazi.
-wiki:xxx
modificaIl parametro wiki indica al bot di cercare su una pagina di wikibooks l'elenco dei libri ai quali creare i bollettini.
Esempio: bollettino.py -wiki:Utente:G4/Bollettini testo Utente:G4/Bollettini: # [[Magic]] # [[Javascript]] # [[CSS]] ecc.
bollettino.py v. 1.16.1
modifica# -*- coding: utf-8 -*-
"""
#############################################
# #
# Distributed under the terms of the GFDL #
# Created by [[it:b:User:G4]] #
# #
#############################################
"""
import wikipedia, pagegenerators, re
from catlib import Category
from datetime import datetime
def inizio():
#Esamina le opzioni e valuta che fare
nodisco = True
nowiki = True
pag = ""
global versione
versione = u"1.16.1"
global tem
tem = True
for argomento in wikipedia.handleArgs():
if argomento.startswith("-file:"):
nodisco = False
file = re.sub("_", " ", str(argomento[6:]))
if argomento.startswith("-wiki:"):
nowiki = False
pag = re.sub("_", " ", str(argomento[6:]))
if argomento == "-file":
nodisco = False
file = input("Inserisci il percorso del file: ")
file = re.sub("_", " ", file)
if argomento == "-wiki":
nowiki = False
pag = input("Inserisci il nome della pagina: ")
pag = re.sub("_", " ", pag)
if (nodisco) and (nowiki):
libro = raw_input('Inserisci il nome del libro: ')
if libro == "NoNo":
tem = False
elif libro !="No":
libro = re.sub("_", " ", libro)
variabili()
speciali()
scrivi(unicode(libro, 'utf-8'))
elif (nodisco) and not (nowiki):
variabili()
speciali()
sito = wikipedia.getSite(code='it',fam='wikibooks')
Pagina = wikipedia.Page(sito, pag)
testo = Pagina.get()
cerca = re.compile("# \[?\[?.*]?]?")
cerca = cerca.search(testo)
if cerca != None:
cerca2 = re.compile("# \[?\[?.*]?]?")
cerca2 = cerca2.findall(testo)
for g in cerca2:
g = re.sub("# |\[\[|]]", "", g)
g = re.sub("_", " ", g)
scrivi(str(g))
elif (nowiki) and not (nodisco):
variabili()
speciali()
f = open(file, 'r')
for linea in f.readlines():
libro = re.sub("\n", "", linea)
libro = re.sub("_", " ", libro)
scrivi(unicode(libro, 'utf-8'))
f.close()
if (tem):
bollettini()
senza()
def scrivi(libro):
# Crea e scrive il bollettino
sito = wikipedia.getSite(code='it',fam='wikibooks')
procedo = True
pagLibro = wikipedia.Page(sito, libro)
try:
pagLibro.get()
except wikipedia.IsRedirectPage:
procedo = False
wikipedia.output("\n" + pagLibro.title() + "e' un redirect.\n")
except wikipedia.NoPage:
procedo = False
Bollettino = wikipedia.Page(sito, libro + "/Sviluppo")
log = wikipedia.Page(sito, "Progetto:Coordinamento/Bollettini/Log")
testo = "{{Bollettino\n"
testo = testo + "|Autore=~~~\n"
testo = testo + "|Data={{subst:LOCALTIME}} - {{subst:CURRENTDAY}} {{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}\n"
testo = testo + "|Libro=" + libro + "\n"
testo2 = ""
categorie = [ "Moduli stub", "Moduli 25%", "Moduli 50%", "Moduli 75%", "Moduli 100%", "Da wikificare", "Da controllare", "Da aiutare", "Da controllare per copyright", "Da tradurre", "Segnalazioni NPOV", "Da cancellare"]
categorie2 = [ "00%", "25%", "50%", "75%", "100%", "Wik", "Control", "Aiutare", "Controlcopy", "Tradurre", "NPOV", "Canc" ]
categorie3 = categorie2 + [ "Orfane", "NoCat", "Red" ]
if (procedo):
Blocco = set(pagegenerators.PrefixingPageGenerator(libro + "/"))
Blocco.add(wikipedia.Page(sito, libro))
for numero in range(0, len(categorie)):
cat = Category(sito, "Categoria:" + categorie[numero])
Blocco2 = set(pagegenerators.CategorizedPageGenerator(cat))
testo2 = testo2 + "\n\n==[[:Categoria:" + str(categorie[numero]) + "|" + str(categorie[numero]) + "]]==\n"
conta = 0
for page in Blocco.intersection(Blocco2):
conta = conta + 1
if page.title() == Bollettino.title():
continue
else:
testo2 = testo2 + "# [[" + page.title() + "]]\n"
if str(categorie[numero]) == "Moduli 100%":
if Bollettino.exists():
testo = testo + "|" + categorie2[numero] + "=" + str(conta - 1) + "\n"
else:
testo = testo + "|" + categorie2[numero] + "=" + str(conta) + "\n"
else:
testo = testo + "|" + categorie2[numero] + "=" + str(conta) + "\n"
utile = wikipedia.Page(sito, "Progetto:Coordinamento/Bollettini/PagineOrfane")
Blocco2 = set(pagegenerators.LinkedPageGenerator(utile))
conta = 0
testo2 = testo2 + "\n\n==[[Progetto:Coordinamento/Bollettini/PagineOrfane|Orfane]]==\n"
for page in Blocco.intersection(Blocco2):
conta = conta + 1
if page.title == Bollettino.title:
continue
else:
testo2 = testo2 + "# [[" + page.title() + "]]\n"
testo = testo + "|Orfane=" + str(conta) + "\n"
wikipedia.output("Aggiunte le orfane")
utile = wikipedia.Page(sito, "Progetto:Coordinamento/Bollettini/NonCategorizzate")
Blocco2 = set(pagegenerators.LinkedPageGenerator(utile))
conta = 0
testo2 = testo2 + "\n\n==[[Progetto:Coordinamento/Bollettini/NonCategorizzate|Non categorizzate]]==\n"
for page in Blocco.intersection(Blocco2):
conta = conta + 1
if page.title == Bollettino.title:
continue
else:
testo2 = testo2 + "# [[" + page.title() + "]]\n"
testo = testo + "|NoCat=" + str(conta) + "\n"
wikipedia.output("Aggiunte le non categorizzate")
conta = 0
testo2 = testo2 + "\n\n==Redirect==\n"
for pa in Blocco:
if pa.isRedirectPage():
titolo = re.sub(" ", "%20", pa.title())
conta = conta + 1
testo2 = testo2 + "# [http://it.wikibooks.org/w/index.php?title=" + titolo + "&redirect=no " + pa.title() + "]\n"
testo = testo + "|Red=" + str(conta) + "\n"
wikipedia.output("Aggiunti i redirect")
if Bollettino.exists():
for numero2 in range(0, len(categorie3)):
stringa = "\|" + categorie3[numero2] + "=.+"
tes = re.search(stringa, Bollettino.get())
tes2 = re.sub("\|" + categorie3[numero2] + "=", "", tes.group())
nuprec = int(str(tes2))
tes = re.search(stringa, testo)
tes2 = re.sub("\|" + categorie3[numero2] + "=", "", tes.group())
numor = int(str(tes2))
if nuprec > numor:
diff = nuprec - numor
testo = testo + "|%" + categorie3[numero2] + "=-\n|d" + categorie3[numero2] + "=" + str(diff) + "\n"
elif nuprec < numor:
diff = numor - nuprec
testo = testo + "|%" + categorie3[numero2] + "=+\n|d" + categorie3[numero2] + "=" + str(diff) + "\n"
else:
testo = testo + "|%" + categorie3[numero2] + "=0\n|d" + categorie3[numero2] + "=0\n"
else:
for numero2 in range(0, len(categorie3)):
testo = testo + "|%" + categorie3[numero2] + "=0\n|d" + categorie3[numero2] + "=0\n"
if Bollettino.exists():
conta = -2
else:
conta = -1
for a in range(0, len(Blocco)):
conta = conta + 1
if conta == -1 or conta == -2:
conta = 0
testo = testo + "|Moduli=" + str(conta) + "\n"
categorie = [ "Libri stub", "Libri 25%", "Libri 50%", "Libri 75%", "Libri 100%"]
for g in categorie:
cat = Category(sito, "Categoria:" + g)
Blocco2 = set(pagegenerators.CategorizedPageGenerator(cat))
h = re.sub("Libri |%", "", g)
if h == "stub":
h = "00"
if pagLibro in Blocco2:
testo = testo + "|CaLib=" + h + "\n"
cat = Category(sito, "Categoria:Libri in vetrina")
Blocco2 = set(pagegenerators.CategorizedPageGenerator(cat))
if pagLibro in Blocco2:
testo = testo + "|Vet=Si\n"
global versione
testo = testo + "|Versione=" + versione + "\n}}\n\n"
testo3 = "\n{{Avanzamento|100%}}"
testo = testo + testo2 + testo3
if Bollettino.exists():
Bollettino.put(testo, "[[Wikibooks:Bot|Bot]]: aggiorno bollettino")
else:
Bollettino.put(testo, "[[Wikibooks:Bot|Bot]]: creo bollettino")
testo = log.get()
testo = testo + "\n#[[" + libro + "]] ([[" + libro + "/Sviluppo|bollettino]]) - {{subst:LOCALTIME}} - {{subst:CURRENTDAY}} {{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}} - ~~~"
log.put(testo, "[[Wikibooks:Bot|Bot]]: aggiorno il log")
def bollettini():
# Aggiorna il numero dei bollettini se è vecchio
if vecchio("Template:NUMBEROFBOLLETTINI"):
sito = wikipedia.getSite(code='it',fam='wikibooks')
template = wikipedia.Page(sito, "Template:NUMBEROFBOLLETTINI")
global tutte
pagine = tutte
conta = 0
for y in pagine:
if y.title().endswith("/Sviluppo"):
conta += 1
template.put(str(conta), "[[Wikibooks:Bot|Bot]]: aggiorno numero di [[Aiuto:Bollettino|bollettini]]")
def senza():
# Aggiorna la lista di libri senza bollettino se cono vecchie
if vecchio("Progetto:Coordinamento/Bollettini/Senza"):
sito = wikipedia.getSite(code='it',fam='wikibooks')
global tutte
libr = tutte
pagSen = wikipedia.Page(sito, "Progetto:Coordinamento/Bollettini/Senza")
global libri
sen = set()
for u in libri:
pa = wikipedia.Page(sito, u.title() + "/Sviluppo")
if not pa in tutte:
if u.isRedirectPage() == False:
sen.add(u)
testo = ""
for i in sen:
testo = testo + "# [[" + i.title() + "]] ([[" + i.title() + "/Sviluppo|bollettino]])\n"
pagSen.put(testo, "[[Wikibooks:Bot|Bot]]: aggiorno il log dei bollettini non creati")
def speciali():
# Aggiorna le pagine utili se sono vecchie
if vecchio("Progetto:Coordinamento/Bollettini/PagineOrfane"):
sito = wikipedia.getSite(code='it',fam='wikibooks')
orfane = wikipedia.Page(sito, "Progetto:Coordinamento/Bollettini/PagineOrfane")
noncat = wikipedia.Page(sito, "Progetto:Coordinamento/Bollettini/NonCategorizzate")
testo = ""
for pa in sito.lonelypages(number = 10000, repeat = False):
testo = testo + "[[" + pa.title() + "]]\n"
orfane.put(testo, "[[Wikibooks:Bot|Bot]]: aggiorno pagina utile")
testo = ""
for pa in sito.uncategorizedpages(number = 10000, repeat = False):
testo = testo + "[[" + pa.title() + "]]\n"
noncat.put(testo, "[[Wikibooks:Bot|Bot]]: aggiorno pagina utile")
def vecchio(nomePag):
# Controlla se la pagina non è stata modificata da un giorno.
# Se sì restituisce True, altrimenti False
sito = wikipedia.getSite(code='it',fam='wikibooks')
pagina = wikipedia.Page(sito,nomePag)
cronologia = pagina.getVersionHistory()[0][0]
cronologia = re.sub("T.+Z", "", cronologia)
frt = ""
cosa = str(datetime.today().year)
frt = frt + cosa
cosa = str(datetime.today().month)
if len(cosa) == 1:
cosa = "0" + cosa
frt = frt + "-" + cosa
cosa = str(datetime.today().day)
if len(cosa) == 1:
cosa = "0" + cosa
frt = frt + "-" + cosa
if cronologia != frt:
return True
else:
return False
def variabili():
# setta le variabili principali e globali
global tutte
tutte = set(pagegenerators.AllpagesPageGenerator(namespace = 0))
global libri
libri = set()
for j in tutte:
f = re.search("/|\\|:|Pagina principale", j.title())
if f == None:
libri.add(j)
if __name__ == "__main__":
try:
inizio()
finally:
wikipedia.stopme()
wikipedia.output("\n Distributed under the terms of the GFDL\n Created by [[it:b:User:G4]]")