Utente:G4/Script

Wikibooks, manuali e libri di testo liberi.
(Reindirizzamento da Utente:G4/Python)

Carte di Magic[modifica]

inseriscicarte.py v. 1.50 BETA[modifica]

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#
#Created by [[it:b:User:Gianlu4]]
#
 
import re, wikipedia, codecs, _mysql
 
def main():
        args = wikipedia.handleArgs()
        serialBegin = 1 # Da dove deve cominciare? default=1
        all = False
        for currentArgument in args:
                if currentArgument.startswith("-start:"):
                        serialBegin = int(currentArgument[7:]) 
                        # Se l'utente dice da dove deve cominciare, lo memorizza
                if currentArgument.startswith("-always"):
                        all = True
 
        #page = wikipedia.Page(wikipedia.getSite(), "Utente:Gianlu4Bot/Sandbox") # Solo per test
        db = _mysql.connect(host='localhost', user='MagicBot', passwd='**********', db='magic_cards_2003')
        db.query("SELECT COUNT(Numero) FROM magic_cards") # Conta le carte
        num = int(db.store_result().fetch_row(how=1)[0]['COUNT(Numero)']) + 1
        templateFile = codecs.open("modellocarta.txt", "r", "utf-8")
        modellovoce = templateFile.read() # Legge il modello della voce
        templateFile.close()
 
        for i in range(serialBegin, num):
                # Ottiene tutte le info sulla carta corrente
                db.query("SELECT * FROM magic_cards WHERE Numero LIKE " + str(i))
                dict = db.store_result().fetch_row(how=1)[0]
 
                page = wikipedia.Page(wikipedia.getSite(), "Magic/Carte/" + str(dict['Set'])) 
                # Ottiene la pagina da modificare
                wikipedia.output(">>>>> " + page.title() + " - Record " + str(i) + " <<<<<")
                if(page.exists()):
                        oldtxt = page.get()
                else:
                        oldtxt = ''

                elencoSostituzioni = [ "Nome_Carta", "English", "Costo", "Tipo", "F_C", "Rarita", "Set", "Testo" ]


                # Dato un testo ed un dizionario di sostituzioni
                # usa le regex per il "find and replace"
                for k in elencoSostituzioni:
                        modellovoce = re.sub(k, dict[k], modellovoce)
 
                # Sostituzioni HTML->wikimarkup
                modellovoce = re.sub("< */? *(em|EM) *>", "''", modellovoce)
        
                newtxt = modellovoce

                wikipedia.showDiff(oldtxt, newtxt)
                if (not all):
                        # Chiede la conferma prima di 
                        # editare (se non è in modalità automatica)
                        choice = wikipedia.inputChoice(u"Aggiungo questa carta?",  ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
                else:
                        choice = 'y'
                if choice in ['A', 'a']:
                        all = True
                        choice = 'y'
                if choice in ['Y', 'y']:
                        wikipedia.setAction(u'[[Wikibooks:Bot|Bot]]: Aggiunta carta: ' + dict['Nome_Carta'])
                        page.put(oldtxt + "\n" + newtxt)     
 
 
if __name__ == "__main__":
        try:
                main()
        finally:
                wikipedia.stopme()

modellocarta.txt[modifica]

{{Carta Magic
|italiano=Nome_Carta
|inglese=English
|costo=Costo
|tipo=Tipo
|rar=Rarita
|forzacosti=F_C
|espan=Set
|testo=Testo
}}

Inserire testi[modifica]

Per un corretto funzionamento c'è bisogno di un file sul Disco Rigido (C:) chiamato testo.txt e con codifica ANSI che sia strutturato secondo il seguente codice:

NOME_DELLA_PAGINA<<TESTO DA INSERIRE

Un elemento per riga.

Versione 2[modifica]

Con la versione 2 viene liberalizzato il percorso del file. Da questa versione:

-cartella indica il percorso (ad esempio c:/)
-file indica il nome del file (ad esempio testo.txt)

Quindi un esempio è:
inseriscitesto.py -cartella:c:/ -file:testo.txt

inseriscitesto.py v. 3.50 BETA[modifica]

import string
import wikipedia

def main():
    crlf = "\n"
    all = False
    cart = "c:/"
    file = "testo.txt"
    args = wikipedia.handleArgs()
    for currentArgument in args:
        if currentArgument.startswith("-cartella:"):
            cart = currentArgument[10:] 
            # Se l'utente dice da dove deve cominciare, lo memorizza
        if currentArgument.startswith("-file:"):       
            file = currentArgument[6:] 
            # Se l'utente dice da dove deve cominciare, lo memorizza
        if currentArgument.startswith("-always"):
            all = True
    nomefile = cart + file
    f = open(nomefile, 'r')
    for line in f.readlines():
        w = line.split('<<')
        i = len(w)
        if i > 1 :
            sito=wikipedia.getSite(code='it',fam='wikibooks')
            pl = wikipedia.Page(sito, w[0])
            testo_originale = pl.get()
            
            testo_nuovo = testo_originale + crlf + w[1]
            
            if (not all):
                # Chiede la conferma prima di 
                # editare (se non è in modalità automatica)
                wikipedia.output(">>>>>" + pl.title() + "<<<<<\n\n")
                wikipedia.showDiff(testo_originale, testo_nuovo)
                choice = wikipedia.inputChoice(u"Aggiungo questo testo?",  ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
            else:
                choice = 'y'
            if choice in ['A', 'a']:
                all = True
                choice = 'y'
            if choice in ['Y', 'y']:
                pl.put(testo_nuovo,'[[Wikibooks:Bot|Bot]]: Aggiungo: "' + w[1] + '"')   
    f.close()
    
if __name__ == "__main__":
    try:
        main()
    except:
        wikipedia.stopme()
        raise
    else:
        wikipedia.stopme()

Avanzamento[modifica]

Versione evoluta di inseriscitesto.py.

Avanzamento.py v. 1.10[modifica]

import string
import wikipedia
import re
 
def main():
    crlf = "\n{{Avanzamento|"
    crd = "%}}"
    all = False
    cart = "c:/"
    file = "testo.txt"
    argomenti = wikipedia.handleArgs()
    for corrente in argomenti:
        if corrente.startswith("-cartella:"):
            cart = currentArgument[10:]
        if corrente.startswith("-file:"):       
            file = currentArgument[6:]
        if corrente.startswith("-always"):
            all = True
    nomefile = cart + file
    fonte = open(nomefile, 'r')
    for line in fonte.readlines():
        testo = line.split('<<')
        i = len(testo)
        if i > 1 :
            sito=wikipedia.getSite(code='it',fam='wikibooks')
            pl = wikipedia.Page(sito, testo[0])
            testo_originale = pl.get()
            
            testo[1] = re.sub("\n", "", testo[1])
            testo_nuovo = testo_originale + crlf + testo[1] + crd
           
            if (not all):
                wikipedia.output(">>>>>" + pl.title() + "<<<<<\n")
                wikipedia.output("Si sta tentando di categorizzare\n   la pagina come " + testo[1] + "%\n")
                choice = wikipedia.inputChoice(u"Categorizzo?",  ['Si', 'No', 'Tutti'], ['S', 'N', 'T'], 'N')
            else:
                choice = 'S'
            if choice in ['T', 't']:
                all = True
                choice = 'S'
            if choice in ['S', 's']:
                pl.put(testo_nuovo,'[[Wikibooks:Bot|Bot]]: Categorizzo: "' + testo[1] + '%"')   
    fonte.close()
   
if __name__ == "__main__":
    try:
        main()
    except:
        wikipedia.stopme()
        raise
    else:
        wikipedia.stopme()

Statistiche moduli[modifica]

Qusto è lo script utilizzato per aggiornare la tabella del lavoro sporco.

Parametri[modifica]

-pagina:xxx[modifica]

Il parametro pagina indica su quale pagina il bot deve lavorare ed inserire i dati.

Esempio:

moduli.py -pagina:Utente:Gianlu4/Statistiche_manutenzioni

Nel fornire il nome della pagina gli spazi sono inutilizzabili (da sostituire con _ ).

-noVer[modifica]

Il parametro noVer indica al bot di non controllare la versione dello script.

Esempio:

moduli.py -noVer

-noPag[modifica]

Il parametro noPag indica al bot di controllare doltanto la versione di moduli.py.

Esempio:

moduli.py -noPag

-visuale[modifica]

Il parametro visuale indica al bot di restituire i risultati in locale e non aggiornando il template su wikibooks.

Esempio:

moduli.py -visuale

-msg:xxx[modifica]

Il parametro msg indica al bot quale messaggio personalizzato fare apparire dopo il collegamento alla pagina dei Bot.

Esempio:

moduli.py -msg:conto_lavoro_sporco

Lo script sostituisce automaticamente _ con uno spazio.

-aiuto[modifica]

Il parametro aiuto indica al bot di stampare a video una guida rapida all'utilizzo dello script.

Esempio:

moduli.py -aiuto

==moduli.py v. 8.82 ==

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

"""

#############################################
#                                           #
#  Distributed under the terms of the GFDL  #
#        Created by [[it:b:User:G4]]        #
#                                           #
#############################################
 
Description:
   This script is used for updating [[it:b:Template:Statistiche manutenzioni]]
   it counts the number of pages in each category of "Lavoro sporco"
   and puts them in the template

"""
 
import wikipedia, re
from catlib import Category
 
def main():
        aiuto = False
        msg = "conto lavoro sporco"
        global controllo
        controllo = True
        global pagine 
        pagine = True
        visuale = False
        global categorie
        categorie = [ u"Moduli 0%", u"Categoria da definire", u"Da controllare", u"Da controllare per copyright", u"Segnalazioni NPOV", u"Da aiutare", u"Da tradurre", u"Da unire", u"Da wikificare", u"Moduli 25%", u"Moduli 50%", u"Moduli 75%", u"Moduli 100%", u"Libri 0%",  u"Libri 25%",  u"Libri 50%",  u"Libri 75%",  u"Libri 100%"]
        for argomento in wikipedia.handleArgs():
                if argomento.startswith("-pagina:"):
                        pagina = wikipedia.Page(sito, argomento[8:])
                if argomento.startswith("-noVer"):
                        controllo = False
                if argomento.startswith("-noPag"):
                        pagine = False
                if argomento.startswith("-visuale"):
                        visuale = True
                        pagine = False
                if argomento.startswith("-msg:"):
                        msg = re.sub("_", " ", str(argomento[5:]))
                if argomento.startswith("-aiuto"):
                        aiuto = True
        if (aiuto):
                help()
        if (controllo):
                aggiornamenti()
        if (pagine):
                statistiche(msg)
        if (visuale):
                vedi()

def help():
        wikipedia.output("\n HAI CHIESTO AIUTO\n\n")
        wikipedia.output("Questo script (creato da G4) conta le pagine di alcune categorie\n")
        wikipedia.output("di lavoro sporco e, grazie ad un apposito template, aggiorna le\n")
        wikipedia.output("statistiche relative\n\n")
        wikipedia.output("Lo script supporta i parametri:\n\n")
        wikipedia.output(" -aiuto (che stai utilizzando adesso)\n")
        wikipedia.output(" -noPag che comanda al bot di controllare soltanto la versione\n")
        wikipedia.output(" -noVer che comanda al bot di non controllare la versione\n")
        wikipedia.output(" -pagina: che comanda al bot di mettere il template in una pagina diversa\n")
        wikipedia.output(" -visuale che comanda al bot di stampare a video i risultati del conteggio\n")
        wikipedia.output(" -msg: che comanda al bot di dare un messaggio diverso dal solito (che deve")
        wikipedia.output("       essere messo dopo il nome del parametro. Il bot sostituirà")
        wikipedia.output("       automaticamente gli _ con spazi.\n")
        wikipedia.output("Grazie per aver usato l'aiuto di moduli.py\n")
        global pagine
        pagine = False
        global controllo
        controllo = False

def aggiornamenti():
        versione = u'8.82'
        sito = wikipedia.getSite(code='it',fam='wikibooks')
        pagVer = wikipedia.Page(sito, "Template:Statistiche manutenzioni/Script/Versione")
        ver = u'' + pagVer.get()
        if ver <= versione:
                wikipedia.output("\nNon sono state rilasciate nuove versioni di moduli.py (si sta usando la " + ver +")\n")
        else:
                wikipedia.output("\nE' USCITA UNA NUOVA VERSIONE DI MODULI.PY (la " + ver + ")\n")
                global pagine
                pagine = False
 
def statistiche(messaggio):
        sito = wikipedia.getSite(code='it',fam='wikibooks')
        global categorie
        pagina = wikipedia.Page(sito, u'Template:Statistiche manutenzioni')
        nuovo = u"{{Statistiche manutenzioni/Tabella\n"
        nuovo = nuovo + u"|Data={{subst:CURRENTDAY}} {{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}} {{subst:LOCALTIME}}\n"
        for k in categorie:
                corrente = Category(sito, 'Categoria:' + k)
                if k == u"Da controllare":
                    catCount = len(corrente.articlesList(recurse=False))
                else:
                    catCount = len(corrente.articlesList(recurse=True))
                k = re.sub("Moduli ", "", k)
                k = re.sub("Libri ", "L", k)
                nuovo = nuovo + "|" + k + "=" + str(catCount) + "\n"
        nuovo = speciali(nuovo, sito, "Orfane", "|Orfane=")
        nuovo = speciali(nuovo, sito, "Categorizzare", "|NoCat=")
        nuovo = speciali(nuovo, sito, "NoInterwiki", "|NoInterwiki=")
        nuovo = nuovo + "}}"
        nuovo = nuovo + u"\n<noinclude>[[Categoria:Coordinamento| ]]</noinclude>"
        pagina.put(nuovo, "[[Wikibooks:Bot|Bot]]: " + messaggio)
 
def speciali(vecchio, sito, cosa, stringa):
        if (cosa == "Orfane"):
                speciale = sito.lonelypages(number = 10000, repeat = False)
        if (cosa == "Categorizzare"):
                speciale = sito.uncategorizedpages(number = 10000, repeat = False)
        if (cosa == "NoInterwiki"):
                speciale = sito.withoutinterwiki(number = 10000, repeat = False)
        k = 0
        for i in speciale:
                k = k + 1
        nuovo = vecchio + stringa + str(k) + u"\n"
        return nuovo
 
def vedi():
        sito = wikipedia.getSite(code='it',fam='wikibooks')
        global categorie
        nuovo = u"\n\n"
        for k in categorie:
                corrente = Category(sito, 'Categoria:' + k)
                catCount = len(corrente.articlesList(recurse=True))
                nuovo = nuovo + k + ": " + str(catCount) + "\n"
        nuovo = speciali2(nuovo, sito, "Orfane", "Orfane: ")
        nuovo = speciali2(nuovo, sito, "Categorizzare", "Da categorizzare: ")
        nuovo = speciali2(nuovo, sito, "NoInterwiki", "Senza Interwiki: ")
        nuovo = nuovo + u"\n"
        wikipedia.output(nuovo)
 
def speciali2(vecchio, sito, cosa, stringa):
        if (cosa == "Orfane"):
                speciale = sito.lonelypages(number = 10000, repeat = False)
        if (cosa == "Categorizzare"):
                speciale = sito.uncategorizedpages(number = 10000, repeat = False)
        if (cosa == "NoInterwiki"):
                speciale = sito.withoutinterwiki(number = 10000, repeat = False)
        k = 0
        for i in speciale:
                k = k + 1
        nuovo = vecchio + stringa + str(k) + u"\n"
        return nuovo
 
if __name__ == "__main__":
        try:
                main()
        finally:
                wikipedia.stopme()

moduli.py versione toolserver[modifica]

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

"""

#############################################
#                                           #
#  Distributed under the terms of the GFDL  #
#        Created by [[it:b:User:G4]]        #
#                                           #
#############################################
 
Description:
   This script is used for updating [[it:b:Template:Statistiche manutenzioni]]
   it counts the number of pages in each category of "Lavoro sporco"
   and puts them in the template

"""
 
import wikipedia, re
from catlib import Category
 
def main():
        msg = "conto lavoro sporco"
        global pagine 
        pagine = True
        global categorie
        categorie = [ u"Moduli 0%", u"Categoria da definire", u"Da controllare", u"Da controllare per copyright", u"Segnalazioni NPOV", u"Da aiutare", u"Da tradurre", u"Da unire", u"Da wikificare", u"Moduli 25%", u"Moduli 50%", u"Moduli 75%", u"Moduli 100%", u"Libri 0%",  u"Libri 25%",  u"Libri 50%",  u"Libri 75%",  u"Libri 100%"]

        aggiornamenti()
        if (pagine):
                statistiche(msg)

def aggiornamenti():
        versione = u'8.82'
        sito = wikipedia.getSite(code='it',fam='wikibooks')
        pagVer = wikipedia.Page(sito, "Template:Statistiche manutenzioni/Script/Versione")
        ver = u'' + pagVer.get()
        if ver > versione:
                global pagine
                pagine = False
 
def statistiche(messaggio):
        sito = wikipedia.getSite(code='it',fam='wikibooks')
        global categorie
        pagina = wikipedia.Page(sito, u'Template:Statistiche manutenzioni')
        nuovo = u"{{Statistiche manutenzioni/Tabella\n"
        nuovo = nuovo + u"|Data={{subst:CURRENTDAY}} {{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}} {{subst:LOCALTIME}}\n"
        for k in categorie:
                corrente = Category(sito, 'Categoria:' + k)
                if k == u"Da controllare":
                    catCount = len(corrente.articlesList(recurse=False))
                else:
                    catCount = len(corrente.articlesList(recurse=True))
                k = re.sub("Moduli ", "", k)
                k = re.sub("Libri ", "L", k)
                nuovo = nuovo + "|" + k + "=" + str(catCount) + "\n"
        nuovo = speciali(nuovo, sito, "Orfane", "|Orfane=")
        nuovo = speciali(nuovo, sito, "Categorizzare", "|NoCat=")
        nuovo = speciali(nuovo, sito, "NoInterwiki", "|NoInterwiki=")
        nuovo = nuovo + "}}"
        nuovo = nuovo + u"\n<noinclude>[[Categoria:Coordinamento| ]]</noinclude>"
        pagina.put(nuovo, "[[Wikibooks:Bot|Bot]]: " + messaggio)
 
def speciali(vecchio, sito, cosa, stringa):
        if (cosa == "Orfane"):
                speciale = sito.lonelypages(number = 10000, repeat = False)
        if (cosa == "Categorizzare"):
                speciale = sito.uncategorizedpages(number = 10000, repeat = False)
        if (cosa == "NoInterwiki"):
                speciale = sito.withoutinterwiki(number = 10000, repeat = False)
        k = 0
        for i in speciale:
                k = k + 1
        nuovo = vecchio + stringa + str(k) + u"\n"
        return nuovo

 
if __name__ == "__main__":
        try:
                main()
        finally:
                wikipedia.stopme()


Bollettini[modifica]

Parametri[modifica]

-file:xxx[modifica]

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.

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]]")


Auguri[modifica]

Questo è lo script utilizzato da G4Bot per augurare buon Natale a tutti coloro che hanno contribuito almeno una volta nella mia talk

auguri.py v.1.00[modifica]

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

"""
 
#############################################
#                                           #
#  Distributed under the terms of the GFDL  #
#        Created by [[it:b:User:G4]]        #
#                                           #
#############################################
 
 
"""

import wikipedia
 
def main():
   sito = wikipedia.getSite(code='it',fam='wikibooks')
   discussioneMia = wikipedia.Page(sito, "Discussioni utente:G4")
   utenti = discussioneMia.contributingUsers()
   for utente in utenti:
       if utente == "G4":
           continue
       if utente == "G4Bot":
           continue
       discussione = wikipedia.Page(sito, "Discussioni utente:" + str(utente))
       vecchio = discussione.get()
       nuovo = vecchio + "\n\n==Auguri da G4 e G4Bot==\n\n{{subst:Utente:G4/Auguri}}"
       wikipedia.output(">>>>>" + discussione.title() + "<<<<<\n")
       wikipedia.showDiff(vecchio, nuovo)
       choice = wikipedia.inputChoice(u"Auguro?",  ['Si', 'No'], ['S', 'N'], 'N')
       if choice in ['S', 's']:
           discussione.put(nuovo, "[[Wikibooks:Bot|Bot]]: Auguro buon Natale")   

if __name__ == "__main__":
        try:
                main()
        finally:
                wikipedia.stopme()

Regex avanzamento - revisione 4[modifica]

E' in preparazione una regex per il sistemamento del template di avanzamento (che non deve essere a fine pagina). La regex è una bozza. "(\[\[(als|ar|ang|be|bg|bn|ca|cs|cv|cy|da|de|el|en|eo|es|et|fa|fr|fy|gl|he|hu|ia|id|ie|is|ja|ka|ko|ku|la|lt|mk|ml|na|nl|no|pl|pt|ro|ru|simple|sk|sl|sq|sr|su|fi|sv|ta|th|tl|tr|tt|uk|vi|zh):(.*)?\]\])*?(\n)?(\[\[[Cc]ategoria:.*\]\])*?(\n)?\{\{[Aa]vanzamento\|(00|25|50|75|100)%\}\}"

Disclaimer[modifica]

L'Utente:G4 ed il suo bot non si prendono responsabilità sull'uso degli script sovrastanti da parte di terzi. Pertanto comunicano che è da imputare la responsabilità a loro solo e soltanto se sono gli stessi a compiere gli edit.

Firmato