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