diff --git a/backend.py b/backend.py index 462b807..8bb755d 100644 --- a/backend.py +++ b/backend.py @@ -1,6 +1,6 @@ """ haTerm - v0.1 -(c) Kieler Mia +(c) Kieler Mia, Chiara Wohlwend, Sophia Schmidhofer haTerm is a Terminal Based hafas client, using the ivb endpoint. Prompt_toolkit (https://github.com/prompt-toolkit/python-prompt-toolkit) will be used to render a terminal user interface (TUI). @@ -13,82 +13,38 @@ from datetime import datetime from prompt_toolkit import Application from prompt_toolkit.completion import WordCompleter -class hafasClient: - def __init__(self): - self.session = requests.session() - self.clientInfo = {"id": "VAO", "name": "webapp", "type": "WEB"} - self.version = "1.32" - self.language = "de" - self.auth = {"type": "AID", "aid": "wf7mcf9bv3nv8g5f"} - self.headers = {'User-Agent': "IOS",'Content-Type': 'application/json'} - self.baseUrl = "https://fahrplan.ivb.at/bin/mgate.exe" +def stationRequest(station): + res = session.post("https://fahrplan.ivb.at/bin/mgate.exe", + data=json.dumps({"svcReqL": [{"req": {"input": {"field": "S", "loc": {"name": station, "type": "S"}}}, "meth": "LocMatch"}], "client": {"id": "VAO", "name": "webapp", "type": "WEB"}, "ver": "1.32", "lang": "de", "auth": {"type": "AID", "aid": "wf7mcf9bv3nv8g5f"}}), + headers={'User-Agent': "IOS",'Content-Type': 'application/json'}) + return json.loads(res.text) - def stationRequest(self, station): - res = self.session.post(self.baseUrl, - data=json.dumps({"svcReqL": [{"req": {"input": {"field": "S", "loc": {"name": station, "type": "S"}}}, "meth": "LocMatch"}], "client": self.clientInfo, "ver": self.version, "lang": self.language, "auth": self.auth}), - headers=self.headers) - return json.loads(res.text) - - def arrDepRequest(self, station, arrdep, count): - time = datetime.now() - # print(time.strftime("%Y%m%d")) - res = self.session.post(self.baseUrl, - data=json.dumps({"svcReqL": [{"req": {"type": arrdep, "stbLoc": {"lid": f"A=1@L={station}@"}, "dirLoc": None, "maxJny": count, "date": time.strftime("%Y%m%d"), "time": time.strftime("%H%M%S"), "dur": -1, "jnyFltrL": [{"type": "PROD", "mode": "INC", "value": "4087"}]}, "meth": "StationBoard"}], "client": self.clientInfo, "ver": self.version, "lang": self.language, "auth": self.auth}), - headers=self.headers) - return json.loads(res.text) - - def tripRequest(self, departure): - res = self.session.post(self.baseUrl, - data = json.dumps({"svcReqL": [{"req": {"jid": departure}, "meth": "JourneyDetails"}], "client": self.clientInfo, "ver": self.version, "lang": self.language, "auth": self.auth}), - headers=self.headers) - return json.loads(res.text) - - - - def getStationNames(self, stationString): - res = self.stationRequest(stationString) - return [(station["name"], station["extId"]) for station in res["svcResL"][0]["res"]["match"]["locL"]] - - def getArrDep(self, stationId, arrdep="DEP", count=1): - res = self.arrDepRequest(stationId, arrdep, count) - return res["svcResL"][0]["res"]["jnyL"] - - def getTrip(self, departure): - res = self.tripRequest(departure) - return res["svcResL"][0]["res"] - - - - def runTests(self): - stationInput = input("Enter Station Name: ") - station = self.getStationNames(stationInput) - print(station) - departures = self.getArrDep(station[0][1], arrdep="DEP", count=5) - print(departures) - - print("\n)------------------\n") - arrivals = self.getArrDep(station[0][1], arrdep="ARR", count=5) - print(arrivals) - - print("\n)------------------\n") - trip = self.getTrip(departures[0]["jid"]) - __import__('pprint').pprint(trip) - - - # streq = self.stationRequest(station)["svcResL"][0]["res"]["match"]["locL"] - # - # selectedStation = streq[0] # should be selected using ptk - # __import__('pprint').pprint(selectedStation) - # print(selectedStation["lid"]) - # dpreq = self.departuresRequest(selectedStation["lid"], departuresCount=5) - # - # nextDepartures = dpreq["svcResL"][0]["res"]["jnyL"] - # __import__('pprint').pprint(nextDepartures) - # for departure in nextDepartures: - # print(f"{datetime.strptime(departure["stbStop"]["dTimeS"], "%H%M%S").strftime("%H:%M")} / {datetime.strptime(departure["stbStop"]["dTimeR"], "%H%M%S").strftime("%H:%M")} {departure["dirFlg"]} --> {departure["dirTxt"]}") - # print(nextDepartures) +def departuresRequest(station, departures=1): + time = datetime.now() + print(time.strftime("%Y%m%d")) + res = session.post("https://fahrplan.ivb.at/bin/mgate.exe", + data=json.dumps({"svcReqL": [{"req": {"type": "DEP", "stbLoc": {"lid": f"A=1@L={station}@"}, "dirLoc": None, "maxJny": departures, "date": time.strftime("%Y%m%d"), "time": time.strftime("%H%M%S"), "dur": -1, "jnyFltrL": [{"type": "PROD", "mode": "INC", "value": "4087"}]}, "meth": "StationBoard"}], "client": {"id": "VAO", "name": "webapp", "type": "WEB"}, "ver": "1.32", "lang": "de", "auth": {"type": "AID", "aid": "wf7mcf9bv3nv8g5f"}}), + headers={'User-Agent': "IOS",'Content-Type': 'application/json'}) + return json.loads(res.text) +def tripRequest(departure): + res = session.post("https://fahrplan.ivb.at/bin/mgate.exe", + data = json.dumps({"svcReqL": [{"req": {"jid": departure}, "meth": "JourneyDetails"}], "client": {"id": "VAO", "name": "webapp", "type": "WEB"}, "ver": "1.32", "lang": "de", "auth": {"type": "AID", "aid": "wf7mcf9bv3nv8g5f"}}), + headers={'User-Agent': "IOS",'Content-Type': 'application/json'}) + return json.loads(res.text) if __name__ == '__main__': - client = hafasClient() - client.runTests() + session = requests.session() + station = input("Enter Station Name: ") + streq = stationRequest(station)["svcResL"][0]["res"]["match"]["locL"] + + selectedStation = streq[0] # should be selected using ptk + __import__('pprint').pprint(selectedStation) + print(selectedStation["lid"]) + dpreq = departuresRequest(selectedStation["lid"], departures=5) + + nextDepartures = dpreq["svcResL"][0]["res"]["jnyL"] + __import__('pprint').pprint(nextDepartures) + for departure in nextDepartures: + print(f"{datetime.strptime(departure["stbStop"]["dTimeS"], "%H%M%S").strftime("%H:%M")} / {datetime.strptime(departure["stbStop"]["dTimeR"], "%H%M%S").strftime("%H:%M")} {departure["dirFlg"]} --> {departure["dirTxt"]}") + print(nextDepartures)