vvofoo/efa.py

109 lines
3.0 KiB
Python
Executable File

#!/usr/bin/python3
import requests
import sys
import os
import json
import time
import datetime
import re
def searchStop(name):
url = "https://webapi.vvo-online.de/tr/pointfinder"
myobj = {"query": name, "stopsOnly": True, "regionalOnly": True}
x = requests.post(url, json=myobj)
x = x.json()
points = x["Points"]
stops = []
for Point in x["Points"]:
stops.append([Point.split(sep="|")[0], Point.split(sep="|")[3]])
return stops
def selectStop(stops):
print("Your query matches the following stops:\n")
for i, stop in enumerate(stops):
print(f"({i}) {stop[1]}")
selection = int(input("\nPlease select... "))
stopId = stops[selection][0]
stopName = stops[selection][1]
return stopId, stopName
def getMaxLength(elem, array):
return max(map(lambda f: len(f[elem]), array))
def getDepartures(stopId):
url = "https://webapi.vvo-online.de/dm"
myobj = {"stopid": stopId}
now=datetime.datetime.now()
x = requests.post(url, json=myobj)
x = x.json()
print(f"Departures for {x['Name']}, {x['Place']}:\n ")
for Departure in x["Departures"]:
MotType = Departure["Mot"]
LineName = Departure["LineName"]
Direction = Departure["Direction"]
ScheduledTime = datetime.datetime.fromtimestamp(
int(re.match(r"/Date[(](\d*)", Departure["ScheduledTime"]).group(1)) / 1000
)
if "RealTime" in Departure:
RealTime = datetime.datetime.fromtimestamp(
int(re.match(r"/Date[(](\d*)", Departure["RealTime"]).group(1)) / 1000
)
else:
RealTime = None
if "State" in Departure and Departure["State"] == "Delayed":
delay = (RealTime - ScheduledTime)
delay=delay.seconds/60
else:
delay = ""
DepartureTime =(RealTime or ScheduledTime).strftime("%H:%M")
relativeDeparture = int(((RealTime or ScheduledTime) - now).seconds/60)
print(
f"{MotType:>{getMaxLength("Mot",x["Departures"])}s} "
f"{LineName:>{getMaxLength("LineName",x['Departures'])}s} "
f"{Direction:{getMaxLength("Direction",x["Departures"])}s} "
f"{DepartureTime} "
f"{relativeDeparture:>3} "
f"{delay} "
)
return
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(
prog="VVO EFA Haltestellenauskunft", description="Miau!", epilog="=^.^="
)
parser.add_argument("stopQuery") # positional argument
args = parser.parse_args()
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(
prog="VVO EFA Haltestellenauskunft", description="Miau!", epilog="=^.^="
)
parser.add_argument("stopQuery") # positional argument
args = parser.parse_args()
stop = searchStop(args.stopQuery)
if len(stop) > 1:
stopId, stopName = selectStop(stop)
else:
stopId = stop[0][0]
getDepartures(stopId)
sys.exit()