summaryrefslogtreecommitdiff
path: root/bvggrabber/bvg-grabber.py
blob: d72594800b1d6c60a3a90186de6644e6f2f50e29 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#! /usr/bin/python3
#-.- coding: UTF-8 -.-

import json
import time

from datetime import datetime
from subprocess import call
from urllib.parse import quote
from urllib.request import urlopen


def printOutput(json_return, haltestelle):
    print('Station: %s' % haltestelle)
    if 'error' in json_return:
        print(json_return.get('error'))
    else:
        actual = int(datetime.today().hour) * 3600 + int(datetime.today().minute) * 60
        for station in json_return.get('stations', []):
            for departure in station.get('departures', []):
                arrival = int(departure['time'].replace("*", "").split(":")[0]) * 3600 + int(departure['time'].replace("*", "").split(":")[1]) * 60
                if (arrival - actual) / 60 < 0:
                    arrival += 60 * 60 * 24
                arrival_text = "in %2d min" % (int((arrival - actual)) / 60)
                print('%-9s%-31s%12s' % (departure['line'], departure['direction'], arrival_text))
            print()

def queryAPI(haltestelle):
    error = ''
    try:
        ret = urlopen('http://bvg-api.herokuapp.com/stations?input=' + quote(haltestelle))
        return json.loads(ret.read().decode('UTF-8'))
    except (IOError, UnicodeDecodeError) as e:
        error = 'Error grabbing %s!\n' % haltestelle
        if hasattr(e, 'reason'):
            error += 'failed to connect\n'
            error += 'Reason: ' + str(e.reason)
        elif hasattr(e, 'code'):
            error += 'serverside problem\n'
            error += 'Code: ' + str(e.code) + '\n' + str(e.headers)
        else:
            error += 'Unexpected Error'
    return {'error': error}

if __name__ == '__main__':
    while(True):
        march = queryAPI('Marchbrücke')
        # ernst = queryAPI('U Ernst-Reuter-Platz')
        call("clear", shell=True)
        print('%-9s%-31s%12s' % ("Line", "Destination", "Departure"))
        printOutput(march, 'Marchbrücke')
        # printOutput(ernst, 'U Ernst-Reuter-Platz')
        time.sleep(20)