Utente:G4/Script

Wikibooks, manuali e libri di testo liberi.

Indice

[modifica] Carte di Magic

[modifica] inseriscicarte.py v. 1.50 BETA

#!/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()

[modifica] modellocarta.txt

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

[modifica] Inserire testi

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.

[modifica] Versione 2

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

[modifica] inseriscitesto.py v. 3.50 BETA

  1. import string
    
  2. import wikipedia
    
  3.  
    
  4. def main():
    
  5.     crlf = "\n"
    
  6.     all = False
    
  7.     cart = "c:/"
    
  8.     file = "testo.txt"
    
  9.     args = wikipedia.handleArgs()
    
  10.     for currentArgument in args:
    
  11.         if currentArgument.startswith("-cartella:"):
    
  12.             cart = currentArgument[10:] 
    
  13.             # Se l'utente dice da dove deve cominciare, lo memorizza
    
  14.         if currentArgument.startswith("-file:"):       
    
  15.             file = currentArgument[6:] 
    
  16.             # Se l'utente dice da dove deve cominciare, lo memorizza
    
  17.         if currentArgument.startswith("-always"):
    
  18.             all = True
    
  19.     nomefile = cart + file
    
  20.     f = open(nomefile, 'r')
    
  21.     for line in f.readlines():
    
  22.         w = line.split('<<')
    
  23.         i = len(w)
    
  24.         if i > 1 :
    
  25.             sito=wikipedia.getSite(code='it',fam='wikibooks')
    
  26.             pl = wikipedia.Page(sito, w[0])
    
  27.             testo_originale = pl.get()
    
  28.  
    
  29.             testo_nuovo = testo_originale + crlf + w[1]
    
  30.  
    
  31.             if (not all):
    
  32.                 # Chiede la conferma prima di 
    
  33.                 # editare (se non è in modalità automatica)
    
  34.                 wikipedia.output(">>>>>" + pl.title() + "<<<<<\n\n")
    
  35.                 wikipedia.showDiff(testo_originale, testo_nuovo)
    
  36.                 choice = wikipedia.inputChoice(u"Aggiungo questo testo?",  ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
    
  37.             else:
    
  38.                 choice = 'y'
    
  39.             if choice in ['A', 'a']:
    
  40.                 all = True
    
  41.                 choice = 'y'
    
  42.             if choice in ['Y', 'y']:
    
  43.                 pl.put(testo_nuovo,'[[Wikibooks:Bot|Bot]]: Aggiungo: "' + w[1] + '"')   
    
  44.     f.close()
    
  45.  
    
  46. if __name__ == "__main__":
    
  47.     try:
    
  48.         main()
    
  49.     except:
    
  50.         wikipedia.stopme()
    
  51.         raise
    
  52.     else:
    
  53.         wikipedia.stopme()
    

[modifica] Avanzamento

Versione evoluta di inseriscitesto.py.

[modifica] Avanzamento.py v. 1.10

  1. import string
    
  2. import wikipedia
    
  3. import re
    
  4.  
    
  5. def main():
    
  6.     crlf = "\n{{Avanzamento|"
    
  7.     crd = "%}}"
    
  8.     all = False
    
  9.     cart = "c:/"
    
  10.     file = "testo.txt"
    
  11.     argomenti = wikipedia.handleArgs()
    
  12.     for corrente in argomenti:
    
  13.         if corrente.startswith("-cartella:"):
    
  14.             cart = currentArgument[10:]
    
  15.         if corrente.startswith("-file:"):       
    
  16.             file = currentArgument[6:]
    
  17.         if corrente.startswith("-always"):
    
  18.             all = True
    
  19.     nomefile = cart + file
    
  20.     fonte = open(nomefile, 'r')
    
  21.     for line in fonte.readlines():
    
  22.         testo = line.split('<<')
    
  23.         i = len(testo)
    
  24.         if i > 1 :
    
  25.             sito=wikipedia.getSite(code='it',fam='wikibooks')
    
  26.             pl = wikipedia.Page(sito, testo[0])
    
  27.             testo_originale = pl.get()
    
  28.  
    
  29.             testo[1] = re.sub("\n", "", testo[1])
    
  30.             testo_nuovo = testo_originale + crlf + testo[1] + crd
    
  31.  
    
  32.             if (not all):
    
  33.                 wikipedia.output(">>>>>" + pl.title() + "<<<<<\n")
    
  34.                 wikipedia.output("Si sta tentando di categorizzare\n   la pagina come " + testo[1] + "%\n")
    
  35.                 choice = wikipedia.inputChoice(u"Categorizzo?",  ['Si', 'No', 'Tutti'], ['S', 'N', 'T'], 'N')
    
  36.             else:
    
  37.                 choice = 'S'
    
  38.             if choice in ['T', 't']:
    
  39.                 all = True
    
  40.                 choice = 'S'
    
  41.             if choice in ['S', 's']:
    
  42.                 pl.put(testo_nuovo,'[[Wikibooks:Bot|Bot]]: Categorizzo: "' + testo[1] + '%"')   
    
  43.     fonte.close()
    
  44.  
    
  45. if __name__ == "__main__":
    
  46.     try:
    
  47.         main()
    
  48.     except:
    
  49.         wikipedia.stopme()
    
  50.         raise
    
  51.     else:
    
  52.         wikipedia.stopme()
    

[modifica] Statistiche moduli

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

[modifica] Parametri

[modifica] -pagina:xxx

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 _ ).

[modifica] -noVer

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

Esempio:

moduli.py -noVer

[modifica] -noPag

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

Esempio:

moduli.py -noPag

[modifica] -visuale

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

Esempio:

moduli.py -visuale

[modifica] -msg:xxx

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.

[modifica] -aiuto

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

Esempio:

moduli.py -aiuto

[modifica] moduli.py v. 8.82

  1. # -*- coding: utf-8 -*-
    
  2.  
    
  3. """
    
  4.  
    
  5. #############################################
    
  6. #                                           #
    
  7. #  Distributed under the terms of the GFDL  #
    
  8. #        Created by [[it:b:User:G4]]        #
    
  9. #                                           #
    
  10. #############################################
    
  11.  
    
  12. Description:
    
  13.    This script is used for updating [[it:b:Template:Statistiche manutenzioni]]
    
  14.    it counts the number of pages in each category of "Lavoro sporco"
    
  15.    and puts them in the template
    
  16.  
    
  17. """
    
  18.  
    
  19. import wikipedia, re
    
  20. from catlib import Category
    
  21.  
    
  22. def main():
    
  23.         aiuto = False
    
  24.         msg = "conto lavoro sporco"
    
  25.         global controllo
    
  26.         controllo = True
    
  27.         global pagine 
    
  28.         pagine = True
    
  29.         visuale = False
    
  30.         global categorie
    
  31.         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%"]
    
  32.         for argomento in wikipedia.handleArgs():
    
  33.                 if argomento.startswith("-pagina:"):
    
  34.                         pagina = wikipedia.Page(sito, argomento[8:])
    
  35.                 if argomento.startswith("-noVer"):
    
  36.                         controllo = False
    
  37.                 if argomento.startswith("-noPag"):
    
  38.                         pagine = False
    
  39.                 if argomento.startswith("-visuale"):
    
  40.                         visuale = True
    
  41.                         pagine = False
    
  42.                 if argomento.startswith("-msg:"):
    
  43.                         msg = re.sub("_", " ", str(argomento[5:]))
    
  44.                 if argomento.startswith("-aiuto"):
    
  45.                         aiuto = True
    
  46.         if (aiuto):
    
  47.                 help()
    
  48.         if (controllo):
    
  49.                 aggiornamenti()
    
  50.         if (pagine):
    
  51.                 statistiche(msg)
    
  52.         if (visuale):
    
  53.                 vedi()
    
  54.  
    
  55. def help():
    
  56.         wikipedia.output("\n HAI CHIESTO AIUTO\n\n")
    
  57.         wikipedia.output("Questo script (creato da G4) conta le pagine di alcune categorie\n")
    
  58.         wikipedia.output("di lavoro sporco e, grazie ad un apposito template, aggiorna le\n")
    
  59.         wikipedia.output("statistiche relative\n\n")
    
  60.         wikipedia.output("Lo script supporta i parametri:\n\n")
    
  61.         wikipedia.output(" -aiuto (che stai utilizzando adesso)\n")
    
  62.         wikipedia.output(" -noPag che comanda al bot di controllare soltanto la versione\n")
    
  63.         wikipedia.output(" -noVer che comanda al bot di non controllare la versione\n")
    
  64.         wikipedia.output(" -pagina: che comanda al bot di mettere il template in una pagina diversa\n")
    
  65.         wikipedia.output(" -visuale che comanda al bot di stampare a video i risultati del conteggio\n")
    
  66.         wikipedia.output(" -msg: che comanda al bot di dare un messaggio diverso dal solito (che deve")
    
  67.         wikipedia.output("       essere messo dopo il nome del parametro. Il bot sostituirà")
    
  68.         wikipedia.output("       automaticamente gli _ con spazi.\n")
    
  69.         wikipedia.output("Grazie per aver usato l'aiuto di moduli.py\n")
    
  70.         global pagine
    
  71.         pagine = False
    
  72.         global controllo
    
  73.         controllo = False
    
  74.  
    
  75. def aggiornamenti():
    
  76.         versione = u'8.82'
    
  77.         sito = wikipedia.getSite(code='it',fam='wikibooks')
    
  78.         pagVer = wikipedia.Page(sito, "Template:Statistiche manutenzioni/Script/Versione")
    
  79.         ver = u'' + pagVer.get()
    
  80.         if ver <= versione:
    
  81.                 wikipedia.output("\nNon sono state rilasciate nuove versioni di moduli.py (si sta usando la " + ver +")\n")
    
  82.         else:
    
  83.                 wikipedia.output("\nE' USCITA UNA NUOVA VERSIONE DI MODULI.PY (la " + ver + ")\n")
    
  84.                 global pagine
    
  85.                 pagine = False
    
  86.  
    
  87. def statistiche(messaggio):
    
  88.         sito = wikipedia.getSite(code='it',fam='wikibooks')
    
  89.         global categorie
    
  90.         pagina = wikipedia.Page(sito, u'Template:Statistiche manutenzioni')
    
  91.         nuovo = u"{{Statistiche manutenzioni/Tabella\n"
    
  92.         nuovo = nuovo + u"|Data={{subst:CURRENTDAY}} {{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}} {{subst:LOCALTIME}}\n"
    
  93.         for k in categorie:
    
  94.                 corrente = Category(sito, 'Categoria:' + k)
    
  95.                 if k == u"Da controllare":
    
  96.                     catCount = len(corrente.articlesList(recurse=False))
    
  97.                 else:
    
  98.                     catCount = len(corrente.articlesList(recurse=True))
    
  99.                 k = re.sub("Moduli ", "", k)
    
  100.                 k = re.sub("Libri ", "L", k)
    
  101.                 nuovo = nuovo + "|" + k + "=" + str(catCount) + "\n"
    
  102.         nuovo = speciali(nuovo, sito, "Orfane", "|Orfane=")
    
  103.         nuovo = speciali(nuovo, sito, "Categorizzare", "|NoCat=")
    
  104.         nuovo = speciali(nuovo, sito, "NoInterwiki", "|NoInterwiki=")
    
  105.         nuovo = nuovo + "}}"
    
  106.         nuovo = nuovo + u"\n<noinclude>[[Categoria:Coordinamento| ]]</noinclude>"
    
  107.         pagina.put(nuovo, "[[Wikibooks:Bot|Bot]]: " + messaggio)
    
  108.  
    
  109. def speciali(vecchio, sito, cosa, stringa):
    
  110.         if (cosa == "Orfane"):
    
  111.                 speciale = sito.lonelypages(number = 10000, repeat = False)
    
  112.         if (cosa == "Categorizzare"):
    
  113.                 speciale = sito.uncategorizedpages(number = 10000, repeat = False)
    
  114.         if (cosa == "NoInterwiki"):
    
  115.                 speciale = sito.withoutinterwiki(number = 10000, repeat = False)
    
  116.         k = 0
    
  117.         for i in speciale:
    
  118.                 k = k + 1
    
  119.         nuovo = vecchio + stringa + str(k) + u"\n"
    
  120.         return nuovo
    
  121.  
    
  122. def vedi():
    
  123.         sito = wikipedia.getSite(code='it',fam='wikibooks')
    
  124.         global categorie
    
  125.         nuovo = u"\n\n"
    
  126.         for k in categorie:
    
  127.                 corrente = Category(sito, 'Categoria:' + k)
    
  128.                 catCount = len(corrente.articlesList(recurse=True))
    
  129.                 nuovo = nuovo + k + ": " + str(catCount) + "\n"
    
  130.         nuovo = speciali2(nuovo, sito, "Orfane", "Orfane: ")
    
  131.         nuovo = speciali2(nuovo, sito, "Categorizzare", "Da categorizzare: ")
    
  132.         nuovo = speciali2(nuovo, sito, "NoInterwiki", "Senza Interwiki: ")
    
  133.         nuovo = nuovo + u"\n"
    
  134.         wikipedia.output(nuovo)
    
  135.  
    
  136. def speciali2(vecchio, sito, cosa, stringa):
    
  137.         if (cosa == "Orfane"):
    
  138.                 speciale = sito.lonelypages(number = 10000, repeat = False)
    
  139.         if (cosa == "Categorizzare"):
    
  140.                 speciale = sito.uncategorizedpages(number = 10000, repeat = False)
    
  141.         if (cosa == "NoInterwiki"):
    
  142.                 speciale = sito.withoutinterwiki(number = 10000, repeat = False)
    
  143.         k = 0
    
  144.         for i in speciale:
    
  145.                 k = k + 1
    
  146.         nuovo = vecchio + stringa + str(k) + u"\n"
    
  147.         return nuovo
    
  148.  
    
  149. if __name__ == "__main__":
    
  150.         try:
    
  151.                 main()
    
  152.         finally:
    
  153.                 wikipedia.stopme()
    

[modifica] moduli.py versione toolserver

  1. # -*- coding: utf-8 -*-
    
  2.  
    
  3. """
    
  4.  
    
  5. #############################################
    
  6. #                                           #
    
  7. #  Distributed under the terms of the GFDL  #
    
  8. #        Created by [[it:b:User:G4]]        #
    
  9. #                                           #
    
  10. #############################################
    
  11.  
    
  12. Description:
    
  13.    This script is used for updating [[it:b:Template:Statistiche manutenzioni]]
    
  14.    it counts the number of pages in each category of "Lavoro sporco"
    
  15.    and puts them in the template
    
  16.  
    
  17. """
    
  18.  
    
  19. import wikipedia, re
    
  20. from catlib import Category
    
  21.  
    
  22. def main():
    
  23.         msg = "conto lavoro sporco"
    
  24.         global pagine 
    
  25.         pagine = True
    
  26.         global categorie
    
  27.         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%"]
    
  28.  
    
  29.         aggiornamenti()
    
  30.         if (pagine):
    
  31.                 statistiche(msg)
    
  32.  
    
  33. def aggiornamenti():
    
  34.         versione = u'8.82'
    
  35.         sito = wikipedia.getSite(code='it',fam='wikibooks')
    
  36.         pagVer = wikipedia.Page(sito, "Template:Statistiche manutenzioni/Script/Versione")
    
  37.         ver = u'' + pagVer.get()
    
  38.         if ver > versione:
    
  39.                 global pagine
    
  40.                 pagine = False
    
  41.  
    
  42. def statistiche(messaggio):
    
  43.         sito = wikipedia.getSite(code='it',fam='wikibooks')
    
  44.         global categorie
    
  45.         pagina = wikipedia.Page(sito, u'Template:Statistiche manutenzioni')
    
  46.         nuovo = u"{{Statistiche manutenzioni/Tabella\n"
    
  47.         nuovo = nuovo + u"|Data={{subst:CURRENTDAY}} {{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}} {{subst:LOCALTIME}}\n"
    
  48.         for k in categorie:
    
  49.                 corrente = Category(sito, 'Categoria:' + k)
    
  50.                 if k == u"Da controllare":
    
  51.                     catCount = len(corrente.articlesList(recurse=False))
    
  52.                 else:
    
  53.                     catCount = len(corrente.articlesList(recurse=True))
    
  54.                 k = re.sub("Moduli ", "", k)
    
  55.                 k = re.sub("Libri ", "L", k)
    
  56.                 nuovo = nuovo + "|" + k + "=" + str(catCount) + "\n"
    
  57.         nuovo = speciali(nuovo, sito, "Orfane", "|Orfane=")
    
  58.         nuovo = speciali(nuovo, sito, "Categorizzare", "|NoCat=")
    
  59.         nuovo = speciali(nuovo, sito, "NoInterwiki", "|NoInterwiki=")
    
  60.         nuovo = nuovo + "}}"
    
  61.         nuovo = nuovo + u"\n<noinclude>[[Categoria:Coordinamento| ]]</noinclude>"
    
  62.         pagina.put(nuovo, "[[Wikibooks:Bot|Bot]]: " + messaggio)
    
  63.  
    
  64. def speciali(vecchio, sito, cosa, stringa):
    
  65.         if (cosa == "Orfane"):
    
  66.                 speciale = sito.lonelypages(number = 10000, repeat = False)
    
  67.         if (cosa == "Categorizzare"):
    
  68.                 speciale = sito.uncategorizedpages(number = 10000, repeat = False)
    
  69.         if (cosa == "NoInterwiki"):
    
  70.                 speciale = sito.withoutinterwiki(number = 10000, repeat = False)
    
  71.         k = 0
    
  72.         for i in speciale:
    
  73.                 k = k + 1
    
  74.         nuovo = vecchio + stringa + str(k) + u"\n"
    
  75.         return nuovo
    
  76.  
    
  77.  
    
  78. if __name__ == "__main__":
    
  79.         try:
    
  80.                 main()
    
  81.         finally:
    
  82.                 wikipedia.stopme()
    


[modifica] Bollettini

[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] bollettino.py v. 1.16.1

  1. # -*- coding: utf-8 -*-
    
  2.  
    
  3. """
    
  4.  
    
  5. #############################################
    
  6. #                                           #
    
  7. #  Distributed under the terms of the GFDL  #
    
  8. #        Created by [[it:b:User:G4]]        #
    
  9. #                                           #
    
  10. #############################################
    
  11.  
    
  12.  
    
  13. """
    
  14.  
    
  15. import wikipedia, pagegenerators, re
    
  16. from catlib import Category
    
  17. from datetime import datetime
    
  18.  
    
  19. def inizio():
    
  20.     #Esamina le opzioni e valuta che fare
    
  21.     nodisco = True
    
  22.     nowiki = True
    
  23.     pag = ""
    
  24.     global versione
    
  25.     versione = u"1.16.1"
    
  26.     global tem
    
  27.     tem = True
    
  28.     for argomento in wikipedia.handleArgs():
    
  29.         if argomento.startswith("-file:"):
    
  30.             nodisco = False         
    
  31.             file = re.sub("_", " ", str(argomento[6:]))
    
  32.         if argomento.startswith("-wiki:"):
    
  33.             nowiki = False        
    
  34.             pag = re.sub("_", " ", str(argomento[6:]))
    
  35.         if argomento == "-file":
    
  36.             nodisco = False
    
  37.             file = input("Inserisci il percorso del file: ")  
    
  38.             file = re.sub("_", " ", file)
    
  39.         if argomento == "-wiki":
    
  40.             nowiki = False     
    
  41.             pag = input("Inserisci il nome della pagina: ")     
    
  42.             pag = re.sub("_", " ", pag)
    
  43.     if (nodisco) and (nowiki): 
    
  44.         libro = raw_input('Inserisci il nome del libro: ')
    
  45.         if libro == "NoNo":
    
  46.             tem = False
    
  47.         elif libro !="No":
    
  48.             libro = re.sub("_", " ", libro)
    
  49.             variabili()
    
  50.             speciali()
    
  51.             scrivi(unicode(libro, 'utf-8'))
    
  52.     elif (nodisco) and not (nowiki):
    
  53.         variabili()
    
  54.         speciali()
    
  55.         sito = wikipedia.getSite(code='it',fam='wikibooks')
    
  56.         Pagina = wikipedia.Page(sito, pag)
    
  57.         testo = Pagina.get()
    
  58.         cerca = re.compile("# \[?\[?.*]?]?")
    
  59.         cerca = cerca.search(testo)
    
  60.         if cerca != None:
    
  61.             cerca2 = re.compile("# \[?\[?.*]?]?")
    
  62.             cerca2 = cerca2.findall(testo)
    
  63.             for g in cerca2:
    
  64.                 g = re.sub("# |\[\[|]]", "", g)
    
  65.                 g = re.sub("_", " ", g)
    
  66.                 scrivi(str(g))
    
  67.     elif (nowiki) and not (nodisco):
    
  68.         variabili()
    
  69.         speciali()
    
  70.         f = open(file, 'r')
    
  71.         for linea in f.readlines():
    
  72.             libro = re.sub("\n", "", linea)
    
  73.             libro = re.sub("_", " ", libro)
    
  74.             scrivi(unicode(libro, 'utf-8'))
    
  75.         f.close()
    
  76.     if (tem):
    
  77.         bollettini()
    
  78.     senza()
    
  79.  
    
  80. def scrivi(libro):
    
  81.     # Crea e scrive il bollettino
    
  82.     sito = wikipedia.getSite(code='it',fam='wikibooks')
    
  83.     procedo = True
    
  84.     pagLibro = wikipedia.Page(sito, libro)
    
  85.     try:
    
  86.         pagLibro.get()
    
  87.     except wikipedia.IsRedirectPage:
    
  88.         procedo = False
    
  89.         wikipedia.output("\n" + pagLibro.title() + "e' un redirect.\n")
    
  90.     except wikipedia.NoPage:
    
  91.         procedo = False
    
  92.     Bollettino = wikipedia.Page(sito, libro + "/Sviluppo")
    
  93.     log = wikipedia.Page(sito, "Progetto:Coordinamento/Bollettini/Log")
    
  94.     testo = "{{Bollettino\n"
    
  95.     testo = testo + "|Autore=~~~\n"
    
  96.     testo = testo + "|Data={{subst:LOCALTIME}} - {{subst:CURRENTDAY}} {{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}\n"
    
  97.     testo = testo + "|Libro=" + libro + "\n"
    
  98.     testo2 = ""
    
  99.     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"]
    
  100.     categorie2 = [ "00%", "25%", "50%", "75%", "100%", "Wik", "Control", "Aiutare", "Controlcopy", "Tradurre", "NPOV", "Canc" ]
    
  101.     categorie3 = categorie2 + [ "Orfane", "NoCat", "Red" ]
    
  102.     if (procedo):
    
  103.         Blocco = set(pagegenerators.PrefixingPageGenerator(libro + "/"))
    
  104.         Blocco.add(wikipedia.Page(sito, libro))
    
  105.         for numero in range(0, len(categorie)): 
    
  106.             cat = Category(sito, "Categoria:" + categorie[numero])
    
  107.             Blocco2 = set(pagegenerators.CategorizedPageGenerator(cat))
    
  108.             testo2 = testo2 + "\n\n==[[:Categoria:" + str(categorie[numero]) + "|" + str(categorie[numero]) + "]]==\n"
    
  109.             conta = 0
    
  110.             for page in Blocco.intersection(Blocco2):
    
  111.                 conta = conta + 1
    
  112.                 if page.title() == Bollettino.title():
    
  113.                     continue
    
  114.                 else:
    
  115.                     testo2 = testo2 + "# [[" + page.title() + "]]\n"
    
  116.             if str(categorie[numero]) == "Moduli 100%":
    
  117.                 if Bollettino.exists():
    
  118.                     testo = testo + "|" + categorie2[numero] + "=" + str(conta - 1) + "\n"
    
  119.                 else:
    
  120.                     testo = testo + "|" + categorie2[numero] + "=" + str(conta) + "\n"
    
  121.             else:
    
  122.                 testo = testo + "|" + categorie2[numero] + "=" + str(conta) + "\n"
    
  123.         utile = wikipedia.Page(sito, "Progetto:Coordinamento/Bollettini/PagineOrfane")
    
  124.         Blocco2 = set(pagegenerators.LinkedPageGenerator(utile))
    
  125.         conta = 0
    
  126.         testo2 = testo2 + "\n\n==[[Progetto:Coordinamento/Bollettini/PagineOrfane|Orfane]]==\n"
    
  127.         for page in Blocco.intersection(Blocco2):
    
  128.                 conta = conta + 1
    
  129.                 if page.title == Bollettino.title:
    
  130.                     continue
    
  131.                 else:
    
  132.                     testo2 = testo2 + "# [[" + page.title() + "]]\n"
    
  133.         testo = testo + "|Orfane=" + str(conta) + "\n"
    
  134.         wikipedia.output("Aggiunte le orfane")
    
  135.         utile = wikipedia.Page(sito, "Progetto:Coordinamento/Bollettini/NonCategorizzate")
    
  136.         Blocco2 = set(pagegenerators.LinkedPageGenerator(utile))
    
  137.         conta = 0
    
  138.         testo2 = testo2 + "\n\n==[[Progetto:Coordinamento/Bollettini/NonCategorizzate|Non categorizzate]]==\n"
    
  139.         for page in Blocco.intersection(Blocco2):
    
  140.             conta = conta + 1
    
  141.             if page.title == Bollettino.title:
    
  142.                 continue
    
  143.             else:
    
  144.                 testo2 = testo2 + "# [[" + page.title() + "]]\n"
    
  145.         testo = testo + "|NoCat=" + str(conta) + "\n"
    
  146.         wikipedia.output("Aggiunte le non categorizzate")
    
  147.         conta = 0
    
  148.         testo2 = testo2 + "\n\n==Redirect==\n"
    
  149.         for pa in Blocco:
    
  150.             if pa.isRedirectPage():
    
  151.                 titolo = re.sub(" ", "%20", pa.title())
    
  152.                 conta = conta + 1
    
  153.                 testo2 = testo2 + "# [http://it.wikibooks.org/w/index.php?title=" + titolo + "&redirect=no " + pa.title() + "]\n"
    
  154.         testo = testo + "|Red=" + str(conta) + "\n"
    
  155.         wikipedia.output("Aggiunti i redirect")
    
  156.         if Bollettino.exists():
    
  157.             for numero2 in range(0, len(categorie3)):
    
  158.                 stringa = "\|" + categorie3[numero2] + "=.+"
    
  159.                 tes = re.search(stringa, Bollettino.get())
    
  160.                 tes2 = re.sub("\|" + categorie3[numero2] + "=", "", tes.group())
    
  161.                 nuprec = int(str(tes2))
    
  162.                 tes = re.search(stringa, testo)
    
  163.                 tes2 = re.sub("\|" + categorie3[numero2] + "=", "", tes.group())
    
  164.                 numor = int(str(tes2))
    
  165.                 if nuprec > numor:
    
  166.                     diff = nuprec - numor
    
  167.                     testo = testo + "|%" + categorie3[numero2] + "=-\n|d" + categorie3[numero2] + "=" + str(diff) + "\n"
    
  168.                 elif nuprec < numor:
    
  169.                     diff = numor - nuprec
    
  170.                     testo = testo + "|%" + categorie3[numero2] + "=+\n|d" + categorie3[numero2] + "=" + str(diff) + "\n"
    
  171.                 else:
    
  172.                     testo = testo + "|%" + categorie3[numero2] + "=0\n|d" + categorie3[numero2] + "=0\n"
    
  173.         else:
    
  174.             for numero2 in range(0, len(categorie3)):
    
  175.                 testo = testo + "|%" + categorie3[numero2] + "=0\n|d" + categorie3[numero2] + "=0\n"   
    
  176.         if Bollettino.exists():
    
  177.             conta = -2
    
  178.         else:
    
  179.             conta = -1
    
  180.         for a in range(0, len(Blocco)):
    
  181.             conta = conta + 1
    
  182.         if conta == -1 or conta == -2:
    
  183.             conta = 0
    
  184.         testo = testo + "|Moduli=" + str(conta) + "\n"
    
  185.         categorie = [ "Libri stub", "Libri 25%", "Libri 50%", "Libri 75%", "Libri 100%"]
    
  186.         for g in categorie:
    
  187.             cat = Category(sito, "Categoria:" + g)
    
  188.             Blocco2 = set(pagegenerators.CategorizedPageGenerator(cat))
    
  189.             h = re.sub("Libri |%", "", g)
    
  190.             if h == "stub":
    
  191.                 h = "00"
    
  192.             if pagLibro in Blocco2:
    
  193.                 testo = testo + "|CaLib=" + h + "\n"
    
  194.         cat = Category(sito, "Categoria:Libri in vetrina")
    
  195.         Blocco2 = set(pagegenerators.CategorizedPageGenerator(cat))
    
  196.         if pagLibro in Blocco2:
    
  197.             testo = testo + "|Vet=Si\n"
    
  198.         global versione
    
  199.         testo = testo + "|Versione=" + versione + "\n}}\n\n"
    
  200.         testo3 = "\n{{Avanzamento|100%}}"
    
  201.         testo = testo + testo2 + testo3
    
  202.         if Bollettino.exists():
    
  203.             Bollettino.put(testo, "[[Wikibooks:Bot|Bot]]: aggiorno bollettino")
    
  204.         else:
    
  205.             Bollettino.put(testo, "[[Wikibooks:Bot|Bot]]: creo bollettino")
    
  206.         testo = log.get()
    
  207.         testo = testo + "\n#[[" + libro + "]] ([[" + libro + "/Sviluppo|bollettino]]) - {{subst:LOCALTIME}} - {{subst:CURRENTDAY}} {{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}} - ~~~"
    
  208.         log.put(testo, "[[Wikibooks:Bot|Bot]]: aggiorno il log")
    
  209.  
    
  210. def bollettini():
    
  211.     # Aggiorna il numero dei bollettini se è vecchio
    
  212.     if vecchio("Template:NUMBEROFBOLLETTINI"):
    
  213.         sito = wikipedia.getSite(code='it',fam='wikibooks')
    
  214.         template = wikipedia.Page(sito, "Template:NUMBEROFBOLLETTINI")
    
  215.         global tutte
    
  216.         pagine = tutte
    
  217.         conta = 0
    
  218.         for y in pagine:
    
  219.             if y.title().endswith("/Sviluppo"):
    
  220.                 conta += 1
    
  221.         template.put(str(conta), "[[Wikibooks:Bot|Bot]]: aggiorno numero di [[Aiuto:Bollettino|bollettini]]")
    
  222.  
    
  223. def senza():
    
  224.     # Aggiorna la lista di libri senza bollettino se cono vecchie
    
  225.     if vecchio("Progetto:Coordinamento/Bollettini/Senza"):
    
  226.         sito = wikipedia.getSite(code='it',fam='wikibooks')
    
  227.         global tutte
    
  228.         libr = tutte
    
  229.         pagSen = wikipedia.Page(sito, "Progetto:Coordinamento/Bollettini/Senza")
    
  230.         global libri
    
  231.         sen = set()
    
  232.         for u in libri:
    
  233.             pa = wikipedia.Page(sito, u.title() + "/Sviluppo")
    
  234.             if not pa in tutte:
    
  235.                 if u.isRedirectPage() == False:
    
  236.                     sen.add(u)
    
  237.         testo = ""
    
  238.         for i in sen:
    
  239.             testo = testo + "# [[" + i.title() + "]] ([[" + i.title() + "/Sviluppo|bollettino]])\n"
    
  240.         pagSen.put(testo, "[[Wikibooks:Bot|Bot]]: aggiorno il log dei bollettini non creati")
    
  241.  
    
  242. def speciali():
    
  243.     # Aggiorna le pagine utili se sono vecchie
    
  244.     if vecchio("Progetto:Coordinamento/Bollettini/PagineOrfane"):
    
  245.         sito = wikipedia.getSite(code='it',fam='wikibooks')
    
  246.         orfane = wikipedia.Page(sito, "Progetto:Coordinamento/Bollettini/PagineOrfane")
    
  247.         noncat = wikipedia.Page(sito, "Progetto:Coordinamento/Bollettini/NonCategorizzate")
    
  248.         testo = ""
    
  249.         for pa in sito.lonelypages(number = 10000, repeat = False):
    
  250.             testo = testo + "[[" + pa.title() + "]]\n"
    
  251.         orfane.put(testo, "[[Wikibooks:Bot|Bot]]: aggiorno pagina utile")
    
  252.         testo = ""
    
  253.         for pa in sito.uncategorizedpages(number = 10000, repeat = False):
    
  254.             testo = testo + "[[" + pa.title() + "]]\n"
    
  255.         noncat.put(testo, "[[Wikibooks:Bot|Bot]]: aggiorno pagina utile")
    
  256.  
    
  257. def vecchio(nomePag):
    
  258.     # Controlla se la pagina non è stata modificata da un giorno.
    
  259.     # Se sì restituisce True, altrimenti False
    
  260.     sito = wikipedia.getSite(code='it',fam='wikibooks')
    
  261.     pagina = wikipedia.Page(sito,nomePag)
    
  262.     cronologia = pagina.getVersionHistory()[0][0]
    
  263.     cronologia = re.sub("T.+Z", "", cronologia)
    
  264.     frt = ""
    
  265.     cosa = str(datetime.today().year)
    
  266.     frt = frt + cosa
    
  267.     cosa = str(datetime.today().month)
    
  268.     if len(cosa) == 1:
    
  269.         cosa = "0" + cosa
    
  270.     frt = frt + "-" + cosa
    
  271.     cosa = str(datetime.today().day)
    
  272.     if len(cosa) == 1:
    
  273.         cosa = "0" + cosa
    
  274.     frt = frt + "-" + cosa
    
  275.     if cronologia != frt:
    
  276.         return True
    
  277.     else:
    
  278.         return False    
    
  279.  
    
  280. def variabili():
    
  281.     # setta le variabili principali e globali
    
  282.     global tutte
    
  283.     tutte = set(pagegenerators.AllpagesPageGenerator(namespace = 0))
    
  284.     global libri
    
  285.     libri = set()
    
  286.     for j in tutte:
    
  287.         f = re.search("/|\\|:|Pagina principale", j.title())
    
  288.         if f == None:
    
  289.             libri.add(j)
    
  290.  
    
  291. if __name__ == "__main__":
    
  292.     try:
    
  293.         inizio()
    
  294.     finally:
    
  295.         wikipedia.stopme()
    
  296.         wikipedia.output("\n   Distributed under the terms of the GFDL\n         Created by [[it:b:User:G4]]")
    


[modifica] Auguri

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

[modifica] auguri.py v.1.00

  1. # -*- coding: utf-8  -*-
    
  2.  
    
  3. """
    
  4.  
    
  5. #############################################
    
  6. #                                           #
    
  7. #  Distributed under the terms of the GFDL  #
    
  8. #        Created by [[it:b:User:G4]]        #
    
  9. #                                           #
    
  10. #############################################
    
  11.  
    
  12.  
    
  13. """
    
  14.  
    
  15. import wikipedia
    
  16.  
    
  17. def main():
    
  18.    sito = wikipedia.getSite(code='it',fam='wikibooks')
    
  19.    discussioneMia = wikipedia.Page(sito, "Discussioni utente:G4")
    
  20.    utenti = discussioneMia.contributingUsers()
    
  21.    for utente in utenti:
    
  22.        if utente == "G4":
    
  23.            continue
    
  24.        if utente == "G4Bot":
    
  25.            continue
    
  26.        discussione = wikipedia.Page(sito, "Discussioni utente:" + str(utente))
    
  27.        vecchio = discussione.get()
    
  28.        nuovo = vecchio + "\n\n==Auguri da G4 e G4Bot==\n\n{{subst:Utente:G4/Auguri}}"
    
  29.        wikipedia.output(">>>>>" + discussione.title() + "<<<<<\n")
    
  30.        wikipedia.showDiff(vecchio, nuovo)
    
  31.        choice = wikipedia.inputChoice(u"Auguro?",  ['Si', 'No'], ['S', 'N'], 'N')
    
  32.        if choice in ['S', 's']:
    
  33.            discussione.put(nuovo, "[[Wikibooks:Bot|Bot]]: Auguro buon Natale")   
    
  34.  
    
  35. if __name__ == "__main__":
    
  36.         try:
    
  37.                 main()
    
  38.         finally:
    
  39.                 wikipedia.stopme()
    

[modifica] Regex avanzamento - revisione 4

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)%\}\}"

[modifica] Disclaimer

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
Strumenti personali