Vai al contenuto

Template:Bollettino/Script

Wikibooks, manuali e libri di testo liberi.

Questo è lo script usato per creare i bollettini

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.

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.

bollettino.py v. 1.16.1

[modifica sorgente]
# -*- 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]]")