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
54
55
56
57
|
#! /usr/bin/env 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(stations, stationName):
print('Station: %s' % stationName)
if 'error' in stations:
print(stations.get('error'))
else:
currentTime = int(datetime.today().hour) * 3600 + int(datetime.today().minute) * 60
for station in stations.get('stations', []):
for departure in station.get('departures', []):
departureTime = int(departure['time'].replace("*", "").split(":")[0]) * 3600 + int(departure['time'].replace("*", "").split(":")[1]) * 60
if (departureTime - currentTime) / 60 < -1:
departureTime += 60 * 60 * 24
if (departureTime - currentTime) / 60 < 2:
departureText = "now"
else:
departureText = "in %2d min" % ((departureTime - currentTime) / 60)
print('%-9s%-31s%12s' % (departure['line'], departure['direction'], departureText))
print()
def queryAPI(stationName):
error = ''
try:
stations = urlopen('http://bvg-api.herokuapp.com/stations?input=' + quote(stationName))
return json.loads(stations.read().decode('UTF-8'))
except (IOError, UnicodeDecodeError) as e:
error = 'Error grabbing %s!\n' % stationName
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)
|