Template:Bollettino/Script

Wikibooks, manuali e libri di testo liberi.
Jump to navigation Jump to search

Questo è lo script usato per creare i bollettini

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.

-wiki:xxx[modifica]

Il parametro wiki indica al bot di cercare su una pagina di wikibooks l'elenco dei libri ai quali creare i bollettini.

Esempio:

bollettino.py -wiki:Utente:G4/Bollettini

testo Utente:G4/Bollettini:

# [[Magic]]
# [[Javascript]]
# [[CSS]]
ecc.

bollettino.py v. 1.16.1[modifica]

  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 
 15import wikipedia, pagegenerators, re
 16from catlib import Category
 17from datetime import datetime
 18 
 19def 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 
 80def 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
210def 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
223def 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
242def 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
257def 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
280def 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      
291if __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]]")