Template:Bollettino/Script
Wikibooks, manuali e libri di testo liberi.
Questo è lo script usato per creare i bollettini
Indice |
[modifica] Parametri
[modifica] -file:xxx
Il 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.
[modifica] -wiki:xxx
Il 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.
[modifica] bollettino.py v. 1.16.1
-
# -*- 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]]")