Enhance HafasClient with detailed departure information, line is currently NOT working

This commit is contained in:
mia 2026-06-03 12:27:24 +02:00
parent d0a67d5a18
commit 0c3d4f7653
2 changed files with 55 additions and 6 deletions

View file

@ -49,9 +49,49 @@ class HafasClient:
res = self.stationRequest(stationString) res = self.stationRequest(stationString)
return [(station["name"], station["extId"]) for station in res["svcResL"][0]["res"]["match"]["locL"]] return [(station["name"], station["extId"]) for station in res["svcResL"][0]["res"]["match"]["locL"]]
def _format_time(self, timeValue):
if not timeValue:
return None
return datetime.strptime(timeValue, "%H%M%S").strftime("%H:%M")
def getArrDep(self, stationId, arrdep="DEP", count=1): def getArrDep(self, stationId, arrdep="DEP", count=1):
res = self.arrDepRequest(stationId, arrdep, count) res = self.arrDepRequest(stationId, arrdep, count)
return res["svcResL"][0]["res"]["jnyL"] departures = []
time_key = "aTimeS" if arrdep == "ARR" else "dTimeS"
time_key_real = "aTimeR" if arrdep == "ARR" else "dTimeR"
for departure in res["svcResL"][0]["res"]["jnyL"]:
prod_list = departure.get("prodL") or []
prod_index = departure.get("prodX")
if isinstance(prod_index, int) and 0 <= prod_index < len(prod_list):
product = prod_list[prod_index]
else:
product = prod_list[0] if prod_list else {}
stop = departure.get("stbStop", {})
# Raw JSON access pattern:
# - Name: departure["dirTxt"]
# - Line: departure["prodL"][0]["nameS"] or departure["prodL"][0]["prodCtx"]["line"]
# - Departure/arrival time: departure["stbStop"]["dTimeS"] or ["aTimeS"]
departures.append({
"name": departure.get("dirTxt"),
"line": (
product.get("nameS")
or product.get("number")
or product.get("name")
or product.get("prodCtx", {}).get("line")
or product.get("prodCtx", {}).get("name")
or product.get("prodCtx", {}).get("nameS")
),
"departure_time": self._format_time(stop.get(time_key)),
"departure_time_raw": stop.get(time_key),
"departure_time_real": self._format_time(stop.get(time_key_real)),
"departure_time_real_raw": stop.get(time_key_real),
"jid": departure.get("jid"),
"raw": departure,
})
return departures
def getTrip(self, departure): def getTrip(self, departure):
res = self.tripRequest(departure) res = self.tripRequest(departure)
@ -74,6 +114,14 @@ class HafasClient:
trip = self.getTrip(departures[0]["jid"]) trip = self.getTrip(departures[0]["jid"])
__import__('pprint').pprint(trip) __import__('pprint').pprint(trip)
def moniterTest(self):
stationInput = input("Enter Station Name: ")
station = self.getStationNames(stationInput)
print(station)
# departures = self.getArrDep(station[0][1], arrdep="DEP", count=1)
departures = self.arrDepRequest(station[0][1], arrdep="DEP", count=1)
print(departures)
# streq = self.stationRequest(station)["svcResL"][0]["res"]["match"]["locL"] # streq = self.stationRequest(station)["svcResL"][0]["res"]["match"]["locL"]
# #
@ -91,4 +139,5 @@ class HafasClient:
if __name__ == '__main__': if __name__ == '__main__':
client = HafasClient() client = HafasClient()
client.runTests() # client.runTests()
client.moniterTest()

View file

@ -66,10 +66,10 @@ def run_station_monitor(hafas: backend.HafasClient | None = None):
inputBuffer.insert_text(f"\n {station[0]}") inputBuffer.insert_text(f"\n {station[0]}")
resultBuffer.text = f"Ergebnisse für: {results[0][1]}\n\n" resultBuffer.text = f"Ergebnisse für: {results[0][1]}\n\n"
station = results[0][1] if results else "Keine Ergebnisse gefunden." station = results[0][1] if results else "Keine Ergebnisse gefunden."
result = hafas.getArrDep(station, arrdep="ARR", count=3) departures = hafas.getArrDep(station, arrdep="ARR", count=3)
inputBuffer.insert_line_below() resultBuffer.text = "\n".join(
for entry in result: [resultBuffer.text.rstrip()] + [f" {entry['departure_time']} {entry['line']} {entry['name']}" for entry in departures]
resultBuffer.insert_text(f"\n {result[0]}") )
else: else:
app_state = "MONITOR" app_state = "MONITOR"