diff --git a/classes/connection.py b/classes/connection.py index e0986d6..e6c5608 100644 --- a/classes/connection.py +++ b/classes/connection.py @@ -4,10 +4,14 @@ class Connection: def __init__(self, details = False): self.services = [] self.details = details + self.via = [] def addService(self, service): self.services.append(service) + def addVia(self, station): + self.via.append(station) + def depst(self): try: return self.services[0].depst @@ -59,7 +63,7 @@ class Connection: def changes(self): return max(len([service for service in self.services if service.name != "Walk"]) - 1, 0) if self.details else max(len([service for service in self.services[0].name.split("/") if service != "Walk"]) - 1, 0) - def xml(self, indent = 0, cid = False, frm = True, to = True, deptime = True, arrtime = True, duration = True, changes = True, services = True, servicekwargs = {}, stationkwargs = {}): + def xml(self, indent = 0, cid = False, frm = True, to = True, deptime = True, arrtime = True, duration = True, changes = True, services = True, via = True servicekwargs = {}, stationkwargs = {}): out = " " * indent + "\n" % ("" if cid is False else " id=\"%i\"" % cid) if frm: @@ -67,6 +71,14 @@ class Connection: out += self.depst().xml(indent + 2, **stationkwargs) + "\n" out += " " * indent + " \n" + if via and self.via: + out += " " * indent + " \n" + + for vst in self.via: + out += vst.xml(indent + 2, **stationkwargs) + "\n" + + out += " " * indent + " \n" + if to: out += " " * indent + " \n" out += self.arrst().xml(indent + 2, **stationkwargs) + "\n" diff --git a/main.py b/main.py index 295b11f..1c0a7bf 100644 --- a/main.py +++ b/main.py @@ -93,8 +93,10 @@ def application(env, re): yield "The \"date\" value must be in DD.MM.YYYY format, the \"time\" value must be in HH:MM format." return + via = list(args["via"]) if "via" in args else None + try: - output = workers.conn.worker(frm, to, count, outtime, mode, details, json) + output = workers.conn.worker(frm, to, count, outtime, mode, details, json, via) except Exception as e: re("500 Internal Server Error", []) yield "

500 Internal Server Error

".encode() diff --git a/workers/conn.py b/workers/conn.py index 52edcc5..71a03f4 100644 --- a/workers/conn.py +++ b/workers/conn.py @@ -9,11 +9,15 @@ from classes import * def getStation(name): return list(workers.val.validateName(name))[0] -def connRequest(frm, to, count = 3, time = datetime.datetime.now(), mode = False, details = False): +def connRequest(frm, to, count = 3, time = datetime.datetime.now(), mode = False, details = False, via = []): outdate = datetime.datetime.strftime(time,"%d.%m.%Y") outtime = datetime.datetime.strftime(time,"%H:%M") url = "http://fahrplan.oebb.at/bin/query.exe/dn?start=1&S=%s&Z=%s&REQ0JourneyDate=%s&time=%s&REQ0HafasNumCons0=%s%s" % (frm.extid if frm.extid else frm.name, to.extid if to.extid else to.name, outdate, outtime, count, "×el=arrive" if mode else "") + + for i in range(len(via)): + url += "&REQ0JourneyStops%i.0G=%s&REQ0JourneyStops%i.0A=1" % (i + 1, via[i].extid if via[i].extid else via[i].name, i + 1) + source = requests.get(url).text if "GO_conViewMode=outward" not in source: @@ -42,6 +46,9 @@ def connRequest(frm, to, count = 3, time = datetime.datetime.now(), mode = False conn = Connection(details) + for vst in via: + conn.addVia(vst) + lines = cont.findAll("tr", { "class": "tpDetails" })[1:] cdate = None @@ -125,8 +132,8 @@ def connRequest(frm, to, count = 3, time = datetime.datetime.now(), mode = False yield con -def worker(frm, to, count = 3, time = datetime.datetime.now(pytz.timezone("Europe/Vienna")), mode = False, details = False, json = False): - conns = list(connRequest(getStation(frm), getStation(to), count, time, mode, details)) +def worker(frm, to, count = 3, time = datetime.datetime.now(pytz.timezone("Europe/Vienna")), mode = False, details = False, json = False, via = None): + conns = list(connRequest(getStation(frm), getStation(to), count, time, mode, details, [getStation(vst) for vst in via])) output = """