#!/usr/bin/python """ these values are passed in the URL """ via = "" via_id = "" dest_id = "" dest = "" source = "" source_id = "" def post_parameters(time, date): # Ewwww, Deutsche Bahn :( return "&".join([ "HWAI%3DQUERY%21rit=no", "queryPageDisplayed=yes", "REQ0JourneyStopsS0A=2", "REQ0JourneyStopsS0G=%s" % source, "REQ0JourneyStopsS0ID=%s" % source_id, "REQ0JourneyStopsZ0A=1", "REQ0JourneyStopsZ0G=%s" % dest, "REQ0JourneyStopsZ0ID=%s" % dest_id, "REQ0JourneyStops1A=1", "REQ0JourneyStops1G=%s" % via, "REQ0JourneyStops1ID=%s" % via_id, "REQ0JourneyStopover1=hh%3Amm", "REQ0JourneyStops2ID=", "REQ1JourneyStops1ID=", "REQ1JourneyStops2ID=", "HWAI%3DQUERY%21direction=single%21", "REQ0JourneyDate=%s" % date, "REQ0JourneyTime=%s" % time, "REQ0HafasSearchForw=1", "REQ1JourneyDate=", "REQ1JourneyTime=", "REQ1HafasSearchForw=1", "REQ0JourneyProduct_prod_list=1%3A1111111111000000", "HWAI%3DQUERY%24PRODUCTS%240_0%21show=yes", "HWAI%3DQUERY%24PRODUCTS%240_1%21show=yes", "REQ0HafasChangeTime=0%3A1", "existOptimizePrice=1", "REQ0HafasOptimize1=0%3A1", "existIntermodalDep_enable=yes", "REQ0JourneyDep__enable=Foot", "existIntermodalDest_enable=yes", "REQ0JourneyDest__enable=Foot", "REQ0JourneyDep_Foot_minDist=0", "REQ0JourneyDest_Foot_minDist=0", "REQ0JourneyDep_Foot_maxDist=2000", "REQ0JourneyDest_Foot_maxDist=2000", "REQ0JourneyDep_Bike_minDist=0", "REQ0JourneyDest_Bike_minDist=0", "REQ0JourneyDep_Bike_maxDist=5000", "REQ0JourneyDest_Bike_maxDist=5000", "REQ0JourneyDep_Taxi_minDist=2000", "REQ0JourneyDest_Taxi_minDist=2000", "REQ0JourneyDep_Taxi_maxDist=50000", "REQ0JourneyDest_Taxi_maxDist=50000", "REQ0JourneyDep_KissRide_minDist=2000", "REQ0JourneyDest_KissRide_minDist=2000", "REQ0JourneyDep_KissRide_maxDist=50000", "REQ0JourneyDest_KissRide_maxDist=50000", "traveller_E=1", "traveller_K=0", "traveller_B=0", "traveller_B0=0", "REQ0Tariff_TravellerType.1=E", "REQ0Tariff_TravellerReductionClass.1=0", "REQ0Tariff_TravellerAge.1=", "REQ0Tariff_TravellerType.2=NULL", "REQ0Tariff_TravellerReductionClass.2=0", "REQ0Tariff_TravellerAge.2=", "REQ0Tariff_TravellerType.3=NULL", "REQ0Tariff_TravellerReductionClass.3=0", "REQ0Tariff_TravellerAge.3=", "REQ0Tariff_TravellerType.4=NULL", "REQ0Tariff_TravellerReductionClass.4=0", "REQ0Tariff_TravellerAge.4=", "REQ0Tariff_TravellerType.5=NULL", "REQ0Tariff_TravellerReductionClass.5=0", "REQ0Tariff_TravellerAge.5=", "REQ0Tariff_Class=2", "existOptionBits=yes", "start=Suchen" ]) import re import urllib import time import os from BeautifulSoup import BeautifulSoup url = 'http://reiseauskunft.bahn.de/bin/query.exe/dn?' args = post_parameters(time.strftime("%H:%M"), time.strftime("%d.%m.%y")) file = open('/tmp/bahn', 'w+') file.write("Reading failed") file.close() handle = urllib.urlopen(url, args) source = handle.read() handle.close() ld = int(re.search("ld=(\d+)", source).group(1)) ident = re.search("ident=([a-z0-9\.]+)&", source).group(1) #print ld #print ident #print source #url2 = 'http://reiseauskunft.bahn.de/bin/query2.exe/dn?ld=%d&seqnr=1&ident=%s&rt=1&OK' % (ld, ident) url2 = 'http://reiseauskunft.bahn.de/bin/query2.exe/dn?ld=%d&seqnr=1&ident=%s&rt=1&rememberSortType=minDeparture&REQ0HafasScrollDir=1' % (ld, ident) handle = urllib.urlopen(url2) source = handle.read() handle.close() soup = BeautifulSoup(source, convertEntities=BeautifulSoup.HTML_ENTITIES) departure = [x.string for x in soup("div", {"class": "resultDep"})] arrival = [x.string for x in soup("td", {"class": re.compile(r".*\bstationDest\b.*")})] departure_time = [x.parent.findNext("td").contents[0] for x in soup("td", text="ab")] arrival_time = [x.parent.findNext("td").string for x in soup("td", text="an")] """ print soup("td", text="ab") for x in soup("td", text="ab"): print x.parent print x.parent.findNext("td").string print #print x.parent("td", {"class": "time"}) print print for x in soup("td", text="an"): print x.parent print x.parent.findNext("td").string print #print x.parent("td", {"class": "time"}) print print """ print departure, arrival, departure_time, arrival_time #print source assert len(departure) == len(arrival) assert len(departure_time) == len(arrival_time) assert len(departure) == len(departure_time) file = open('/tmp/bahn', 'w+') def encode(x): if x is None: return "None" return x.strip().encode("utf8") for d, a, dtime, atime in zip(departure, arrival, departure_time, arrival_time): line = "Ab %s An %s | %s \n" % ( encode(dtime), encode(atime), encode(d), #encode(a) ) file.write(line) print line, file.close()