From 324c61e220fcb66973007cab4b95ca249aef3274 Mon Sep 17 00:00:00 2001 From: Markus Holtermann Date: Thu, 24 Jan 2013 21:33:11 +0100 Subject: Add first attempt of ActualDepartureQueryApi --- bvggrabber/api/actualdeparture.py | 52 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'bvggrabber') diff --git a/bvggrabber/api/actualdeparture.py b/bvggrabber/api/actualdeparture.py index 40a96af..a282c7f 100644 --- a/bvggrabber/api/actualdeparture.py +++ b/bvggrabber/api/actualdeparture.py @@ -1 +1,53 @@ # -*- coding: utf-8 -*- + + +import requests + +from bs4 import BeautifulSoup + +from bvggrabber.api import QueryApi, Departure + + +ACTUAL_QUERY_API_ENDPOINT = 'http://mobil.bvg.de/IstAbfahrtzeiten/index/mobil' + + +class ActualDepartureQueryApi(QueryApi): + + def __init__(self, station): + super(ActualDepartureQueryApi, self).__init__() + if isinstance(station, str): + self.station_enc = station.encode('iso-8859-1') + elif isinstance(station, bytes): + self.station_enc = station + else: + raise ValueError("Invalid type for station") + self.station = station + + def call(self): + params = {'input': self.station_enc} + response = requests.get(ACTUAL_QUERY_API_ENDPOINT, params=params) + if response.status_code == requests.codes.ok: + soup = BeautifulSoup(response.text) + if soup.find_all('form'): + # The station we are looking for is ambiguous or does not exist + stations = soup.find_all('option') + if stations: + # The station is ambiguous + stationlist = [s.get('value') for s in stations] + return (False, stationlist) + else: + # The station does not exist + return (False, []) + else: + # The station seems to exist + rows = soup.find('tbody').find_all('tr') + departures = [] + for row in rows: + tds = row.find_all('td') + dep = Departure(start=self.station, + end=tds[2].text.strip(), + line=tds[1].text.strip()) + departures.append(dep) + return (True, departures) + else: + response.raise_for_status() -- cgit v1.2.3