Utente:BimBot/Scripts
Da Wikinotizie, le notizie a contenuto aperto
Gli script sono disponibili sul repository SVN del Toolserver.
[modifica] elezioni.py
Lo 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()
[modifica] modello_elezioni_camera.txt
[[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>
[modifica] modello_elezioni_senato.txt
[[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>