1
0
Fork 0
This repository has been archived on 2024-06-28. You can view files and clone it, but cannot push or open issues or pull requests.
WienerLinienBot/wienerLinien.py

82 lines
2.4 KiB
Python
Raw Normal View History

2016-07-31 13:19:30 +02:00
#!/usr/bin/env python3
import json
from pprint import pprint
import requests
from config import *
from fuzzywuzzy import process, fuzz
class WienerLinien:
def setStationNames(self):
for station in self.stations.values():
self.stationNames[station["HALTESTELLEN_ID"]] = station["NAME"]
def __init__(self, json_path):
with open(json_path) as json_file:
self.stations = json.load(json_file)
self.stationNames = {}
self.setStationNames()
@staticmethod
def api(rbl):
parameters = {"rbl": rbl, "sender": wienerlinien_API_key}
r = requests.get("https://www.wienerlinien.at/ogd_realtime/monitor", params=parameters)
2016-08-01 14:14:46 +02:00
print(r.status_code)
2016-07-31 13:19:30 +02:00
return r.json()
def nexttrains(self, rbl):
response = self.api(rbl)
countdowns = []
2016-08-01 14:14:46 +02:00
name = response["data"]["monitors"][0]["lines"][0]["name"]
towards = response["data"]["monitors"][0]["lines"][0]["towards"]
2016-07-31 13:19:30 +02:00
for departure in response["data"]["monitors"][0]["lines"][0]["departures"]["departure"]:
countdowns.append(departure["departureTime"]["countdown"])
2016-08-01 14:14:46 +02:00
return countdowns, name, towards
2016-07-31 13:19:30 +02:00
def fuzzy_stationname(self, userinput):
2016-08-01 14:14:46 +02:00
output = process.extract(userinput, self.stationNames, limit=6, scorer=fuzz.UQRatio)
2016-08-01 12:45:41 +02:00
choice = []
for i in range(len(output)):
if i == 0:
diff = 0
else:
diff = output[i][1] - output[i - 1][1]
if output[i][1] >= 55:
if diff >= -7:
choice.append(output[i])
else:
break
return choice
2016-07-31 13:19:30 +02:00
def askStation(self):
while True:
2016-08-01 12:45:41 +02:00
result = self.fuzzy_stationname(input())
2016-07-31 13:19:30 +02:00
print(result)
number = int(input())
pprint(result[number - 1][2])
2016-08-01 14:14:46 +02:00
def getStationInfo(self, station_id):
return self.stations[str(station_id)]
def get_platforms(self, station_id):
return self.stations[str(station_id)]["PLATFORMS"]
2016-08-01 12:45:41 +02:00
2016-07-31 13:19:30 +02:00
def main():
wl = WienerLinien("stationen/cache/current.json")
# pprint(wl.stations["214461789"])
# pprint(wl.nexttrains(4431))
2016-08-01 14:14:46 +02:00
station = wl.fuzzy_stationname("Rossauer Lände")
pprint(station[0])
for platform in wl.get_platforms(station[0][2]):
pprint(wl.nexttrains(platform["RBL_NUMMER"]))
2016-07-31 13:19:30 +02:00
if __name__ == '__main__':
main()