Utente:BimBot/Scripts: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
 
Riga 1:
Gli script sono disponibili sul [https://fisheye.toolserver.org/browse/pietrodn/python repository SVN del Toolserver].
== <tt>wikinews_weather.py</tt> ==
Questo script serve per aggiornare il meteo.
 
<source lang="python">
#!/usr/bin/python
# -*- coding: utf-8 -*-
import wikipedia
import urllib2, datetime, re, time
 
def pageText(url):
request = urllib2.Request(url)
user_agent = 'BimBot/1.0'
request.add_header("User-Agent", user_agent)
response = urllib2.urlopen(request)
text = response.read()
response.close()
return text
def main():
pagesDict = {'Template:Weather_World_C/Auto': "http://tools.wikimedia.de/~adambro/wnweather/overlays/%d%b%y-%H-C-world",
'Template:Weather_World_F/Auto': "http://tools.wikimedia.de/~adambro/wnweather/overlays/%d%b%y-%H-F-world",
}
args = wikipedia.handleArgs()
all = False
for currentArgument in args:
if currentArgument.startswith("-always"):
all = True
for pageName in pagesDict:
formatUrl = pagesDict[pageName]
now = datetime.datetime.utcnow()
urlo = now.strftime(formatUrl)
wikipedia.output(u'Prendo la pagina dal server...')
try:
htmlText = pageText(urlo)
except urllib2.HTTPError:
try:
wikipedia.output(u"Errore del server. Aspetto 10 secondi... " + time.strftime("%d %b %Y %H:%M:%S (UTC)", time.gmtime()) )
time.sleep(10)
htmlText = pageText(urlo)
except urllib2.HTTPError:
wikipedia.output(u"Errore del server. Chiudo.")
return
htmlText = re.sub("Wikinews Weather Service", "Servizio Meteo di Wikinotizie", htmlText)
htmlText = re.sub("World Map", r"Mondo", htmlText)
htmlText = re.sub("''\d{2}:\d{2} UTC .*? .*? .*?''</span>", "''{{subst:LOCALDAY}} {{subst:LOCALMONTHNAME}} {{subst:LOCALYEAR}}, {{subst:LOCALHOUR}}:00 [[w:CET|<span style=\"color:white; text-decoration:underline;\">CET</span>]] ({{subst:CURRENTHOUR}}:00 [[w:UTC|<span style=\"color:white; text-decoration:underline;\">UTC</span>]])''</span>", htmlText)
page = wikipedia.Page(wikipedia.getSite(code='it', fam='wikinews'), pageName)
if page.exists():
oldtext = page.get()
else:
oldtext = ""
wikipedia.showDiff(oldtext, htmlText)
if not all:
choice = wikipedia.inputChoice(u"Modificare?", ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
else:
choice = 'y'
if choice in ['A', 'a']:
all = True
choice = 'y'
if choice in ['Y', 'y']:
page.put(htmlText, u"Bot: Aggiorno il meteo")
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()
</source>
 
== <tt>wikinews_petrol.py</tt> ==
Questo script aggiorna il [[Template:Benzina]].
 
<source lang="python">
#!/usr/bin/python
# -*- coding: utf-8 -*-
import wikipedia
import urllib2, datetime, re, time, codecs
 
def pageText(url):
request = urllib2.Request(url)
user_agent = 'BimBot/1.0'
request.add_header("User-Agent", user_agent)
response = urllib2.urlopen(request)
text = response.read()
response.close()
return text
def main():
args = wikipedia.handleArgs()
all = False
for currentArgument in args:
if currentArgument.startswith("-always"):
all = True
templateFile = codecs.open("modello_wikinews_petrol.txt", "r", "utf-8")
modelloVoce = templateFile.read() # Legge il modello della pagina
templateFile.close()
now = datetime.datetime.utcnow()
urlo = "http://www.prezzibenzina.it/"
wikipedia.output(u'Prendo la pagina dal server...')
try:
htmlText = pageText(urlo)
except urllib2.HTTPError:
try:
wikipedia.output(u"Errore del server. Aspetto 10 secondi... " + time.strftime("%d %b %Y %H:%M:%S (UTC)", time.gmtime()) )
time.sleep(10)
htmlText = pageText(urlo)
except urllib2.HTTPError:
wikipedia.output(u"Errore del server. Chiudo.")
return
bloccoTipo = '<!--.*?--><td.*?>(.*?)</td>\s*<td.*?>(.*?)</td>\s*<td.*?>(.*?)</td>\s*<td.*?>(.*?)</td>\s*<td.*?>(.*?)</td>\s*<td.*?>(.*?)</td>\s*<td.*?>(.*?)</td>\s*<td.*?>(.*?)</td>\s*<td.*?>(.*?)</td>\s*<td.*?>(.*?)</td>\s*</tr>'
data = re.search('<th.*?>Indice dei prezzi &euro;/L\. nazionali del (.*?)<br/>', htmlText)
verde = re.search('<tr><th.*?>Benzina</th>' + bloccoTipo, htmlText)
diesel = re.search('<tr><th.*?>Diesel</th>' + bloccoTipo, htmlText)
elencoSostituzioni = { # Sostituisce le variabili nel modello
'#data': data.group(1),
'#verde_Agip': verde.group(2),
'#verde_API': verde.group(3),
'#verde_Erg': verde.group(4),
'#verde_Esso': verde.group(5),
'#verde_Ip': verde.group(6),
'#verde_Q8': verde.group(7),
'#verde_Shell': verde.group(8),
'#verde_Tamoil': verde.group(9),
'#verde_Total': verde.group(10),
'#diesel_Agip': diesel.group(2),
'#diesel_API': diesel.group(3),
'#diesel_Erg': diesel.group(4),
'#diesel_Esso': diesel.group(5),
'#diesel_Ip': diesel.group(6),
'#diesel_Q8': diesel.group(7),
'#diesel_Shell': diesel.group(8),
'#diesel_Tamoil': diesel.group(9),
'#diesel_Total': diesel.group(10),
}
nuovoTesto = massiveReplace(elencoSostituzioni, modelloVoce)
nuovoTesto = re.sub('\|- - - -', '|N.D.', nuovoTesto) # Per quando i dati non sono disponibili
page = wikipedia.Page(wikipedia.getSite(code='it', fam='wikinews'), "Template:Benzina/Auto")
if page.exists():
oldtext = page.get()
else:
oldtext = ""
wikipedia.showDiff(oldtext, nuovoTesto)
if not all:
choice = wikipedia.inputChoice(u"Modificare?", ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
else:
choice = 'y'
if choice in ['A', 'a']:
all = True
choice = 'y'
if choice in ['Y', 'y']:
page.put(nuovoTesto, u"Bot: Aggiorno prezzi benzina")
 
def massiveReplace(dict, text):
# Dato un testo ed un dizionario di sostituzioni, usa le regex per il "find and replace"
for k in dict:
text = re.sub(k, dict[k], text)
return text
 
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()
</source>
 
=== <tt>modello_wikinews_petrol.txt</tt> ===
<pre>
{{Benzina/Inizio}}
{{Benzina/Riga|[[w:Agip|Agip]]|#verde_Agip|#diesel_Agip}}
{{Benzina/Riga|[[w:Anonima Petroli Italiana|Api]]|#verde_API|#diesel_API}}
{{Benzina/Riga|[[w:ERG|Erg]]|#verde_Erg|#diesel_Erg}}
{{Benzina/Riga|[[w:Esso|Esso]]|#verde_Esso|#diesel_Esso}}
{{Benzina/Riga|[[w:Italiana Petroli|Ip]]|#verde_Ip|#diesel_Ip}}
{{Benzina/Riga|[[w:Kuwait Petroleum Corporation|Q8]]|#verde_Q8|#diesel_Q8}}
{{Benzina/Riga|[[w:Royal Dutch Shell|Shell]]|#verde_Shell|#diesel_Shell}}
{{Benzina/Riga|[[w:Tamoil|Tamoil]]|#verde_Tamoil||#diesel_Tamoil}}
{{Benzina/Riga|[[w:Total S.A.|Total]]|#verde_Total|#diesel_Total}}
{{Benzina/Fine}}
 
Fonte: [http://www.prezzibenzina.it/ Prezzibenzina.it]
 
<small>Prezzi [[w:euro|€]]/[[w:litro|l]] nazionali consigliati del #data.</small>
</pre>
 
== <tt>wikinews_petrol2.py</tt> ==
Nuovo script per aggiornare i prezzi della benzina.
 
<source lang="python">
#!/usr/bin/python
# -*- coding: utf-8 -*-
import wikipedia
import urllib2, datetime, re, time, codecs
 
def pageText(url):
request = urllib2.Request(url)
user_agent = 'BimBot/1.0'
request.add_header("User-Agent", user_agent)
response = urllib2.urlopen(request)
text = response.read()
response.close()
return text
def main():
args = wikipedia.handleArgs()
all = False
for currentArgument in args:
if currentArgument.startswith("-always"):
all = True
templateFile = codecs.open("modello_wikinews_petrol2.txt", "r", "utf-8")
modelloVoce = templateFile.read() # Legge il modello della pagina
templateFile.close()
now = datetime.datetime.utcnow()
urlo = "http://www.newstreet.it/prezzi_benzina_gasolio.html"
wikipedia.output(u'Prendo la pagina dal server...')
try:
htmlText = pageText(urlo)
except urllib2.HTTPError:
try:
wikipedia.output(u"Errore del server. Aspetto 10 secondi... " + time.strftime("%d %b %Y %H:%M:%S (UTC)", time.gmtime()) )
time.sleep(10)
htmlText = pageText(urlo)
except urllib2.HTTPError:
wikipedia.output(u"Errore del server. Chiudo.")
return
bloccoTipo = '<td.*?>(.*?)</td><td.*?>(.*?)</td><td.*?>(.*?)</td><td.*?>(.*?)</td><td.*?>(.*?)</td><td.*?>(.*?)</td><td.*?>(.*?)</td><td.*?>(.*?)</td><td.*?>(.*?)</td></tr>'
data = re.search('<td.*?><b>Prezzi di riferimento con servizio \(&euro;/litro\) al (.*?)</b></td>', htmlText)
benzina = re.search('<tr><td.*?><div.*? class="titoliRubriche"><b>Benzina</b></td>' + bloccoTipo, htmlText)
diesel = re.search('<tr><td.*?><div.*? class="titoliRubriche"><b>Diesel</b></td>' + bloccoTipo, htmlText)
elencoSostituzioni = { # Sostituisce le variabili nel modello
'#data': data.group(1),
'#benzina_Agip': benzina.group(1),
'#benzina_API': benzina.group(2),
'#benzina_Erg': benzina.group(3),
'#benzina_Esso': benzina.group(4),
'#benzina_Ip': benzina.group(5),
'#benzina_Q8': benzina.group(6),
'#benzina_Shell': benzina.group(7),
'#benzina_Tamoil': benzina.group(8),
'#benzina_Total': benzina.group(9),
 
'#diesel_Agip': diesel.group(1),
'#diesel_API': diesel.group(2),
'#diesel_Erg': diesel.group(3),
'#diesel_Esso': diesel.group(4),
'#diesel_Ip': diesel.group(5),
'#diesel_Q8': diesel.group(6),
'#diesel_Shell': diesel.group(7),
'#diesel_Tamoil': diesel.group(8),
'#diesel_Total': diesel.group(9),
}
nuovoTesto = massiveReplace(elencoSostituzioni, modelloVoce)
#nuovoTesto = re.sub('\|- - - -', '|N.D.', nuovoTesto) # Per quando i dati non sono disponibili
page = wikipedia.Page(wikipedia.getSite(code='it', fam='wikinews'), "Template:Benzina/Auto")
if page.exists():
oldtext = page.get()
else:
oldtext = ""
wikipedia.showDiff(oldtext, nuovoTesto)
if not all:
choice = wikipedia.inputChoice(u"Modificare?", ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
else:
choice = 'y'
if choice in ['A', 'a']:
all = True
choice = 'y'
if choice in ['Y', 'y']:
page.put(nuovoTesto, u"Bot: Aggiorno prezzi benzina")
 
def massiveReplace(dict, text):
# Dato un testo ed un dizionario di sostituzioni, usa le regex per il "find and replace"
for k in dict:
text = re.sub(k, dict[k], text)
return text
 
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()
</source>
 
=== <tt>modello_wikinews_petrol2.py</tt> ===
<pre>
{{Benzina/Inizio}}
{{Benzina/Riga|[[w:Agip|Agip]]|#benzina_Agip|#diesel_Agip}}
{{Benzina/Riga|[[w:Anonima Petroli Italiana|Api]]|#benzina_API|#diesel_API}}
{{Benzina/Riga|[[w:ERG|Erg]]|#benzina_Erg|#diesel_Erg}}
{{Benzina/Riga|[[w:Esso|Esso]]|#benzina_Esso|#diesel_Esso}}
{{Benzina/Riga|[[w:Italiana Petroli|Ip]]|#benzina_Ip|#diesel_Ip}}
{{Benzina/Riga|[[w:Kuwait Petroleum Corporation|Q8]]|#benzina_Q8|#diesel_Q8}}
{{Benzina/Riga|[[w:Royal Dutch Shell|Shell]]|#benzina_Shell|#diesel_Shell}}
{{Benzina/Riga|[[w:Tamoil|Tamoil]]|#benzina_Tamoil|#diesel_Tamoil}}
{{Benzina/Riga|[[w:Total S.A.|Total]]|#benzina_Total|#diesel_Total}}
{{Benzina/Fine}}
 
Fonte: [http://www.newstreet.it/prezzi_benzina_gasolio.html newstreet.it]
 
<small>Prezzi [[w:euro|€]]/[[w:litro|L]] nazionali consigliati del #data.</small>
</pre>
 
== <tt>elezioni.py</tt> ==
Line 501 ⟶ 186:
<div style="text-align: left; color:black;">'''#senato-altri% Altri (0 deputati<small>+- estero</small>)'''</div>
<div style="text-align: right;">''[[Speciale Elezioni politiche italiane 2008/Senato|dettagli sui risultati]]''</div>
</pre>
 
== <tt>lotto.py</tt> ==
Lo script usato per creare le voci sui risultati delle estrazioni del Lotto.
 
<source lang="python">
##!/usr/bin/python
# -*- coding: utf-8 -*-
import wikipedia
import urllib2, datetime, re, time, codecs
 
mesi = {'gennaio': '01',
'febbraio': '02',
'marzo': '03',
'aprile': '04',
'maggio': '05',
'giugno': '06',
'luglio': '07',
'agosto': '08',
'settembre':'09',
'ottobre': '10',
'novembre': '11',
'dicembre': '12',
}
 
def pageText(url):
request = urllib2.Request(url)
user_agent = 'BimBot/1.0'
request.add_header("User-Agent", user_agent)
response = urllib2.urlopen(request)
text = response.read()
response.close()
return text
def main():
args = wikipedia.handleArgs()
all = False
for currentArgument in args:
if currentArgument.startswith("-always"):
all = True
templateFile = codecs.open("modello_lotto.txt", "r", "utf-8")
modelloVoce = templateFile.read() # Legge il modello della pagina
templateFile.close()
now = datetime.datetime.utcnow()
urlo = "http://www.lottomaticaitalia.it/lotto/estrazioni/estrazioni_ultime.do"
wikipedia.output(u'Prendo la pagina dal server...')
try:
htmlText = pageText(urlo)
except urllib2.HTTPError:
try:
wikipedia.output(u"Errore del server. Aspetto 10 secondi... " + time.strftime("%d %b %Y %H:%M:%S (UTC)", time.gmtime()) )
time.sleep(10)
htmlText = pageText(urlo)
except urllib2.HTTPError:
wikipedia.output(u"Errore del server. Chiudo.")
return
htmlText = htmlText.decode('utf-8')
bloccoTipo = '<tr.*?>\s*<td.*?>\s*%s\s*</td>\s*<td.*?>\s*(\d{1,2})\s*</td>\s*<td.*?>\s*(\d{1,2})\s*</td>\s*<td.*?>\s*(\d{1,2})\s*</td>\s*<td.*?>\s*(\d{1,2})\s*</td>\s*<td.*?>\s*(\d{1,2})\s*</td>\s*</tr>'
data = re.search('<h4>ESTRAZIONE - \s*(.*?) (\d{1,2}) (.*?) (\d+)\s*</h4>', htmlText)
nazionale = re.search(bloccoTipo % 'Nazionale', htmlText)
page = wikipedia.Page(wikipedia.getSite(code='it', fam='wikinews'), "Estrazione del Lotto, " + data.group(1) + " " + str(int(data.group(2))) + " " + data.group(3) + " " + data.group(4))
if page.exists():
wikipedia.output("Nessuna nuova estrazione. Mi fermo.")
return
elencoSostituzioni = { # Sostituisce le variabili nel modello
'#dow': data.group(1),
'#giorno': data.group(2),
'#nomemese': data.group(3),
'#mese': mesi[data.group(3)],
'#anno': data.group(4),
'#nazionale-1': nazionale.group(1),
'#nazionale-2': nazionale.group(2),
'#nazionale-3': nazionale.group(3),
'#nazionale-4': nazionale.group(4),
'#nazionale-5': nazionale.group(5),
 
}
cities = ['Bari', 'Cagliari', 'Firenze', 'Genova', 'Milano', 'Napoli', 'Palermo', 'Roma', 'Torino', 'Venezia']
for c in cities:
match = re.search(bloccoTipo % c, htmlText)
for i in range(1,6):
elencoSostituzioni['#' + c.lower() + '-' + str(i)] = match.group(i)
nuovoTesto = massiveReplace(elencoSostituzioni, modelloVoce)
#nuovoTesto = re.sub('\|- - - -', '|N.D.', nuovoTesto) # Per quando i dati non sono disponibili
#page = wikipedia.Page(wikipedia.getSite(code='it', fam='wikinews'), "Utente:BimBot/Sandbox")
wikipedia.output(">>>>> " + page.title() + " <<<<<")
wikipedia.showDiff('', nuovoTesto)
if not all:
choice = wikipedia.inputChoice(u"Modificare?", ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
else:
choice = 'y'
if choice in ['A', 'a']:
all = True
choice = 'y'
if choice in ['Y', 'y']:
page.put(nuovoTesto, u"Bot: Inserisco nuova estrazione del Lotto")
 
def massiveReplace(dict, text):
# Dato un testo ed un dizionario di sostituzioni, usa le regex per il "find and replace"
for k in dict:
text = re.sub(k, dict[k], text)
return text
 
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()
</source>
 
=== <tt>modello_lotto.txt</tt> ===
<pre>
{{data|{{subst:#expr:#giorno}} #nomemese #anno|#dow}}
{| {{prettytable|width=400px|align=center}}
|-
|colspan="6" bgcolor="#98A1B2" align=center|<span style="color:white">'''Estrazioni del lotto del {{subst:#expr:#giorno}} #nomemese #anno'''</span>
|- style="background:#F5F5F5;"
| Bari
! #bari-1 || #bari-2 || #bari-3 || #bari-4 || #bari-5
|- style="background:#FFFFFF;"
| Cagliari
! #cagliari-1 || #cagliari-2 || #cagliari-3 || #cagliari-4 || #cagliari-5
|- style="background:#F5F5F5;"
| Firenze
! #firenze-1 || #firenze-2 || #firenze-3 || #firenze-4 || #firenze-5
|- style="background:#FFFFFF;"
| Genova
! #genova-1 || #genova-2 || #genova-3 || #genova-4 || #genova-5
|- style="background:#F5F5F5;"
| Milano
! #milano-1 || #milano-2 || #milano-3 || #milano-4 || #milano-5
|- style="background:#FFFFFF;"
| Napoli
! #napoli-1 || #napoli-2 || #napoli-3 || #napoli-4 || #napoli-5
|- style="background:#F5F5F5;"
| Palermo
! #palermo-1 || #palermo-2 || #palermo-3 || #palermo-4 || #palermo-5
|- style="background:#FFFFFF;"
| Roma
! #roma-1 || #roma-2 || #roma-3 || #roma-4 || #roma-5
|- style="background:#F5F5F5;"
| Torino
! #torino-1 || #torino-2 || #torino-3 || #torino-4 || #torino-5
|- style="background:#FFFFFF;"
| Venezia
! #venezia-1 || #venezia-2 || #venezia-3 || #venezia-4 || #venezia-5
|- style="background:#F5F5F5;"
| Ruota nazionale
! #nazionale-1 || #nazionale-2 || #nazionale-3 || #nazionale-4 || #nazionale-5
|-
|}
 
==Fonti==
{{fonte
|autore=
|url=http://www.lottomatica.it/lotto/estrazioni/estrazioni_dettaglio.do?dataConcorso=#anno-#mese-#giorno
|titolo=Lotto: Estrazioni del #giorno-#mese-#anno
|agenzia=Lottomatica
|data={{subst:#expr:#giorno}} #nomemese #anno
}}
 
{{pubblicato}}
 
[[Categoria:Europa]]
[[Categoria:Italia]]
[[Categoria:Giochi a premi]]
[[Categoria:Lotto|#anno-#mese-#giorno]]
</pre>
 
== <tt>wikinews_oil.py</tt> ==
Script per aggiornare [[Template:Dati petrolio|i prezzi del petrolio]].
 
<source lang="python">
#!/usr/bin/python
# -*- coding: utf-8 -*-
import wikipedia
import urllib2, datetime, re, time, codecs
 
def pageText(url):
request = urllib2.Request(url)
user_agent = 'BimBot/1.0'
request.add_header("User-Agent", user_agent)
response = urllib2.urlopen(request)
text = response.read()
response.close()
return text
def main():
args = wikipedia.handleArgs()
all = False
for currentArgument in args:
if currentArgument.startswith("-always"):
all = True
templateFile = codecs.open("modello_wikinews_oil.txt", "r", "utf-8")
modelloVoce = templateFile.read() # Legge il modello della pagina
templateFile.close()
now = datetime.datetime.utcnow()
urlo = "http://www.nymex.com/index.aspx"
wikipedia.output(u'Prendo la pagina dal server...')
try:
htmlText = pageText(urlo)
except urllib2.HTTPError:
try:
wikipedia.output(u"Errore del server. Aspetto 10 secondi... " + time.strftime("%d %b %Y %H:%M:%S (UTC)", time.gmtime()) )
time.sleep(10)
htmlText = pageText(urlo)
except urllib2.HTTPError:
wikipedia.output(u"Errore del server. Chiudo.")
return
prezzoCL = re.search("<span id=\"LastCL\".*?>(.*?)</span>", htmlText).group(1)
changeCL = re.search("<span id=\"ChangeCL\".*?>(<font.*?>)?(.*?)(</font>)?</span>", htmlText).group(2)
prezzoBZ = re.search("<span id=\"LastBZ\".*?>(.*?)</span>", htmlText).group(1)
changeBZ = re.search("<span id=\"ChangeBZ\".*?>(<font.*?>)?(.*?)(</font>)?</span>", htmlText).group(2)
elencoSostituzioni = { # Sostituisce le variabili nel modello
'#CL_curr': prezzoCL,
'#CL_diff': changeCL,
'#BZ_curr': prezzoBZ,
'#BZ_diff': changeBZ,
}
nuovoTesto = massiveReplace(elencoSostituzioni, modelloVoce)
#nuovoTesto = re.sub('\|- - - -', '|N.D.', nuovoTesto) # Per quando i dati non sono disponibili
page = wikipedia.Page(wikipedia.getSite(code='it', fam='wikinews'), "Template:Dati petrolio/Auto")
if page.exists():
oldtext = page.get()
else:
oldtext = ""
wikipedia.showDiff(oldtext, nuovoTesto)
if not all:
choice = wikipedia.inputChoice(u"Modificare?", ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
else:
choice = 'y'
if choice in ['A', 'a']:
all = True
choice = 'y'
if choice in ['Y', 'y']:
page.put(nuovoTesto, u"Bot: Aggiorno prezzi petrolio")
 
def massiveReplace(dict, text):
# Dato un testo ed un dizionario di sostituzioni, usa le regex per il "find and replace"
for k in dict:
text = re.sub(k, dict[k], text)
return text
 
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()
</source>
 
=== <tt>modello_wikinews_oil.txt</tt> ===
<pre>
{{Petrolio
|aggiornamento = {{subst:CURRENTDAY}}/{{subst:CURRENTMONTH}}/{{subst:#time:y|{{subst:LOCALYEAR}}-{{subst:LOCALMONTH}}-{{subst:LOCALDAY}}}} - {{subst:#time:G:i|{{subst:LOCALTIME}} -15 minutes}}
|NYMEX = #CL_curr
|NYMEX-c = #CL_diff
|Brent = #BZ_curr
|Brent-c = #BZ_diff
}}
</pre>
 
== <tt>superenalotto.py</tt> ==
Script per creare le voci sulle estrazioni del SuperEnalotto.
 
<source lang="python">
#!/usr/bin/python
# -*- coding: utf-8 -*-
import wikipedia
import urllib2, datetime, re, time, codecs
 
mesi = {'gennaio': '01',
'febbraio': '02',
'marzo': '03',
'aprile': '04',
'maggio': '05',
'giugno': '06',
'luglio': '07',
'agosto': '08',
'settembre':'09',
'ottobre': '10',
'novembre': '11',
'dicembre': '12',
}
 
def pageText(url):
request = urllib2.Request(url)
user_agent = 'BimBot/1.0'
request.add_header("User-Agent", user_agent)
response = urllib2.urlopen(request)
text = response.read()
response.close()
return text
def main():
args = wikipedia.handleArgs()
all = False
for currentArgument in args:
if currentArgument.startswith("-always"):
all = True
templateFile = codecs.open("modello_superenalotto.txt", "r", "utf-8")
modelloVoce = templateFile.read() # Legge il modello della pagina
templateFile.close()
now = datetime.datetime.utcnow()
urlo = "http://www.sisal.it/se/se_main/1,4136,se_Default,00.html"
wikipedia.output(u'Prendo la pagina dal server...')
try:
htmlText = pageText(urlo)
except urllib2.HTTPError:
try:
wikipedia.output(u"Errore del server. Aspetto 10 secondi... " + time.strftime("%d %b %Y %H:%M:%S (UTC)", time.gmtime()) )
time.sleep(10)
htmlText = pageText(urlo)
except urllib2.HTTPError:
wikipedia.output(u"Errore del server. Chiudo.")
return
numeri = re.search("<TABLE.*?>\s*<tr>\s*<td.*?>\s*<a.*?>\s*(\d+)&nbsp;-&nbsp;\s*(\d+)&nbsp;-&nbsp;\s*(\d+)&nbsp;-&nbsp;\s*(\d+)&nbsp;-&nbsp;\s*(\d+)&nbsp;-&nbsp;\s*(\d+)\s*</font>\s*</nobr>\s*</a>\s*</td>\s*</tr>\s*</table>", htmlText)
jolly = re.search("<td.*?background=\"/giochi/se2006/hp2009/img/BTN_JOLLY.gif\".*?>\s*<a.*?><font.*?><b>(\d+)</b></font></a>\s*</td>", htmlText)
superstar = re.search("<td.*?background=\"/giochi/se2006/hp2009/img/BTN_SUPERSTAR.gif\".*?>\s*<a.*?><font.*?><b>(\d+)</b></font></a>\s*</td>", htmlText)
concorso = re.search("<font.*?><font.*?><b>Concorso n. (\d+) di (.*?) (\d+)/(\d+)/(\d+)</b></font></a>", htmlText)
montepremiparz = re.search("<td><a.*?><font class=testo8.*?>Del Concorso</a></td>\s*<td.*?><a.*?><font class=testo8.*?>(.*?) euro</font></a></td>", htmlText)
jackpot = re.search("<td><a.*?><font class=testo8.*?>\s*Riporto Jackpot</a>\s*</td>\s*<td.*?><a.*?><font class=testo8.*?>(.*?) euro</font></a></td>", htmlText)
montepremitot = re.search("<td><a.*?><font class=testo8.*?><b>Totale</a></td>\s*<td.*?><a.*?><font class=testo8.*?><b>(.*?) euro</font></a></td>", htmlText)
bloccoQuote = "<tr.*?>\s*<td.*?><a.*?><font class=testo8.*?>(.*?)</font></a></td>\s*<td.*?><a.*?><font class=testo8.*?>&quot;%s&quot;</a></td>\s*<td.*?><a.*?><font class=testo8.*?>(.*?)</font></a></td>\s*</tr>"
page = wikipedia.Page(wikipedia.getSite(code='it', fam='wikinews'), "Italia: concorso n. " + concorso.group(1) + "/" + concorso.group(5) + " del SuperEnalotto")
if page.exists():
wikipedia.output("Nessuna nuova estrazione. Mi fermo.")
return
elencoSostituzioni = { # Sostituisce le variabili nel modello
'#super-id': concorso.group(1),
'#dow': concorso.group(2).replace('&igrave;', u'ì'),
'#giorno': concorso.group(3),
'#mese': concorso.group(4),
'#anno': concorso.group(5),
'#num-1': numeri.group(1),
'#num-2': numeri.group(2),
'#num-3': numeri.group(3),
'#num-4': numeri.group(4),
'#num-5': numeri.group(5),
'#num-6': numeri.group(6),
'#num-jolly': jolly.group(1),
'#num-superstar': superstar.group(1),
'#montepremi-parz': montepremiparz.group(1),
'#jackpot': jackpot.group(1),
'#montepremi-tot': montepremitot.group(1),
 
}
quotes = ['punti 6', 'punti 5\+', 'punti 5', 'punti 4', 'punti 3', '5 stella', '4 stella', '3 stella', '2 stella', '1 stella', '0 stella']
for c in quotes:
match = re.search(bloccoQuote % c, htmlText)
elencoSostituzioni['#' + c.lower().replace(' ', '-') + '#'] = match.group(2).replace('nessuna', '0')
elencoSostituzioni['#vincitori-' + c.lower().replace(' ', '-') + '#'] = match.group(1).replace('nessuna', '0')
nuovoTesto = massiveReplace(elencoSostituzioni, modelloVoce)
#page = wikipedia.Page(wikipedia.getSite(code='it', fam='wikinews'), "Utente:BimBot/Sandbox") #DEBUG
wikipedia.output(">>>>> " + page.title() + " <<<<<")
wikipedia.showDiff('', nuovoTesto)
if not all:
choice = wikipedia.inputChoice(u"Modificare?", ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
else:
choice = 'y'
if choice in ['A', 'a']:
all = True
choice = 'y'
if choice in ['Y', 'y']:
page.put(nuovoTesto, u"Bot: Inserisco nuova estrazione del SuperEnalotto")
 
def massiveReplace(dict, text):
# Dato un testo ed un dizionario di sostituzioni, usa le regex per il "find and replace"
for k in dict:
text = re.sub(k, dict[k], text)
return text
 
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()
</source>
 
=== <tt>modello_superenalotto.txt</tt> ===
<pre>
{{data|{{subst:#expr:#giorno}} {{subst:#time:F|#anno-#mese-#giorno}} #anno|#dow}}
{| {{prettytable|width=400px|align=center|text-align=center}}
|-
|colspan="8" bgcolor="#98A1B2" align=center|<span style="color:white">'''Concorso Superenalotto n. #super-id di #dow {{subst:#expr:#giorno}} {{subst:#time:F|#anno-#mese-#giorno}} #anno'''</span>
|- style="background:#F5F5F5;"
!colspan="6"|Colonna vincente || Numero Jolly || SuperStar
|-
! #num-1 || #num-2 || #num-3 || #num-4 || #num-5 || #num-6 || #num-jolly || #num-superstar
|-
|}
 
==Montepremi e quote==
;Montepremi
* Concorso n. #super-id: #montepremi-parz euro
* Jackpot (riporto concorso precedente): #jackpot euro
* Montepremi totale: '''#montepremi-tot''' euro
 
;Quote Superenalotto
 
* ai "6": #punti-6# (#vincitori-punti-6# vincitori)
* ai "5+1": #punti-5+# (#vincitori-punti-5+# vincitori)
* ai "5": #punti-5# (#vincitori-punti-5# vincitori)
* ai "4": #punti-4# (#vincitori-punti-4# vincitori)
* ai "3": #punti-3# (#vincitori-punti-3# vincitori)
 
;Quote Superstar
 
* "5 stella": #5-stella# (#vincitori-5-stella# vincitori)
* "4 stella": #4-stella# (#vincitori-4-stella# vincitori)
* "3 stella": #3-stella# (#vincitori-3-stella# vincitori)
* "2 stella": #2-stella# (#vincitori-2-stella# vincitori)
* "1 stella": #1-stella# (#vincitori-1-stella# vincitori)
* "0 stella": #0-stella# (#vincitori-0-stella# vincitori)
 
==Fonti==
{{fonte
|autore=
|url=http://www.sisal.it/se/se_main/1,4136,se_RisultatiArch_#anno_#super-id_#super-id,00.html
|titolo=Concorso n. #super-id di #dow #giorno/#mese/#anno
|agenzia=Sisal
|data={{subst:#expr:#giorno}} {{subst:#time:F|#anno-#mese-#giorno}} #anno}}
 
{{pubblicato}}
 
[[Categoria:Europa]]
[[Categoria:Italia]]
[[Categoria:Giochi a premi]]
[[Categoria:Superenalotto]]
</pre>
 
== <tt>wikinews_meteo.py</tt> ==
Questo script aggiorna il meteo su [[Template:Pagina_principale/Secondo_piano/Meteo]].
 
<source lang="python">
#!/usr/bin/python
# -*- coding: utf-8 -*-
import wikipedia
import urllib2, datetime, re, codecs
 
codiciStazioni = [
'LIMG',
'LIEA',
'LIBA',
'LIQB',
'LIPA',
'LIBD',
'LIPB',
'LIBW',
'LIPE',
'LIPL',
'LIMK',
'LIBR',
'LIEE',
'LIMN',
'LIBS',
'LIEB',
'LIEC',
'LIEF',
'LIMU',
'LIQK',
'LICC',
'LICZ',
'LIPC',
'LIQJ',
'LICO',
'LIBC',
'LIED',
'LIVD',
'LIRX',
'LICE',
'LIPY',
'LIPF',
'LIRQ',
'LIEN',
'LIPK',
'LIVF',
'LIRH',
'LICL',
'LIMJ',
'LIBV',
'LIMQ',
'LIRM',
'LIRS',
'LIBG',
'LIRG',
'LIQC',
'LICD',
'LIRL',
'LIBU',
'LIBN',
'LIMZ',
'LIBH',
'LICF',
'LIML',
'LIMC',
'LIMY',
'LIQO',
'LIBE',
'LIBQ',
'LIRK',
'LIRN',
'LIEO',
'LIME',
'LIVP',
'LICP',
'LICJ',
'LICG',
'LIMP',
'LIMV',
'LIMT',
'LIVR',
'LIRZ',
'LIBP',
'LIMS',
'LIRP',
'LIQZ',
'LIBZ',
'LIRE',
'LICX',
'LIQR',
'LICR',
'LIPR',
'LIRA',
'LIRF',
'LIRU',
'LIPQ',
'LIBY',
'LIVE',
'LIQW',
'LIVO',
'LIBT',
'LIMF',
'LICT',
'LIRT',
'LIPS',
'LIPH',
'LIVT',
'LIPI',
'LICU',
'LIPZ',
'LIPX',
'LIPT',
'LIRB',
'LIRV',
'LIMH',
]
 
nd = "n.d."
 
def pageText(url):
request = urllib2.Request(url)
user_agent = 'BimBot/1.0'
request.add_header("User-Agent", user_agent)
response = urllib2.urlopen(request)
text = response.read()
response.close()
return text
def main():
args = wikipedia.handleArgs()
all = False
for currentArgument in args:
if currentArgument.startswith("-always"):
all = True
templateFile = codecs.open("modello_meteo.txt", "r", "utf-8")
modelloVoce = templateFile.read() # Legge il modello della pagina
templateFile.close()
urlo = "http://www.meteoam.it/modules/tempoInAtto/infoStazione.php?icao=%s"
replacements = {}
for i in codiciStazioni:
try:
htmlText = pageText(urlo % i)
except urllib2.HTTPError:
try:
wikipedia.output(u"Errore del server. Aspetto 10 secondi... " + time.strftime("%d %b %Y %H:%M:%S (UTC)", time.gmtime()) )
time.sleep(10)
htmlText = pageText(urlo)
except urllib2.HTTPError:
wikipedia.output(u"Errore del server. Chiudo.")
return
match = re.search('<div class="titolo">Informazioni meteorologiche/climatologiche per (.*?)</div>', htmlText)
nomeLocalita = unicode(match.group(1))
wikipedia.output(nomeLocalita + " (" + i + ")")
nuvoloMatch = re.search(u'<b>Nuvolosità</b></font></td>\s*<td.*?>\s*.*?\s*</td>\s*<td .*?>\s*<p .*?><img .*? alt\s*="(.*?)" .*?>\s*</td>', htmlText)
ventoMatch = re.search(u'<b>Vento</b></font></td>\s*<td.*?>\s*.*?\s*</td>\s*<td .*?>\s*<p .*?><img .*? alt\s*="Vento (.*?)( Direzione (.*?))?" .*?>\s*</td>', htmlText)
maxMatch = re.search(u'<td .*?>\s*<font .*?><b>Temperatura</b></font>\s*<p><font .*?><b>&nbsp;Max</b></font></td>\s*<td.*?>\s*.*?\s*</td>\s*<td .*?><b>\s*<font .*?>([+-]?\s*\d+)</font></b></td>', htmlText)
minMatch = re.search(u'<td .*?>\s*<font .*?><b>Temperatura</b></font>\s*<p><font .*?><b>&nbsp;Min</b></font></td>\s*<td.*?>\s*.*?\s*</td>\s*<td .*?><b>\s*<font .*?>([+-]?\s*\d+)</font></b></td>', htmlText)
if nuvoloMatch!=None:
replacements['#tempo-' + nomeLocalita + '#'] = iconaTempo(nuvoloMatch.group(1))
else:
replacements['#tempo-' + nomeLocalita + '#'] = nd
if ventoMatch!=None:
replacements['#intensita-' + nomeLocalita + '#'] = ventoMatch.group(1)
if ventoMatch.group(2)!=None:
replacements['#vento-' + nomeLocalita + '#'] = ventoMatch.group(3)
elif ventoMatch.group(2)==None and ventoMatch.group(1)=="variabile":
replacements['#vento-' + nomeLocalita + '#'] = "variabile"
replacements['#intensita-' + nomeLocalita + '#'] = "debole"
else:
replacements['#vento-' + nomeLocalita + '#'] = nd
else:
replacements['#vento-' + nomeLocalita + '#'] = nd
replacements['#intensita-' + nomeLocalita + '#'] = nd
if maxMatch!=None:
replacements['#max-' + nomeLocalita + '#'] = maxMatch.group(1)
else:
replacements['#max-' + nomeLocalita + '#'] = nd
if minMatch!=None:
replacements['#min-' + nomeLocalita + '#'] = minMatch.group(1)
else:
replacements['#min-' + nomeLocalita + '#'] = nd
nuovoTesto = massiveReplace(replacements, modelloVoce)
page = wikipedia.Page(wikipedia.Site('it', 'wikinews'), 'Template:Pagina principale/Secondo piano/Meteo')
vecchioTesto = page.get()
wikipedia.showDiff(vecchioTesto, nuovoTesto)
if not all:
choice = wikipedia.inputChoice(u"Modificare?", ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
else:
choice = 'y'
if choice in ['A', 'a']:
all = True
choice = 'y'
if choice in ['Y', 'y']:
page.put(nuovoTesto, u"Bot: Aggiorno meteo")
def massiveReplace(dict, text):
# Dato un testo ed un dizionario di sostituzioni, usa la funzione Python replace per il "find and replace"
for k in dict:
text = text.replace(k, dict[k])
return text
 
def iconaTempo(stringa):
if "Cielo sereno" in stringa:
return "{{Sereno}}"
elif "Cielo poco nuvoloso" in stringa:
return "{{PocoNuvoloso}}"
elif "Cielo nuvoloso" or "Cielo molto nuvoloso" in stringa:
return "{{Nuvoloso}}"
else:
return stringa
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()
</source>
 
=== <tt>modello_meteo.txt</tt> ===
<pre>
* [[Template:Pagina principale/Secondo piano/Meteo|Guarda le previsioni del tempo a questa pagina]]
* [[Portale:Meteo|Portale Meteo]]
* [[:Categoria:Meteo|Notizie sul meteo]]
<noinclude>
=== [[Previsioni del tempo per {{subst:#time:l j F Y|+1 day}}]] ===
=== Previsioni maggiori città italiane ===
<div style=float:left;>
#tempo-Ancona# [[w:Ancona|Ancona]]
 
#tempo-Pian Rosa# [[w:Aosta|Aosta]]
 
#tempo-Bari# [[w:Bari|Bari]]
 
#tempo-Bologna# [[w:Bologna|Bologna]]
 
#tempo-Bolzano# [[w:Bolzano|Bolzano]]
 
#tempo-Cagliari# [[w:Cagliari|Cagliari]]
 
#tempo-Campobasso# [[w:Campobasso|Campobasso]]
 
#tempo-Firenze# [[w:Firenze|Firenze]]
 
#tempo-Genova# [[w:Genova|Genova]]
 
#tempo-Milano# [[w:Milano|Milano]]
</div>
<div style=float:right;>
#tempo-Napoli# [[w:Napoli|Napoli]]
 
#tempo-Palermo# [[w:Palermo|Palermo]]
 
#tempo-Perugia S. Egidio# [[w:Perugia|Perugia]]
 
#tempo-Potenza# [[w:Potenza|Potenza]]
 
#tempo-Reggio Calabria# [[w:Reggio Calabria|Reggio Calabria]]
 
#tempo-Roma# [[w:Roma|Roma]]
 
#tempo-Torino# [[w:Torino|Torino]]
 
#tempo-Trieste# [[w:Trieste|Trieste]]
 
#tempo-Venezia# [[w:Venezia|Venezia]]
</div>
{{clear}}
 
===[[W:Italia nord-occidentale|Italia nord-occidentale]]===
{| border="2" cellpadding="4" width:95% cellspacing="0" class="sortable" style="margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;"
! bgcolor="efefef" | Località
! bgcolor="efefef" | Cielo
! bgcolor="efefef" | T. min (°C)
! bgcolor="efefef" | T. max (°C)
! bgcolor="efefef" | Vento
! bgcolor="efefef" | Intensità
|-
|[[w:Stazione metereologica di San Valentino alla Muta|San Valentino alla Muta]]
| #tempo-S. Valentino alla Muta (Passo Resia)#
| #min-S. Valentino alla Muta (Passo Resia)#
| #max-S. Valentino alla Muta (Passo Resia)#
| #vento-S. Valentino alla Muta (Passo Resia)#
| #intensita-S. Valentino alla Muta (Passo Resia)#
|-
|[[w:Stazione metereologica di Pian Rosa|Pian Rosa]]
| #tempo-Pian Rosa#
| #min-Pian Rosa#
| #max-Pian Rosa#
| #vento-Pian Rosa#
| #intensita-Pian Rosa#
|-
|[[w:Stazione metereologica di Bergamo Orio al Serio|Bergamo Orio al Serio]]
| #tempo-Orio al Serio (Bergamo)#
| #min-Orio al Serio (Bergamo)#
| #max-Orio al Serio (Bergamo)#
| #vento-Orio al Serio (Bergamo)#
| #intensita-Orio al Serio (Bergamo)#
|-
|[[w:Stazione metereologica di Novara Cameri|Novara Cameri]]
| #tempo-Cameri (Novara)#
| #min-Cameri (Novara)#
| #max-Cameri (Novara)#
| #vento-Cameri (Novara)#
| #intensita-Cameri (Novara)#
|-
|[[w:Stazione metereologica di Milano Malpensa|Milano Malpensa]]
| #tempo-Milano Malpensa#
| #min-Milano Malpensa#
| #max-Milano Malpensa#
| #vento-Milano Malpensa#
| #intensita-Milano Malpensa#
|-
|[[w:Stazione metereologica di Milano Linate|Milano Linate]]
| #tempo-Milano#
| #min-Milano#
| #max-Milano#
| #vento-Milano#
| #intensita-Milano#
|-
|[[w:Stazione metereologica di Brescia Ghedi|Brescia Ghedi]]
| #tempo-Brescia Ghedi#
| #min-Brescia Ghedi#
| #max-Brescia Ghedi#
| #vento-Brescia Ghedi#
| #intensita-Brescia Ghedi#
|-
|[[w:Stazione metereologica di Torino Caselle|Torino Caselle]]
| #tempo-Torino#
| #min-Torino#
| #max-Torino#
| #vento-Torino#
| #intensita-Torino#
|-
|[[w:Stazione metereologica di Torino Bric della Croce|Torino Bric della Croce]]
| #tempo-Bric Della Croce#
| #min-Bric Della Croce#
| #max-Bric Della Croce#
| #vento-Bric Della Croce#
| #intensita-Bric Della Croce#
|-
|[[w:Stazione metereologica di Cuneo Levaldigi|Cuneo Levaldigi]]
| #tempo-Levaldigi (Cuneo)#
| #min-Levaldigi (Cuneo)#
| #max-Levaldigi (Cuneo)#
| #vento-Levaldigi (Cuneo)#
| #intensita-Levaldigi (Cuneo)#
|-
|[[w:Stazione metereologica di Mondovì|Mondovì]]
| #tempo-Mondovi#
| #min-Mondovi#
| #max-Mondovi#
| #vento-Mondovi#
| #intensita-Mondovi#
|-
|[[w:Stazione metereologica di Govone|Govone]]
| #tempo-Govone#
| #min-Govone#
| #max-Govone#
| #vento-Govone#
| #intensita-Govone#
|-
|[[w:Stazione metereologica di Passo dei Giovi|Passo dei Giovi]]
| #tempo-Passo dei Giovi#
| #min-Passo dei Giovi#
| #max-Passo dei Giovi#
| #vento-Passo dei Giovi#
| #intensita-Passo dei Giovi#
|-
|[[w:Stazione metereologica di Genova-Sestri Ponente|Genova-Sestri Ponente]]
| #tempo-Genova#
| #min-Genova#
| #max-Genova#
| #vento-Genova#
| #intensita-Genova#
|-
|[[w:Stazione metereologica di Albenga|Albenga]]
| #tempo-Albenga#
| #min-Albenga#
| #max-Albenga#
| #vento-Albenga#
| #intensita-Albenga#
|-
|[[w:Stazione metereologica di Capo Mele|Capo Mele]]
| #tempo-Capo Mele#
| #min-Capo Mele#
| #max-Capo Mele#
| #vento-Capo Mele#
| #intensita-Capo Mele#
|-
|[[w:Stazione metereologica di Sarzana Luni|Sarzana Luni]]
| #tempo-Sarzana#
| #min-Sarzana#
| #max-Sarzana#
| #vento-Sarzana#
| #intensita-Sarzana#
|}
 
===[[W:Italia nord-orientale|Italia nord-orientale]]===
{| border="2" cellpadding="4" width:95% cellspacing="0" class="sortable" style="margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;"
! bgcolor="efefef" | Località
! bgcolor="efefef" | Cielo
! bgcolor="efefef" | T. min
! bgcolor="efefef" | T. max
! bgcolor="efefef" | Vento
! bgcolor="efefef" | Intensità
|-
|[[w:Stazione metereologica di Dobbiaco|Dobbiaco]]
| #tempo-Dobbiaco#
| #min-Dobbiaco#
| #max-Dobbiaco#
| #vento-Dobbiaco#
| #intensita-Dobbiaco#
|-
|[[w:Stazione metereologica di Bolzano|Bolzano]]
| #tempo-Bolzano#
| #min-Bolzano#
| #max-Bolzano#
| #vento-Bolzano#
| #intensita-Bolzano#
|-
|[[w:Stazione metereologica di Paganella|Paganella]]
| #tempo-Paganella#
| #min-Paganella#
| #max-Paganella#
| #vento-Paganella#
| #intensita-Paganella#
|-
|[[w:Stazione metereologica di Passo Rolle|Passo Rolle]]
| #tempo-Passo Rolle#
| #min-Passo Rolle#
| #max-Passo Rolle#
| #vento-Passo Rolle#
| #intensita-Passo Rolle#
|-
|[[w:Stazione metereologica di Tarvisio|Tarvisio]]
| #tempo-Tarvisio#
| #min-Tarvisio#
| #max-Tarvisio#
| #vento-Tarvisio#
| #intensita-Tarvisio#
|-
|[[w:Stazione metereologica di Aviano|Aviano]]
| #tempo-Aviano#
| #min-Aviano#
| #max-Aviano#
| #vento-Aviano#
| #intensita-Aviano#
|-
|[[w:Stazione metereologica di Udine Rivolto|Udine Rivolto]]
| #tempo-Udine Rivolto#
| #min-Udine Rivolto#
| #max-Udine Rivolto#
| #vento-Udine Rivolto#
| #intensita-Udine Rivolto#
|-
|[[w:Stazione metereologica di Trieste Ronchi dei Legionari|Trieste Ronchi dei Legionari]]
| #tempo-Ronchi dei Legionari#
| #min-Ronchi dei Legionari#
| #max-Ronchi dei Legionari#
| #vento-Ronchi dei Legionari#
| #intensita-Ronchi dei Legionari#
|-
|[[w:Stazione metereologica di Trieste Barcola|Trieste Barcola]]
| #tempo-Trieste#
| #min-Trieste#
| #max-Trieste#
| #vento-Trieste#
| #intensita-Trieste#
|-
|[[w:Stazione metereologica di Treviso Istrana|Treviso Istrana]]
| #tempo-Treviso Istrana#
| #min-Treviso Istrana#
| #max-Treviso Istrana#
| #vento-Treviso Istrana#
| #intensita-Treviso Istrana#
|-
|[[w:Stazione metereologica di Treviso Sant'Angelo|Treviso Sant'Angelo]]
| #tempo-Treviso S.Angelo#
| #min-Treviso S.Angelo#
| #max-Treviso S.Angelo#
| #vento-Treviso S.Angelo#
| #intensita-Treviso S.Angelo#
|-
|[[w:Stazione metereologica di Vicenza|Vicenza]]
| #tempo-Vicenza#
| #min-Vicenza#
| #max-Vicenza#
| #vento-Vicenza#
| #intensita-Vicenza#
|-
|[[w:Stazione metereologica di Venezia Tessera|Venezia Tessera]]
| #tempo-Venezia#
| #min-Venezia#
| #max-Venezia#
| #vento-Venezia#
| #intensita-Venezia#
|-
|[[w:Stazione metereologica di Verona Villafranca|Verona Villafranca]]
| #tempo-Verona Villafranca#
| #min-Verona Villafranca#
| #max-Verona Villafranca#
| #vento-Verona Villafranca#
| #intensita-Verona Villafranca#
|-
|[[w:Stazione metereologica di Piacenza San Damiano|Piacenza San Damiano]]
| #tempo-Piacenza#
| #min-Piacenza#
| #max-Piacenza#
| #vento-Piacenza#
| #intensita-Piacenza#
|-
|[[w:Stazione metereologica di Ferrara|Ferrara]]
| #tempo-Ferrara#
| #min-Ferrara#
| #max-Ferrara#
| #vento-Ferrara#
| #intensita-Ferrara#
|-
|[[w:Stazione metereologica di Parma|Parma]]
| #tempo-Parma#
| #min-Parma#
| #max-Parma#
| #vento-Parma#
| #intensita-Parma#
|-
|[[w:Stazione metereologica di Bologna Borgo Panigale|Bologna Borgo Panigale]]
| #tempo-Bologna#
| #min-Bologna#
| #max-Bologna#
| #vento-Bologna#
| #intensita-Bologna#
|-
|[[w:Stazione metereologica di Forlì|Forlì]]
| #tempo-Forli#
| #min-Forli#
| #max-Forli#
| #vento-Forli#
| #intensita-Forli#
|-
|[[w:Stazione metereologica di Cervia|Cervia]]
| #tempo-Cervia#
| #min-Cervia#
| #max-Cervia#
| #vento-Cervia#
| #intensita-Cervia#
|-
|[[w:Stazione metereologica di Rimini Miramare|Rimini Miramare]]
| #tempo-Rimini#
| #min-Rimini#
| #max-Rimini#
| #vento-Rimini#
| #intensita-Rimini#
|}
 
===[[W:Italia centrale|Italia centrale]]===
{| border="2" cellpadding="4" width:95% cellspacing="0" class="sortable" style="margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;"
! bgcolor="efefef" | Località
! bgcolor="efefef" | Cielo
! bgcolor="efefef" | T. min
! bgcolor="efefef" | T. max
! bgcolor="efefef" | Vento
! bgcolor="efefef" | Intensità
|-
|[[w:Stazione metereologica di Passo della Cisa|Passo della Cisa]]
| #tempo-Passo della Cisa#
| #min-Passo della Cisa#
| #max-Passo della Cisa#
| #vento-Passo della Cisa#
| #intensita-Passo della Cisa#
|-
|[[w:Stazione metereologica di Firenze Peretola|Firenze Peretola]]
| #tempo-Firenze#
| #min-Firenze#
| #max-Firenze#
| #vento-Firenze#
| #intensita-Firenze#
|-
|[[w:Stazione metereologica di Pisa San Giusto|Pisa San Giusto]]
| #tempo-Pisa S. Giusto#
| #min-Pisa S. Giusto#
| #max-Pisa S. Giusto#
| #vento-Pisa S. Giusto#
| #intensita-Pisa S. Giusto#
|-
|[[w:Stazione metereologica di Ancona Falconara|Ancona Falconara]]
| #tempo-Ancona#
| #min-Ancona#
| #max-Ancona#
| #vento-Ancona#
| #intensita-Ancona#
|-
|[[w:Stazione metereologica di Frontone|Frontone]]
| #tempo-Frontone#
| #min-Frontone#
| #max-Frontone#
| #vento-Frontone#
| #intensita-Frontone#
|-
|[[w:Stazione metereologica di Arezzo Molin Bianco|Arezzo Molin Bianco]]
| #tempo-Arezzo#
| #min-Arezzo#
| #max-Arezzo#
| #vento-Arezzo#
| #intensita-Arezzo#
|-
|[[w:Stazione metereologica di Perugia Sant'Egidio|Perugia Sant'Egidio]]
| #tempo-Perugia S. Egidio#
| #min-Perugia S. Egidio#
| #max-Perugia S. Egidio#
| #vento-Perugia S. Egidio#
| #intensita-Perugia S. Egidio#
|-
|[[w:Stazione metereologica di Radicofani|Radicofani]]
| #tempo-Radicofani#
| #min-Radicofani#
| #max-Radicofani#
| #vento-Radicofani#
| #intensita-Radicofani#
|-
|[[w:Stazione metereologica di Elba-Monte Calamita|Elba-Monte Calamita]]
| #tempo-Elba M. Calamita#
| #min-Elba M. Calamita#
| #max-Elba M. Calamita#
| #vento-Elba M. Calamita#
| #intensita-Elba M. Calamita#
|-
|[[w:Stazione metereologica di Grosseto Aeroporto|Grosseto Aeroporto]]
| #tempo-Grosseto#
| #min-Grosseto#
| #max-Grosseto#
| #vento-Grosseto#
| #intensita-Grosseto#
|-
|[[w:Stazione metereologica di Monte Argentario|Monte Argentario]]
| #tempo-Monte Argentario#
| #min-Monte Argentario#
| #max-Monte Argentario#
| #vento-Monte Argentario#
| #intensita-Monte Argentario#
|-
|[[w:Stazione metereologica di Viterbo|Viterbo]]
| #tempo-Viterbo#
| #min-Viterbo#
| #max-Viterbo#
| #vento-Viterbo#
| #intensita-Viterbo#
|-
|[[w:Stazione metereologica di Monte Terminillo|Monte Terminillo]]
| #tempo-Monte Terminillo#
| #min-Monte Terminillo#
| #max-Monte Terminillo#
| #vento-Monte Terminillo#
| #intensita-Monte Terminillo#
|-
|[[w:Stazione metereologica di Pescara Aeroporto|Pescara Aeroporto]]
| #tempo-Pescara#
| #min-Pescara#
| #max-Pescara#
| #vento-Pescara#
| #intensita-Pescara#
|-
|[[w:Stazione metereologica di Civitavecchia|Civitavecchia]]
| #tempo-Civitavecchia#
| #min-Civitavecchia#
| #max-Civitavecchia#
| #vento-Civitavecchia#
| #intensita-Civitavecchia#
|-
|[[w:Stazione metereologica di Bracciano Vigna di Valle|Bracciano Vigna di Valle]]
| #tempo-Vigna di Valle#
| #min-Vigna di Valle#
| #max-Vigna di Valle#
| #vento-Vigna di Valle#
| #intensita-Vigna di Valle#
|-
|[[w:Stazione metereologica di Guidonia Montecelio|Guidonia Montecelio]]
| #tempo-Guidonia#
| #min-Guidonia#
| #max-Guidonia#
| #vento-Guidonia#
| #intensita-Guidonia#
|-
|[[w:Stazione metereologica di Roma Urbe|Roma Urbe]]
| #tempo-Roma Urbe#
| #min-Roma Urbe#
| #max-Roma Urbe#
| #vento-Roma Urbe#
| #intensita-Roma Urbe#
|-
|[[w:Stazione metereologica di Roma Fiumicino|Roma Fiumicino]]
| #tempo-Roma Fiumicino#
| #min-Roma Fiumicino#
| #max-Roma Fiumicino#
| #vento-Roma Fiumicino#
| #intensita-Roma Fiumicino#
|-
|[[w:Stazione metereologica di Roma Ciampino|Roma Ciampino]]
| #tempo-Roma#
| #min-Roma#
| #max-Roma#
| #vento-Roma#
| #intensita-Roma#
|-
|[[w:Stazione metereologica di Pratica di Mare|Pratica di Mare]]
| #tempo-Pratica di Mare#
| #min-Pratica di Mare#
| #max-Pratica di Mare#
| #vento-Pratica di Mare#
| #intensita-Pratica di Mare#
|-
|[[w:Stazione metereologica di Frosinone|Frosinone]]
| #tempo-Frosinone#
| #min-Frosinone#
| #max-Frosinone#
| #vento-Frosinone#
| #intensita-Frosinone#
|-
|[[w:Stazione metereologica di Latina Aeroporto|Latina Aeroporto]]
| #tempo-Latina#
| #min-Latina#
| #max-Latina#
| #vento-Latina#
| #intensita-Latina#
|-
|[[w:Stazione metereologica di Ponza|Ponza]]
| #tempo-Ponza#
| #min-Ponza#
| #max-Ponza#
| #vento-Ponza#
| #intensita-Ponza#
|}
 
===[[W:Italia meridionale|Italia meridionale]]===
{| border="2" cellpadding="4" width:95% cellspacing="0" class="sortable" style="margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;"
! bgcolor="efefef" | Località
! bgcolor="efefef" | Cielo
! bgcolor="efefef" | T. min
! bgcolor="efefef" | T. max
! bgcolor="efefef" | Vento
! bgcolor="efefef" | Intensità
|-
|[[w:Stazione metereologica di Termoli|Termoli]]
| #tempo-Termoli#
| #min-Termoli#
| #max-Termoli#
| #vento-Termoli#
| #intensita-Termoli#
|-
|[[w:Stazione metereologica di Campobasso|Campobasso]]
| #tempo-Campobasso#
| #min-Campobasso#
| #max-Campobasso#
| #vento-Campobasso#
| #intensita-Campobasso#
|-
|[[w:Stazione metereologica di Monte Sant'Angelo|Monte Sant'Angelo]]
| #tempo-Monte S. Angelo#
| #min-Monte S. Angelo#
| #max-Monte S. Angelo#
| #vento-Monte S. Angelo#
| #intensita-Monte S. Angelo#
|-
|[[w:Stazione metereologica di Foggia Amendola|Foggia Amendola]]
| #tempo-Amendola#
| #min-Amendola#
| #max-Amendola#
| #vento-Amendola#
| #intensita-Amendola#
|-
|[[w:Stazione metereologica di Grazzanise|Grazzanise]]
| #tempo-Grazzanise#
| #min-Grazzanise#
| #max-Grazzanise#
| #vento-Grazzanise#
| #intensita-Grazzanise#
|-
|[[w:Stazione metereologica di Napoli Capodichino|Napoli Capodichino]]
| #tempo-Napoli#
| #min-Napoli#
| #max-Napoli#
| #vento-Napoli#
| #intensita-Napoli#
|-
|[[w:Stazione metereologica di Trevico|Trevico]]
| #tempo-Trevico#
| #min-Trevico#
| #max-Trevico#
| #vento-Trevico#
| #intensita-Trevico#
|-
|[[w:Stazione metereologica di Bari Palese|Bari Palese]]
| #tempo-Bari#
| #min-Bari#
| #max-Bari#
| #vento-Bari#
| #intensita-Bari#
|-
|[[w:Stazione metereologica di Gioia del Colle|Gioia del Colle]]
| #tempo-Gioia del Colle#
| #min-Gioia del Colle#
| #max-Gioia del Colle#
| #vento-Gioia del Colle#
| #intensita-Gioia del Colle#
|-
|[[w:Stazione metereologica di Capri|Capri]]
| #tempo-Isola di Capri#
| #min-Isola di Capri#
| #max-Isola di Capri#
| #vento-Isola di Capri#
| #intensita-Isola di Capri#
|-
|[[w:Stazione metereologica di Capo Palinuro|Capo Palinuro]]
| #tempo-Capo Palinuro#
| #min-Capo Palinuro#
| #max-Capo Palinuro#
| #vento-Capo Palinuro#
| #intensita-Capo Palinuro#
|-
|[[w:Stazione metereologica di Potenza|Potenza]]
| #tempo-Potenza#
| #min-Potenza#
| #max-Potenza#
| #vento-Potenza#
| #intensita-Potenza#
|-
|[[w:Stazione metereologica di Marina di Ginosa|Marina di Ginosa]]
| #tempo-Marina di Ginosa#
| #min-Marina di Ginosa#
| #max-Marina di Ginosa#
| #vento-Marina di Ginosa#
| #intensita-Marina di Ginosa#
|-
|[[w:Stazione metereologica di Grottaglie|Grottaglie]]
| #tempo-Grottaglie#
| #min-Grottaglie#
| #max-Grottaglie#
| #vento-Grottaglie#
| #intensita-Grottaglie#
|-
|[[w:Stazione metereologica di Brindisi|Brindisi]]
| #tempo-Brindisi#
| #min-Brindisi#
| #max-Brindisi#
| #vento-Brindisi#
| #intensita-Brindisi#
|-
|[[w:Stazione metereologica di Lecce Galatina|Lecce Galatina]]
| #tempo-Lecce#
| #min-Lecce#
| #max-Lecce#
| #vento-Lecce#
| #intensita-Lecce#
|-
|[[w:Stazione metereologica di Santa Maria di Leuca|Santa Maria di Leuca]]
| #tempo-S. Maria di Leuca#
| #min-S. Maria di Leuca#
| #max-S. Maria di Leuca#
| #vento-S. Maria di Leuca#
| #intensita-S. Maria di Leuca#
|-
|[[w:Stazione metereologica di Latronico|Latronico]]
| #tempo-Latronico#
| #min-Latronico#
| #max-Latronico#
| #vento-Latronico#
| #intensita-Latronico#
|-
|[[w:Stazione metereologica di Bonifati|Bonifati]]
| #tempo-Bonifati#
| #min-Bonifati#
| #max-Bonifati#
| #vento-Bonifati#
| #intensita-Bonifati#
|-
|[[w:Stazione metereologica di Monte Scuro|Monte Scuro]]
| #tempo-Monte Scuro#
| #min-Monte Scuro#
| #max-Monte Scuro#
| #vento-Monte Scuro#
| #intensita-Monte Scuro#
|-
|[[w:Stazione metereologica di Crotone Isola di Capo Rizzuto|Crotone Isola di Capo Rizzuto]]
| #tempo-Crotone#
| #min-Crotone#
| #max-Crotone#
| #vento-Crotone#
| #intensita-Crotone#
|-
|[[w:Stazione metereologica di Reggio Calabria|Reggio Calabria]]
| #tempo-Reggio Calabria#
| #min-Reggio Calabria#
| #max-Reggio Calabria#
| #vento-Reggio Calabria#
| #intensita-Reggio Calabria#
|}
 
===[[W:Italia insulare|Italia insulare]]===
{| border="2" cellpadding="4" width:95% cellspacing="0" class="sortable" style="margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;"
! bgcolor="efefef" | Località
! bgcolor="efefef" | Cielo
! bgcolor="efefef" | T. min
! bgcolor="efefef" | T. max
! bgcolor="efefef" | Vento
! bgcolor="efefef" | Intensità
|-
|[[w:Stazione metereologica di Olbia|Olbia]]
| #tempo-Olbia#
| #min-Olbia#
| #max-Olbia#
| #vento-Olbia#
| #intensita-Olbia#
|-
|[[w:Stazione metereologica di Alghero Fertilia|Alghero Fertilia]]
| #tempo-Alghero#
| #min-Alghero#
| #max-Alghero#
| #vento-Alghero#
| #intensita-Alghero#
|-
|[[w:Stazione metereologica di Fonni|Fonni]]
| #tempo-Fonni#
| #min-Fonni#
| #max-Fonni#
| #vento-Fonni#
| #intensita-Fonni#
|-
|[[w:Stazione metereologica di Capo Bellavista|Capo Bellavista]]
| #tempo-Capo Bellavista#
| #min-Capo Bellavista#
| #max-Capo Bellavista#
| #vento-Capo Bellavista#
| #intensita-Capo Bellavista#
|-
|[[w:Stazione metereologica di Capo Frasca|Capo Frasca]]
| #tempo-Capo Frasca#
| #min-Capo Frasca#
| #max-Capo Frasca#
| #vento-Capo Frasca#
| #intensita-Capo Frasca#
|-
|[[w:Stazione metereologica di Decimomannu|Decimomannu]]
| #tempo-Decimomannu#
| #min-Decimomannu#
| #max-Decimomannu#
| #vento-Decimomannu#
| #intensita-Decimomannu#
|-
|[[w:Stazione metereologica di Cagliari Elmas|Cagliari Elmas]]
| #tempo-Cagliari#
| #min-Cagliari#
| #max-Cagliari#
| #vento-Cagliari#
| #intensita-Cagliari#
|-
|[[w:Stazione metereologica di Capo Carbonara|Capo Carbonara]]
| #tempo-Capo Carbonara#
| #min-Capo Carbonara#
| #max-Capo Carbonara#
| #vento-Capo Carbonara#
| #intensita-Capo Carbonara#
|-
|[[w:Stazione metereologica di Ustica|Ustica]]
| #tempo-Ustica#
| #min-Ustica#
| #max-Ustica#
| #vento-Ustica#
| #intensita-Ustica#
|-
|[[w:Stazione metereologica di Trapani Birgi|Trapani Birgi]]
| #tempo-Trapani#
| #min-Trapani#
| #max-Trapani#
| #vento-Trapani#
| #intensita-Trapani#
|-
|[[w:Stazione metereologica di Palermo Punta Raisi|Palermo Punta Raisi]]
| #tempo-Palermo#
| #min-Palermo#
| #max-Palermo#
| #vento-Palermo#
| #intensita-Palermo#
|-
|[[w:Stazione metereologica di Palermo Boccadifalco|Palermo Boccadifalco]]
| #tempo-Palermo Boccadifalco#
| #min-Palermo Boccadifalco#
| #max-Palermo Boccadifalco#
| #vento-Palermo Boccadifalco#
| #intensita-Palermo Boccadifalco#
|-
|[[w:Stazione metereologica di Messina|Messina]]
| #tempo-Messina#
| #min-Messina#
| #max-Messina#
| #vento-Messina#
| #intensita-Messina#
|-
|[[w:Stazione metereologica di Prizzi|Prizzi]]
| #tempo-Prizzi#
| #min-Prizzi#
| #max-Prizzi#
| #vento-Prizzi#
| #intensita-Prizzi#
|-
|[[w:Stazione metereologica di Enna|Enna]]
| #tempo-Enna#
| #min-Enna#
| #max-Enna#
| #vento-Enna#
| #intensita-Enna#
|-
|[[w:Stazione metereologica di Catania Fontanarossa|Catania Fontanarossa]]
| #tempo-Catania Fontana Rossa#
| #min-Catania Fontana Rossa#
| #max-Catania Fontana Rossa#
| #vento-Catania Fontana Rossa#
| #intensita-Catania Fontana Rossa#
|-
|[[w:Stazione metereologica di Catania Sigonella|Catania Sigonella]]
| #tempo-Catania Sigonella#
| #min-Catania Sigonella#
| #max-Catania Sigonella#
| #vento-Catania Sigonella#
| #intensita-Catania Sigonella#
|-
|[[w:Stazione metereologica di Gela|Gela]]
| #tempo-Gela#
| #min-Gela#
| #max-Gela#
| #vento-Gela#
| #intensita-Gela#
|-
|[[w:Stazione metereologica di Cozzo Spadaro|Cozzo Spadaro]]
| #tempo-Cozzo Spadaro#
| #min-Cozzo Spadaro#
| #max-Cozzo Spadaro#
| #vento-Cozzo Spadaro#
| #intensita-Cozzo Spadaro#
|-
|[[w:Stazione metereologica di Pantelleria|Pantelleria]]
| #tempo-Pantelleria#
| #min-Pantelleria#
| #max-Pantelleria#
| #vento-Pantelleria#
| #intensita-Pantelleria#
|-
|[[w:Stazione metereologica di Lampedusa|Lampedusa]]
| #tempo-Lampedusa#
| #min-Lampedusa#
| #max-Lampedusa#
| #vento-Lampedusa#
| #intensita-Lampedusa#
|}
 
==Fonti==
{{fonte
|autore=
|url=http://www.meteoam.it/modules.php?name=previsioneTempo&giorni=2&arancio=1
|titolo=Previsione per il {{subst:#time:d-m-Y|+1 day}}
|agenzia=Meteoam.it
|data={{subst:LOCALDAY}} {{subst:LOCALMONTHNAME}} {{subst:LOCALYEAR}} ore {{subst:LOCALTIME}}
}}
</noinclude>
</pre>
 
== <tt>wikinews_palinsesto2.py</tt> ==
Questo script serve per aggiornare il [[Template:ProgrammiTV|palinsesto TV]].
 
<source lang="python">
#!/usr/bin/python
# -*- coding: utf-8 -*-
import wikipedia
import urllib2, re, codecs
 
def pageText(url):
request = urllib2.Request(url)
user_agent = 'BimBot/1.0'
request.add_header("User-Agent", user_agent)
response = urllib2.urlopen(request)
text = response.read()
response.close()
return text
def main():
args = wikipedia.handleArgs()
all = False
for currentArgument in args:
if currentArgument.startswith("-always"):
all = True
templateFile = codecs.open("modello_palinsesto2.txt", "r", "utf-8")
modelloVoce = templateFile.read() # Legge il modello della pagina
templateFile.close()
pags = {
'rai1': 'Rai 1',
'rai2': 'Rai 2',
'rai3': 'Rai 3',
'rete4': 'Rete 4',
'can5': 'Canale 5',
'ita1': 'Italia 1',
'la7': 'La7',
'mtv': 'MTV',
'retea': 'All Music',
}
pagineHtml = {}
elencoSostituzioni = {}
urlBase = 'http://tv.lospettacolo.it/canale.asp?miopar=%s_0'
for i in pags:
urlo = urlBase % i
print urlo
wikipedia.output(u'Prendo la pagina dal server...')
try:
pagineHtml[i] = pageText(urlo)
except urllib2.HTTPError:
try:
wikipedia.output(u"Errore del server. Aspetto 10 secondi... " + time.strftime("%d %b %Y %H:%M:%S (UTC)", time.gmtime()) )
time.sleep(10)
pagineHtml[i] = pageText(urlo)
except urllib2.HTTPError:
wikipedia.output(u"Errore del server. Chiudo.")
return
elencoSostituzioni['#programmi'] = getProgramList(pagineHtml[i])
elencoSostituzioni['#rete'] = pags[i]
newtext = massiveReplace(elencoSostituzioni, modelloVoce)
page = wikipedia.Page(wikipedia.getSite(code='it', fam='wikinews'), "Template:ProgrammiTV/" + pags[i])
wikipedia.output(">>>>> " + page.title() + " <<<<<")
if page.exists():
oldtext = page.get()
else:
oldtext = ""
wikipedia.showDiff(oldtext, newtext)
if not all:
choice = wikipedia.inputChoice(u"Modificare?", ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
else:
choice = 'y'
if choice in ['A', 'a']:
all = True
choice = 'y'
if choice in ['Y', 'y']:
page.put(newtext, u"Bot: Aggiorno palinsesto TV")
page = wikipedia.Page(wikipedia.getSite(code='it', fam='wikinews'), "Template:ProgrammiTV")
wikipedia.output(">>>>> " + page.title() + " <<<<<")
oldtext = page.get()
newtext = re.sub("<!-- @@BOT_DATE_BEGIN@@ -->.*?<!-- @@BOT_DATE_END@@ -->", "<!-- @@BOT_DATE_BEGIN@@ -->{{subst:#time:H:i, l j F Y|{{subst:LOCALTIMESTAMP}}}}<!-- @@BOT_DATE_END@@ -->", oldtext)
wikipedia.showDiff(oldtext, newtext)
if not all:
choice = wikipedia.inputChoice(u"Modificare?", ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
else:
choice = 'y'
if choice in ['A', 'a']:
all = True
choice = 'y'
if choice in ['Y', 'y']:
page.put(newtext, u"Bot: Aggiorno palinsesto TV")
def massiveReplace(dict, text):
# Dato un testo ed un dizionario di sostituzioni, usa la funzione string.replace per il "find and replace"
for k in dict:
text = text.replace(k, dict[k])
return text
 
def getProgramList(htmlText):
rawList = re.findall("<p class='cellatv'>\s*h: <b>(\d+:\d+)</b>\s*-\s*(.*?) <b>(<[Aa].*?>)?(.*?)(</[Aa]>)?</b><br />(.*?)(<br>)?\s*</p>", htmlText)
programList = u''
for i in rawList:
programList += '|- style="{{ColoriTV|' + unicode(i[1], 'latin-1') + '}}" |\n|' + unicode(i[0], 'latin-1') + '\n| style="font-size:smaller;" |' + unicode(i[1], 'latin-1') + '\n|' + unicode(i[3], 'latin-1')
if i[5]!='':
programList += '<br /><small>' + unicode(i[5], 'latin-1') + '</small>'
programList += '\n'
return programList
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()
</source>
 
=== <tt>modello_palinsesto2.txt</tt> ===
<pre>
{| border="1" cellspacing="0" cellpadding="3" style="border:1px solid black; border-collapse:collapse;"
! colspan="3" style="font-size:200%; line-height:1;" | #rete
|-
!Ora
!Tipo
!Nome
#programmi
|}
<noinclude>
{{NavigazioneTV}}
 
Il palinsesto è preso da [http://tv.lospettacolo.it/home.asp LoSpettacolo.it]. Ultimo aggiornamento: {{subst:#time:H:i, l j F Y|{{subst:LOCALTIMESTAMP}}}}.
</noinclude>
</pre>
 
== <tt>totocalcio.py</tt> ==
<source lang="python">
#!/usr/bin/python
# -*- coding: utf-8 -*-
import wikipedia
import urllib2, re, time, codecs
 
def pageText(url):
request = urllib2.Request(url)
user_agent = 'BimBot/1.0'
request.add_header("User-Agent", user_agent)
response = urllib2.urlopen(request)
text = response.read()
response.close()
return text
def main():
args = wikipedia.handleArgs()
all = False
for currentArgument in args:
if currentArgument.startswith("-always"):
all = True
templateFile = codecs.open("modello_totocalcio.txt", "r", "utf-8")
modelloVoce = templateFile.read() # Legge il modello della pagina
templateFile.close()
urlo = "http://www.calcio.sisal.it/pages/totocalcio/ultimo.xwb"
wikipedia.output(u'Prendo la pagina dal server...')
try:
htmlText = pageText(urlo)
except urllib2.HTTPError:
try:
wikipedia.output(u"Errore del server. Aspetto 10 secondi... " + time.strftime("%d %b %Y %H:%M:%S (UTC)", time.gmtime()) )
time.sleep(10)
htmlText = pageText(urlo)
except urllib2.HTTPError:
wikipedia.output(u"Errore del server. Chiudo.")
return
concorso = re.search("<h2>Concorso n. (\d+) di (.*?) (\d+) (.*?) (\d+)</h2>", htmlText)
montepremi = re.search("<tr>\s*<th.*?>Il Montepremi</th>\s*</tr>\s*<tr>\s*<TD.*?>\s*Del Concorso \(premi a punteggio\)\s*</TD>\s*<TD>\s*EUR\s*</TD>\s*<TD>\s*(.*?)\s*</TD>\s*</tr>\s*<tr>\s*<TD.*?>\s*Riporto Jackpot conc\. precedente\s*</TD>\s*<TD>\s*EUR\s*</TD>\s*<TD.*?>\s*(.*?)\s*</TD>\s*</tr>\s*<tr\s*>\s*<TD.*?>\s*Montepremi totale del concorso\s*</TD>\s*<TD>\s*EUR\s*</TD>\s*<TD.*?>\s*(.*?)\s*</TD>\s*</tr>", htmlText)
montepremi9 = re.search("<tr>\s*<th.*?>Il Montepremi \"Il9\"</th>\s*</tr>\s*<tr>\s*<TD.*?>\s*Del Concorso \(premi a punteggio\)\s*</TD>\s*<TD>\s*EUR\s*</TD>\s*<TD>\s*(.*?)\s*</TD>\s*</tr>\s*<tr>\s*<TD.*?>\s*Riporto Jackpot conc\. precedente\s*</TD>\s*<TD>\s*EUR\s*</TD>\s*<TD.*?>\s*(.*?)\s*</TD>\s*</tr>\s*<tr>\s*<TD.*?>\s*Montepremi totale del concorso 9\s*</TD>\s*<TD>\s*EUR\s*</td>\s*<TD.*?>\s*(.*?)\s*</TD>\s*</tr>", htmlText)
bloccoQuote = "<tr>\s*<td>\s*(.*?)\s*</td>\s*<td>\"%s\"</td>\s*<td.*?>\s*(.*?)\s*</td>\s*</tr>"
bloccoPartita = "<tr>\s*<td.*?>\s*<b>\s*%s\s*</b>\s*</td>\s*<td.*?>\s*(.*?)\s*</td>\s*<td.*?>\s*(.*?)\s*</td>\s*<td.*?>\s*<b>\s*(\d+) - (\d+)&nbsp;\s*</b>\s*</td>\s*<td.*?>\s*<b>\s*(.*?)&nbsp;\s*</b>\s*</td>\s*</tr>"
jackpotFuturi = re.search("<table.*?>\s*<tr>\s*<th.*?>\s*Jackpot prossimo concorso\s*</th>\s*</tr>\s*<tr>\s*<th.*?>.*?</th>\s*</tr>\s*<tr>\s*<td.*?><h2><b>14</b></h2></td>\s*<td.*?><h1>(.*?)<font.*?>.*?</font></h1></td>\s*</tr>\s*<tr>\s*<td.*?><h2><b>9</b></h2></td>\s*<td.*?><h1>(.*?)<font.*?>.*?</font></h1></td>\s*</tr>\s*</table>", htmlText)
page = wikipedia.Page(wikipedia.getSite(code='it', fam='wikinews'), "Italia: concorso n. " + concorso.group(1) + "/" + concorso.group(5) + " del Totocalcio")
if page.exists():
wikipedia.output("Nessuna nuova estrazione. Mi fermo.")
return
elencoSostituzioni = { # Sostituisce le variabili nel modello
'#super-id': concorso.group(1),
'#dow': concorso.group(2).replace('&igrave;', u'ì'),
'#giorno': concorso.group(3),
'#mese': concorso.group(4),
'#anno': concorso.group(5),
'#montepremi-parz': montepremi.group(1),
'#jackpot': montepremi.group(2),
'#montepremi-tot': montepremi.group(3),
'#futuro-jackpot': jackpotFuturi.group(1),
'#9-montepremi-parz': montepremi9.group(1),
'#9-jackpot': montepremi9.group(2),
'#9-montepremi-tot': montepremi9.group(3),
'#9-futuro-jackpot': jackpotFuturi.group(2),
}
partite = range(1, 15)
for p in partite:
match = re.search(bloccoPartita % p, htmlText, re.DOTALL)
elencoSostituzioni['#sq-' + str(p) + 'a'] = match.group(1).capitalize()
elencoSostituzioni['#sq-' + str(p) + 'b'] = match.group(2).capitalize()
elencoSostituzioni['#res-' + str(p) + 'a'] = match.group(3)
elencoSostituzioni['#res-' + str(p) + 'b'] = match.group(4)
elencoSostituzioni['#ok-' + str(p)] = match.group(5)
quotes = [9, 12, 13, 14]
for c in quotes:
match = re.search(bloccoQuote % c, htmlText)
elencoSostituzioni['#vincitori-' + str(c)] = match.group(1).replace('nessuna', '0')
elencoSostituzioni['#euro-' + str(c)] = match.group(2).replace('-', '0')
nuovoTesto = massiveReplace(elencoSostituzioni, modelloVoce)
#page = wikipedia.Page(wikipedia.getSite(code='it', fam='wikinews'), "Utente:BimBot/Sandbox") #DEBUG
wikipedia.output(">>>>> " + page.title() + " <<<<<")
wikipedia.showDiff('', nuovoTesto)
if not all:
choice = wikipedia.inputChoice(u"Modificare?", ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
else:
choice = 'y'
if choice in ['A', 'a']:
all = True
choice = 'y'
if choice in ['Y', 'y']:
page.put(nuovoTesto, u"Bot: Inserisco nuova estrazione del Totocalcio")
 
def massiveReplace(dict, text):
# Dato un testo ed un dizionario di sostituzioni, usa le regex per il "find and replace"
for k in dict:
text = re.sub(k, dict[k], text)
return text
 
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()
</source>
 
=== <tt>modello_totocalcio.txt</tt> ===
<pre>
{{data|#giorno #mese #anno|#dow}}
__NOTOC__
 
{| {{prettytable|align=center|text-align=center}}
|-
!colspan=6; style="background:#98A1B2;"|<span style="color:white">Totocalcio concorso n. #super-id di #dow #giorno #mese #anno</span>
|-
|width=20px;|1
|width=120px;|#sq-1a
|width=120px;|#sq-1b
|width=20px;|#res-1a
|width=20px;|#res-1b
!width=20px;|#ok-1
|-
|width=20px;|2
|width=120px;|#sq-2a
|width=120px;|#sq-2b
|width=20px;|#res-2a
|width=20px;|#res-2b
!width=20px;|#ok-2
|-
|width=20px;|3
|width=120px;|#sq-3a
|width=120px;|#sq-3b
|width=20px;|#res-3a
|width=20px;|#res-3b
!width=20px;|#ok-3
|-
|width=20px;|4
|width=120px;|#sq-4a
|width=120px;|#sq-4b
|width=20px;|#res-4a
|width=20px;|#res-4b
!width=20px;|#ok-4
|-
|width=20px;|5
|width=120px;|#sq-5a
|width=120px;|#sq-5b
|width=20px;|#res-5a
|width=20px;|#res-5b
!width=20px;|#ok-5
|-
|width=20px;|6
|width=120px;|#sq-6a
|width=120px;|#sq-6b
|width=20px;|#res-6a
|width=20px;|#res-6b
!width=20px;|#ok-6
|-
|width=20px;|7
|width=120px;|#sq-7a
|width=120px;|#sq-7b
|width=20px;|#res-7a
|width=20px;|#res-7b
!width=20px;|#ok-7
|-
|width=20px;|8
|width=120px;|#sq-8a
|width=120px;|#sq-8b
|width=20px;|#res-8a
|width=20px;|#res-8b
!width=20px;|#ok-8
|-
|width=20px;|9
|width=120px;|#sq-9a
|width=120px;|#sq-9b
|width=20px;|#res-9a
|width=20px;|#res-9b
!width=20px;|#ok-9
|-style="background:#D0FFD0;"
|width=20px;|10
|width=120px;|#sq-10a
|width=120px;|#sq-10b
|width=20px;|#res-10a
|width=20px;|#res-10b
!width=20px;|#ok-10
|-style="background:#D0FFD0;"
|width=20px;|11
|width=120px;|#sq-11a
|width=120px;|#sq-11b
|width=20px;|#res-11a
|width=20px;|#res-11b
!width=20px;|#ok-11
|-style="background:#D0FFD0;"
|width=20px;|12
|width=120px;|#sq-12a
|width=120px;|#sq-12b
|width=20px;|#res-12a
|width=20px;|#res-12b
!width=20px;|#ok-12
|-style="background:#D0FFD0;"
|width=20px;|13
|width=120px;|#sq-13a
|width=120px;|#sq-13b
|width=20px;|#res-13a
|width=20px;|#res-13b
!width=20px;|#ok-13
|-style="background:#D0FFD0;"
|width=20px;|14
|width=120px;|#sq-14a
|width=120px;|#sq-14b
|width=20px;|#res-14a
|width=20px;|#res-14b
!width=20px;|#ok-14
|-
|}
 
==Montepremi==
* Concorso n. #super-id: #montepremi-parz euro
* Jackpot (riporto concorso precedente): #jackpot euro
* Montepremi totale: '''#montepremi-tot''' euro
* Jackpot prossimo concorso: #futuro-jackpot euro
 
===Quote===
* n. 14: #euro-14 euro (#vincitori-14 vincitori)
* n. 13: #euro-13 euro (#vincitori-13 vincitori)
* n. 12: #euro-12 euro (#vincitori-12 vincitori)
 
==Montepremi "Il 9"==
* Concorso n. #super-id: #9-montepremi-parz euro
* Jackpot (riporto concorso precedente): #9-jackpot euro
* Montepremi totale: '''#9-montepremi-tot''' euro
* Jackpot prossimo concorso: #9-futuro-jackpot euro
 
===Quote===
* n. 9: #euro-9 euro (#vincitori-9 vincitori)
 
==Fonti==
{{fonte
|autore=
|url=http://www.calcio.sisal.it/pages/totocalcio/dettaglio_archivio.xwb?expandId=1373&CONCORSO=#super-id&ANNO=#anno
|titolo=Concorso n. #super-id di #dow #giorno #mese #anno
|agenzia=Sisal
|data=#giorno #mese #anno}}
 
{{pubblicato}}
 
[[Categoria:Europa]]
[[Categoria:Italia]]
[[Categoria:Giochi a premi]]
[[Categoria:Totocalcio]]
</pre>