Utente:BimBot/Scripts
Gli script sono disponibili sul repository SVN del Toolserver.
elezioni.py
modificaLo script usato per aggiornare live i risultati delle elezioni di aprile 2008.
#!/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
templateSenato = codecs.open("modello_elezioni_senato.txt", "r", "utf-8")
modelloSenato = templateSenato.read() # Legge il modello della pagina
templateSenato.close()
templateCamera = codecs.open("modello_elezioni_camera.txt", "r", "utf-8")
modelloCamera = templateCamera.read() # Legge il modello della pagina
templateCamera.close()
now = datetime.datetime.utcnow()
urloSenato = "http://politiche2008.interno.it/politiche/senato080413/S000000000.htm"
#urloSenato = "http://localhost/~pietro/senato.html"
wikipedia.output(u'Prendo la pagina dal server...')
try:
senatoText = pageText(urloSenato)
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)
senatoText = pageText(urloSenato)
except urllib2.HTTPError:
wikipedia.output(u"Errore del server. Chiudo.")
return
urloCamera = "http://politiche2008.interno.it/politiche/camera080413/C000000000.htm"
#urloCamera = "http://localhost/~pietro/camera.html"
wikipedia.output(u'Prendo la pagina dal server...')
try:
cameraText = pageText(urloCamera)
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)
cameraText = pageText(urloCamera)
except urllib2.HTTPError:
wikipedia.output(u"Errore del server. Chiudo.")
return
bloccoTipo = "<th class=\"datotxt\" id=\".*?\" headers=\".*?\">%s</th>\s+<td class=\"datonum\" headers=\".*?\">(.*?)</td>\s+<td class=\"datonum\" headers=\".*?\">(.*?)\s+"
sez_senato = re.search("<div class=\"Box01Cont\"><strong>Sezioni pervenute :<br/>(.*?)\s+su\s+(.*?)</strong>", senatoText)
senato_pdl = re.search(bloccoTipo % 'IL POPOLO DELLA LIBERTA\'', senatoText)
senato_lega = re.search(bloccoTipo % 'LEGA NORD', senatoText)
senato_pd = re.search(bloccoTipo % 'PARTITO DEMOCRATICO', senatoText)
senato_dipietro = re.search(bloccoTipo % 'DI PIETRO ITALIA DEI VALORI', senatoText)
senato_udc = re.search(bloccoTipo % 'UNIONE DI CENTRO', senatoText)
senato_arcobaleno = re.search(bloccoTipo % 'LA SINISTRA L\'ARCOBALENO', senatoText)
senato_ladestra = re.search(bloccoTipo % 'LA DESTRA - FIAMMA TRICOLORE', senatoText)
senato_socialisti = re.search(bloccoTipo % 'PARTITO SOCIALISTA', senatoText)
#senato_sud = re.search(bloccoTipo % 'MOVIMENTO PER L\'AUTONOMIA ALL\.PER IL SUD', senatoText)
#senato_comunisti = re.search(bloccoTipo % 'PARTITO COMUNISTA DEI LAVORATORI', senatoText)
#senato_sincritica = re.search(bloccoTipo % 'SINISTRA CRITICA', senatoText)
sez_camera = re.search("<div class=\"Box01Cont\"><strong>Sezioni pervenute :<br/>(.*?)\s+su\s+(.*?)</strong>", cameraText)
camera_pdl = re.search(bloccoTipo % 'IL POPOLO DELLA LIBERTA\'', cameraText)
camera_lega = re.search(bloccoTipo % 'LEGA NORD', cameraText)
camera_pd = re.search(bloccoTipo % 'PARTITO DEMOCRATICO', cameraText)
camera_dipietro = re.search(bloccoTipo % 'DI PIETRO ITALIA DEI VALORI', cameraText)
camera_udc = re.search(bloccoTipo % 'UNIONE DI CENTRO', cameraText)
camera_arcobaleno = re.search(bloccoTipo % 'LA SINISTRA L\'ARCOBALENO', cameraText)
camera_ladestra = re.search(bloccoTipo % 'LA DESTRA - FIAMMA TRICOLORE', cameraText)
camera_socialisti = re.search(bloccoTipo % 'PARTITO SOCIALISTA', cameraText)
#camera_sud = re.search(bloccoTipo % 'MOVIMENTO PER L\'AUTONOMIA ALL\.PER IL SUD', cameraText)
#camera_comunisti = re.search(bloccoTipo % 'PARTITO COMUNISTA DEI LAVORATORI', cameraText)
#camera_sincritica = re.search(bloccoTipo % 'SINISTRA CRITICA', cameraText)
elencoSostituzioniSenato = { # Sostituisce le variabili nel modello
'#senato-sezioniscrut': sez_senato.group(1),
'#senato-sezionitot': sez_senato.group(2),
'#senato-pdl': str(float(senato_pdl.group(2).replace(',', '.'))+float(senato_lega.group(2).replace(',', '.'))).replace('.', ','),
'#senato-partitodemocratico': str(float(senato_pd.group(2).replace(',', '.'))+float(senato_dipietro.group(2).replace(',', '.'))).replace('.', ','),
'#senato-udc': senato_udc.group(2).replace('.', ','),
'#senato-arcobaleno': senato_arcobaleno.group(2).replace('.', ','),
'#senato-ladestra': senato_ladestra.group(2).replace('.', ','),
'#senato-socialisti': senato_socialisti.group(2).replace('.', ','),
}
elencoSostituzioniCamera = { # Sostituisce le variabili nel modello
'#camera-sezioniscrut': sez_camera.group(1),
'#camera-sezionitot': sez_camera.group(2),
'#camera-pdl': str(float(camera_pdl.group(2).replace(',', '.'))+float(camera_lega.group(2).replace(',', '.'))).replace('.', ','),
'#camera-partitodemocratico': str(float(camera_pd.group(2).replace(',', '.'))+float(camera_dipietro.group(2).replace(',', '.'))).replace('.', ','),
'#camera-udc': camera_udc.group(2).replace('.', ','),
'#camera-arcobaleno': camera_arcobaleno.group(2).replace('.', ','),
'#camera-ladestra': camera_ladestra.group(2).replace('.', ','),
'#camera-socialisti': camera_socialisti.group(2).replace('.', ','),
}
nuovoTestoSenato = massiveReplace(elencoSostituzioniSenato, modelloSenato)
nuovoTestoCamera = massiveReplace(elencoSostituzioniCamera, modelloCamera)
pageSenato = wikipedia.Page(wikipedia.getSite(code='it', fam='wikinews'), "Speciale Elezioni politiche italiane 2008/Senato")
if pageSenato.exists():
oldtextSenato = pageSenato.get()
else:
oldtextSenato = ""
wikipedia.showDiff(oldtextSenato, nuovoTestoSenato)
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']:
pageSenato.put(nuovoTestoSenato, u"Bot: Aggiorno risultati elezioni senato")
pageCamera = wikipedia.Page(wikipedia.getSite(code='it', fam='wikinews'), "Speciale Elezioni politiche italiane 2008/Camera")
if pageCamera.exists():
oldtextCamera = pageCamera.get()
else:
oldtextCamera = ""
wikipedia.showDiff(oldtextCamera, nuovoTestoCamera)
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']:
pageCamera.put(nuovoTestoCamera, u"Bot: Aggiorno risultati elezioni camera")
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()
modello_elezioni_camera.txt
modifica[[Image:Sez camer dep ris.jpg]] <div style="text-align: center;">''Dati ufficiali #camera-sezioniscrut sezioni scrutinate su #camera-sezionitot esclusi i deputati delle sezioni estero''</div> <div style="text-align: left; color:red;">'''#camera-partitodemocratico% Partito Democratico e Italia dei Valori (- deputati<small>+- estero</small>)'''</div> <div style="text-align: left; color:blue;">'''#camera-pdl% Il Popolo della Libertà e Lega Nord (- deputati<small>+- estero</small>)'''</div> <div style="text-align: left; color:green;">'''#camera-arcobaleno% Sinistra Arcobaleno (- deputati<small>+- estero</small>)'''</div> <div style="text-align: left; color:magenta;">'''#camera-udc% Unione di Centro (- deputati<small>+- estero</small>)'''</div> <div style="text-align: left; color:olive;">'''#camera-ladestra% La Destra-Fiamma Tricolore (- deputati<small>+- estero</small>)'''</div> <div style="text-align: left; color:darkorange;">'''#camera-socialisti% Partito Socialista (- deputati<small>+- estero</small>)'''</div> <div style="text-align: left; color:black;">'''#camera-altri% Altri (0 deputati<small>+- estero</small>)'''</div> <div style="text-align: right;">''[[Speciale Elezioni politiche italiane 2008/Camera|dettagli sui risultati]]''</div>
modello_elezioni_senato.txt
modifica[[Image:Sez senato ris.jpg]] <div style="text-align: center;">''Dati ufficiali #senato-sezioniscrut sezioni scrutinate su #senato-sezionitot esclusi i deputati delle sezioni estero''</div> <div style="text-align: left; color:red;">'''#senato-partitodemocratico% Partito Democratico e Italia dei Valori (- senatori<small>+- estero</small>)'''</div> <div style="text-align: left; color:blue;">'''#senato-pdl% Il Popolo della Libertà e Lega Nord (- senatori<small>+- estero</small>)'''</div> <div style="text-align: left; color:green;">'''#senato-arcobaleno% Sinistra Arcobaleno (- senatori<small>+- estero</small>)'''</div> <div style="text-align: left; color:magenta;">'''#senato-udc% Unione di Centro (- senatori<small>+- estero</small>)'''</div> <div style="text-align: left; color:olive;">'''#senato-ladestra% La Destra-Fiamma Tricolore (- senatori<small>+- estero</small>)'''</div> <div style="text-align: left; color:darkorange;">'''#senato-socialisti% Partito Socialista (- senatori<small>+- estero</small>)'''</div> <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>