From e3dba9a4b5d9c5b3b652d8956be5660f3f23e465 Mon Sep 17 00:00:00 2001 From: Luca Beltrame Date: Sat, 15 Feb 2020 21:33:28 +0100 Subject: [PATCH] Differentiate real steps from "go through steps" Hyperdia also lists the stations where the train goes through, and changes line name, although you do not require to change trains This marks them as such in both the JSON and the Markdown output. --- hyperdia.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/hyperdia.py b/hyperdia.py index 4425abb..63d165f 100755 --- a/hyperdia.py +++ b/hyperdia.py @@ -75,6 +75,7 @@ class HyperdiaStep: duration: Optional[str] = None train_name: Optional[str] = None is_transfer: Optional[bool] = False + go_through: Optional[bool] = False start_track_number: Optional[int] = None end_track_number: Optional[int] = None @@ -112,6 +113,7 @@ def _serialize(trip: HyperdiaTrip) -> dict: subdict["duration"] = step.duration subdict["train_name"] = step.train_name subdict["is_transfer"] = step.is_transfer + subdict["go_through"] = step.go_through subdict["start_track_number"] = step.start_track_number subdict["end_track_number"] = step.end_track_number @@ -237,6 +239,7 @@ def parse_hyperdia_table(soup, year, month, day): data = list() previous_is_direct = False + go_through = False # Skip the heading and the row immediately afterwards (commuter pass) @@ -259,9 +262,6 @@ def parse_hyperdia_table(soup, year, month, day): direct_connection = enddata[1].next_element.get("src") - if direct_connection is not None and "icon_choku.gif" in direct_connection: - previous_is_direct = True - # Second span in the station name column contains the track number # if applicable (if not, it's empty) start_track_number = parse_track_number(startdata[2]) @@ -269,7 +269,15 @@ def parse_hyperdia_table(soup, year, month, day): start_station_time = parse_station_time(startdata[0], year, month, day, start=True) - train_name = parse_train_name(traindata) + if previous_is_direct: + train_name = "Line name change, train goes through" + previous_is_direct = False + go_through = True + else: + train_name = parse_train_name(traindata) + + if direct_connection is not None and "icon_choku.gif" in direct_connection: + previous_is_direct = True end_station_name = list(enddata[2].stripped_strings)[0] end_station_time = parse_station_time(enddata[0], year, month, day, @@ -287,7 +295,10 @@ def parse_hyperdia_table(soup, year, month, day): is_transfer=is_transfer, duration=duration, start_track_number=start_track_number, - end_track_number=end_track_number) + end_track_number=end_track_number, + go_through=go_through) + + go_through = False data.append(entry)