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

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