Planning the future of Botwiki! - Help us bring Botwiki up to date, contribute to our strategy discussion, add bot scripts, and contribute manuals, guides, and tutorials! Almost anything related to bots, particularly those used to edit mediawiki, is welcome.
UNABLE TO EDIT? - We've experienced attacks by spambots lately and now require you to confirm your e-mail before you can edit (go to your preferences, enter an e-mail address, and request a confirmation e-mail, then go to your e-mail and click on the confirmation link). We also require new accounts to make a few edits and wait a few minutes before before you can create a page; however, if this is a problem contact us in #botwiki and we can manually confirm your account. Sorry for the inconvenience.
Python:UpdateTimeTableTrenitalia.py
#!/usr/bin/python # -*- coding: utf-8 -*- """ Script for my dad to update trenitalia's timetable in a .xls file. If you want to use this script too, change the stations. This file needs [[Python:Excel.py]] on http://botwiki.sno.cc/ and it's compatible only for windows. 3.60€ gained :-D """ # # (C) Filnik, 2008 # # Distributed under the terms of the MIT license. # __version__ = '$Id: $' # import excel import urllib2, re, time, datetime import pywintypes def pageText(url): user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7' try: request = urllib2.Request(url) request.add_header("User-Agent", user_agent) response = urllib2.urlopen(request) text = response.read() response.close() # When you load too many pages, this function can give errors, so catch them. except urllib2.HTTPError: print u"Server error. Pausing for 10 seconds... " + time.strftime("%d %b %Y %H:%M:%S (UTC)", time.gmtime()) time.sleep(10) request = urllib2.Request(url) request.add_header("User-Agent", user_agent) response = urllib2.urlopen(request) text = response.read() response.close() return text def main(): # CAMBIA QUI SOTTO!! stazione_partenza = 'Ponte Di Brenta' stazione_arrivo = 'Ve. Mestre' xls_file = 'C:\\Arch_Excell\\CASA_AUTO\\orari_treni\\orari_treni_temp.xls' # NON STA TOCCARE QUA SOTTO! Grazie :-) print """Programma per scaricare in un file .xls la tabella degli orari dei treni con: Stazione di Partenza: %s Stazione di Arrivo: %s Nel file .xls: %s Per cambiare i settaggi, modificare manualmente il file. -------------------------------------------------------- """ % (stazione_partenza, stazione_arrivo, xls_file) #""" # Now we have to find out what is yesterday and what is tomorrow # Local time in seconds basing on a selected time (default function) current_time = time.time() # Seconds In A Day siad = 24*60*60 # Getting the current time in a tuple with the day, month, year and so on date = time.localtime(current_time + siad) # Pick up the year year = date[0] # Pick up the month month = date[1] # Pick up the day day = date[2] num_pag = 1 # Inizializzo questa variabile (non si puo' aggiungere testo alle variabili non esistenti) HTML_text = '' # Devo prendere da stazione 1 a stazione 2 e viceversa, quindi faccio 2 giri. secondo_giro = False print "Prelevo gli orari di domani, %s/%s/%s...\n" % (day, month, year) while 1: print "Prelevo gli orari: %s -> %s..." % (stazione_partenza, stazione_arrivo) while 1: print "Carico la pagina: %s..." % num_pag url = 'http://orario.trenitalia.com/b2c/TimeTable?stazin=' + stazione_partenza.replace(' ', '%20') \ + '&stazout=' + stazione_arrivo.replace(' ', '%20') + '&datag=' + str(day) + '&datam=' + str(month) + '&dataa=' + str(year) + \ '&timsh=0&timsm=00&lang=it&nreq=5&channel=tcom&sort=0&npag=' + str(num_pag) + '&solotreno=0&noreservation=0&economy=1' HTML_text_temp = pageText(url) pulsante_successive_regex = r'value="Successive"' pulsante_successive = re.findall(pulsante_successive_regex, HTML_text_temp) HTML_text += HTML_text_temp if pulsante_successive == []: break else: num_pag += 1 time.sleep(1) # Diamo un secondo di pausa al server... continue print "\nPrendo gli orari dalle pagine caricate...\n" # Il testo in HTML e' formattato un po' maluccio, percio' nella regex di arrivo c'e' la stazione di partenza e viceversa # ma e' giusto cosi'. regex_partenza = r'<font face="Verdana,Arial" size="1" color="#000000">(.*?)</font><font face="Verdana,Arial" size="1" color="#000000"></font>' orari_partenza = re.findall(regex_partenza, HTML_text) regex_arrivo = r'<font face="Verdana,Arial" size="1" color="#000000"><a title="' + stazione_partenza + \ '"><font color="#000000">.*?</font></a></font><a href="#notep"><font face="Verdana,Arial" size="1" color="#000000"></font></a></td><td .*?><font face="Verdana,Arial" size="1" color="#000000">(.*?)<br>' orari_arrivo = re.findall(regex_arrivo, HTML_text) regex_durata = r'<font face="Verdana,Arial" size="1" color="#000000"><a title="' + stazione_arrivo + \ '"><font color="#000000">.*?</font></a></font><a href="#notea"></a></td><td .*?><font face="Verdana,Arial" size="1" color="#000000">(.*?)</font>' orari_durata = re.findall(regex_durata, HTML_text) if orari_partenza == [] or orari_arrivo == [] or orari_durata == []: raise Exception("Hanno cambiato l'HTML e non riesco a prendere i dati") if secondo_giro == True: orari_partenza_2 = orari_partenza orari_arrivo_2 = orari_arrivo orari_durata_2 = orari_durata break # Esco dal ciclo, gia' fatto il secondo giro else: num_pag = 1 HTML_text = '' secondo_giro = True orari_partenza_1 = orari_partenza orari_arrivo_1 = orari_arrivo orari_durata_1 = orari_durata stazione_partenza_temp = stazione_partenza stazione_partenza = stazione_arrivo stazione_arrivo = stazione_partenza_temp print "Bene, ho scaricato tutti i dati. Ora procedo alla creazione del file .xls" #""" B2 = '%s ===> %s' % (stazione_arrivo, stazione_partenza) G2 = '%s ===> %s' % (stazione_partenza, stazione_arrivo) B4 = 'Partenza %s' % stazione_arrivo C4 = 'Arrivo %s' % stazione_partenza E4 = 'Durata' G4 = 'Partenza %s' % stazione_partenza H4 = 'Arrivo %s' % stazione_arrivo J4 = 'Durata' # Apro il file, metto un try/finally per chiuderlo anche in caso di errore try: excel_file = excel.main(directory = xls_file) except pywintypes.com_error: raise Exception("Il file non esiste, crealo vuoto che poi lo riempio. Grazie.") try: # Preparo la "testa" del file excel_file.formula('B2', B2) excel_file.formula('G2', G2) excel_file.formula('B4', B4) excel_file.formula('C4', C4) excel_file.formula('E4', E4) excel_file.formula('G4', G4) excel_file.formula('H4', H4) excel_file.formula('J4', J4) # Pulisco le colonne prima di inserire i nuovi dati riga_iniziale = 6 # B6, C6.. quella dove iniziano i dati for numero in range(riga_iniziale, 150): excel_file.formula('B%s' % numero, '') # Pulisco inserendo una stringa vuota nelle celle excel_file.formula('C%s' % numero, '') excel_file.formula('E%s' % numero, '') excel_file.formula('G%s' % numero, '') excel_file.formula('H%s' % numero, '') excel_file.formula('J%s' % numero, '') # Inserisco le prime tre colonne for numero in range(0, len(orari_partenza_1)): print 'Scrivo nella cella: B%s' % (riga_iniziale + (numero * 2)) excel_file.formula('B%s' % (riga_iniziale + (numero * 2)), orari_partenza_1[numero]) print 'Scrivo nella cella: C%s' % (riga_iniziale + (numero * 2)) excel_file.formula('C%s' % (riga_iniziale + (numero * 2)), orari_arrivo_1[numero]) print 'Scrivo nella cella: E%s' % (riga_iniziale + (numero * 2)) excel_file.formula('E%s' % (riga_iniziale + (numero * 2)), orari_durata_1[numero]) # Inserisco le altre tre colonne for numero in range(0, len(orari_partenza_2)): print 'Scrivo nella cella: G%s' % (riga_iniziale + (numero * 2)) excel_file.formula('G%s' % (riga_iniziale + (numero * 2)), orari_partenza_2[numero]) print 'Scrivo nella cella: H%s' % (riga_iniziale + (numero * 2)) excel_file.formula('H%s' % (riga_iniziale + (numero * 2)), orari_arrivo_2[numero]) print 'Scrivo nella cella: J%s' % (riga_iniziale + (numero * 2)) excel_file.formula('J%s' % (riga_iniziale + (numero * 2)), orari_durata_2[numero]) finally: excel_file.save(xls_file) if __name__ == "__main__": main()