From fb82da18188d7d98f7e18058450d7d5ca7b98b5c Mon Sep 17 00:00:00 2001 From: Janne Mareike Koschinski <janne@kuschku.de> Date: Fri, 3 May 2019 22:18:41 +0200 Subject: [PATCH] Implement hafas messages API --- .gitignore | 2 +- client.go | 32 ++++++++++-- data/hafas_messages/0.html | 29 +++++++++++ data/hafas_messages/1.html | 12 +++++ data/hafas_messages/10.html | 39 ++++++++++++++ data/hafas_messages/11.html | 32 ++++++++++++ data/hafas_messages/12.html | 29 +++++++++++ data/hafas_messages/13.html | 22 ++++++++ data/hafas_messages/14.html | 82 +++++++++++++++++++++++++++++ data/hafas_messages/15.html | 82 +++++++++++++++++++++++++++++ data/hafas_messages/16.html | 29 +++++++++++ data/hafas_messages/17.html | 29 +++++++++++ data/hafas_messages/18.html | 52 +++++++++++++++++++ data/hafas_messages/19.html | 11 ++++ data/hafas_messages/2.html | 12 +++++ data/hafas_messages/20.html | 20 +++++++ data/hafas_messages/21.html | 29 +++++++++++ data/hafas_messages/22.html | 32 ++++++++++++ data/hafas_messages/23.html | 12 +++++ data/hafas_messages/24.html | 12 +++++ data/hafas_messages/3.html | 22 ++++++++ data/hafas_messages/4.html | 12 +++++ data/hafas_messages/5.html | 12 +++++ data/hafas_messages/6.html | 11 ++++ data/hafas_messages/7.html | 12 +++++ data/hafas_messages/8.html | 12 +++++ data/hafas_messages/9.html | 12 +++++ external_hafas_messages.go | 101 ++++++++++++++++++++++++++++++++++++ go.mod | 6 ++- go.sum | 4 ++ model_hafas_messages.go | 18 +++++++ out/canonicalize.sh | 25 ++++++--- roundtrip_test.go | 52 ++++++++++++++++--- 33 files changed, 878 insertions(+), 20 deletions(-) create mode 100644 data/hafas_messages/0.html create mode 100644 data/hafas_messages/1.html create mode 100644 data/hafas_messages/10.html create mode 100644 data/hafas_messages/11.html create mode 100644 data/hafas_messages/12.html create mode 100644 data/hafas_messages/13.html create mode 100644 data/hafas_messages/14.html create mode 100644 data/hafas_messages/15.html create mode 100644 data/hafas_messages/16.html create mode 100644 data/hafas_messages/17.html create mode 100644 data/hafas_messages/18.html create mode 100644 data/hafas_messages/19.html create mode 100644 data/hafas_messages/2.html create mode 100644 data/hafas_messages/20.html create mode 100644 data/hafas_messages/21.html create mode 100644 data/hafas_messages/22.html create mode 100644 data/hafas_messages/23.html create mode 100644 data/hafas_messages/24.html create mode 100644 data/hafas_messages/3.html create mode 100644 data/hafas_messages/4.html create mode 100644 data/hafas_messages/5.html create mode 100644 data/hafas_messages/6.html create mode 100644 data/hafas_messages/7.html create mode 100644 data/hafas_messages/8.html create mode 100644 data/hafas_messages/9.html create mode 100644 external_hafas_messages.go create mode 100644 model_hafas_messages.go diff --git a/.gitignore b/.gitignore index 3f231dc..367ae23 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ /.idea/* !/.idea/copyright/ .DS_Store -/out/*/ \ No newline at end of file +/out/*/* \ No newline at end of file diff --git a/client.go b/client.go index 308f776..19b6949 100644 --- a/client.go +++ b/client.go @@ -20,12 +20,12 @@ type ApiClient struct { func (c *ApiClient) Station(evaId int64) ([]Station, error) { var err error - url := fmt.Sprintf("%s/timetable/station/%d", c.IrisBaseUrl, evaId) + uri := fmt.Sprintf("%s/timetable/station/%d", c.IrisBaseUrl, evaId) var stations []Station var response *http.Response - if response, err = c.HttpClient.Get(url); err != nil { + if response, err = c.HttpClient.Get(uri); err != nil { return stations, err } @@ -44,12 +44,12 @@ func (c *ApiClient) Timetable(evaId int64, date time.Time) (Timetable, error) { var err error BahnFormat := "060102/15" - url := fmt.Sprintf("%s/timetable/plan/%d/%s", c.IrisBaseUrl, evaId, date.Format(BahnFormat)) + uri := fmt.Sprintf("%s/timetable/plan/%d/%s", c.IrisBaseUrl, evaId, date.Format(BahnFormat)) var timetable Timetable var response *http.Response - if response, err = c.HttpClient.Get(url); err != nil { + if response, err = c.HttpClient.Get(uri); err != nil { return timetable, err } @@ -194,3 +194,27 @@ func (c *ApiClient) Suggestions(line string, date time.Time) ([]Suggestion, erro return suggestions, err } + +func (c *ApiClient) HafasMessages(trainlink string) ([]HafasMessage, error) { + var err error + + uri := fmt.Sprintf("%s/traininfo.exe/dn/%s?rt=1&ajax=1", c.HafasBaseUrl, trainlink) + + var messages []HafasMessage + request, err := http.NewRequest("GET", uri, nil) + + var response *http.Response + if response, err = c.HttpClient.Do(request); err != nil { + return messages, err + } + + if messages, err = HafasMessagesFromReader(response.Body); err != nil { + return messages, err + } + + if err = response.Body.Close(); err != nil { + return messages, err + } + + return messages, err +} diff --git a/data/hafas_messages/0.html b/data/hafas_messages/0.html new file mode 100644 index 0000000..531590d --- /dev/null +++ b/data/hafas_messages/0.html @@ -0,0 +1,29 @@ +<div id="HIM_Text" class="himMessagesMiddle"> +<div id="HIM_Text__819897"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +<div id="HIM_Text__819899"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +<div id="HIM_Text__819900"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +</div> diff --git a/data/hafas_messages/1.html b/data/hafas_messages/1.html new file mode 100644 index 0000000..2b3e52b --- /dev/null +++ b/data/hafas_messages/1.html @@ -0,0 +1,12 @@ +<div id="HIM_Text" class="himMessagesHigh"> +<div id="HIM_Text__824313"> +<span class="bold"> +Kassel-Wilhelmshöhe - +Hannover Hbf: +Information. +</span> +<span class=""> +Außergewöhnlich hohes Reisendenaufkommen! Reisende, die noch keine Fahrkarte gekauft haben, wählen bitte eine andere Verbindung. +</span> +</div> +</div> diff --git a/data/hafas_messages/10.html b/data/hafas_messages/10.html new file mode 100644 index 0000000..9934c7e --- /dev/null +++ b/data/hafas_messages/10.html @@ -0,0 +1,39 @@ +<div id="HIM_Text" class="himMessagesMiddle"> +<div id="HIM_Text__819897"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +<div id="HIM_Text__823996"> +<span class="bold"> +Nauen - +Berlin-Schönefeld Flughafen: +Information. +</span> +<span class=""> +Beachten Sie bitte, es ist heute ein kürzerer Zug als regulär im Einsatz (nur 4 Wagen statt 5). Rollstuhlmitnahme heute nur im Steuerwagen möglich. +</span> +</div> +<div id="HIM_Text__819899"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +<div id="HIM_Text__819900"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +</div> diff --git a/data/hafas_messages/11.html b/data/hafas_messages/11.html new file mode 100644 index 0000000..ab5d5c4 --- /dev/null +++ b/data/hafas_messages/11.html @@ -0,0 +1,32 @@ +<div id="HIM_Text" class="himMessagesMiddle"> +<div id="HIM_Text__811470"> +<span class="bold"> +Rostock Hbf - +Elsterwerda: +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich am Schluss des Zuges. +</span> +</div> +<div id="HIM_Text__824012"> +<span class="bold"> +Rostock Hbf - +Elsterwerda: +Information. +</span> +<span class=""> +Rollstuhlmitnahme und die 1. Klasse befindet sich im Steuerwagen. +</span> +</div> +<div id="HIM_Text__811475"> +<span class="bold"> +Rostock Hbf - +Elsterwerda: +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich am Schluss des Zuges. +</span> +</div> +</div> diff --git a/data/hafas_messages/12.html b/data/hafas_messages/12.html new file mode 100644 index 0000000..531590d --- /dev/null +++ b/data/hafas_messages/12.html @@ -0,0 +1,29 @@ +<div id="HIM_Text" class="himMessagesMiddle"> +<div id="HIM_Text__819897"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +<div id="HIM_Text__819899"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +<div id="HIM_Text__819900"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +</div> diff --git a/data/hafas_messages/13.html b/data/hafas_messages/13.html new file mode 100644 index 0000000..d077ec7 --- /dev/null +++ b/data/hafas_messages/13.html @@ -0,0 +1,22 @@ +<div id="HIM_Text" class="himMessagesHigh"> +<div id="HIM_Text__814042"> +<span class="bold"> +Stuttgart Hbf - +München Hbf: +Bauarbeiten. +</span> +<span class=""> +Die Halte Ulm Hbf, Günzburg, Augsburg Hbf und München-Pasing entfallen. Bitte überprüfen Sie Ihre Verbindung noch einmal kurz vor der Reise. +</span> +</div> +<div id="HIM_Text__814086"> +<span class="bold"> +Stuttgart Hbf - +München Hbf: +Bauarbeiten. +</span> +<span class=""> +Die Ankunft verzögert sich bis zu 30 Minuten. +</span> +</div> +</div> diff --git a/data/hafas_messages/14.html b/data/hafas_messages/14.html new file mode 100644 index 0000000..ad2178e --- /dev/null +++ b/data/hafas_messages/14.html @@ -0,0 +1,82 @@ +<div id="HIM_Text" class="himMessagesMiddle"> +<div id="HIM_Text__811900"> +<span class="bold"> +Berlin Hbf (tief) - +Schwedt(Oder): +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich an der Spitze des Zuges. +</span> +</div> +<div id="HIM_Text__824002"> +<span class="bold"> +Berlin Hbf (tief) - +Schwedt(Oder): +Information. +</span> +<span class=""> +Beachten Sie bitte, es ist heute ein kürzerer Zug als regulär im Einsatz (nur 4 Wagen statt 5) +</span> +</div> +<div id="HIM_Text__811909"> +<span class="bold"> +Berlin Hbf (tief) - +Schwedt(Oder): +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich an der Spitze des Zuges. +</span> +</div> +<div id="HIM_Text__811913"> +<span class="bold"> +Berlin Hbf (tief) - +Schwedt(Oder): +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich an der Spitze des Zuges. +</span> +</div> +<div id="HIM_Text__811915"> +<span class="bold"> +Berlin Hbf (tief) - +Schwedt(Oder): +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich an der Spitze des Zuges. +</span> +</div> +<div id="HIM_Text__811917"> +<span class="bold"> +Berlin Hbf (tief) - +Schwedt(Oder): +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich an der Spitze des Zuges. +</span> +</div> +<div id="HIM_Text__811918"> +<span class="bold"> +Berlin Hbf (tief) - +Schwedt(Oder): +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich an der Spitze des Zuges. +</span> +</div> +<div id="HIM_Text__811922"> +<span class="bold"> +Berlin Hbf (tief) - +Schwedt(Oder): +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich an der Spitze des Zuges. +</span> +</div> +</div> diff --git a/data/hafas_messages/15.html b/data/hafas_messages/15.html new file mode 100644 index 0000000..939b702 --- /dev/null +++ b/data/hafas_messages/15.html @@ -0,0 +1,82 @@ +<div id="HIM_Text" class="himMessagesMiddle"> +<div id="HIM_Text__811900"> +<span class="bold"> +Berlin Hbf (tief) - +Falkenberg(Elster): +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich an der Spitze des Zuges. +</span> +</div> +<div id="HIM_Text__811932"> +<span class="bold"> +Berlin Hbf (tief) - +Falkenberg(Elster): +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich am Schluss des Zuges. +</span> +</div> +<div id="HIM_Text__811934"> +<span class="bold"> +Berlin Hbf (tief) - +Falkenberg(Elster): +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich am Schluss des Zuges. +</span> +</div> +<div id="HIM_Text__811937"> +<span class="bold"> +Berlin Hbf (tief) - +Falkenberg(Elster): +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich am Schluss des Zuges. +</span> +</div> +<div id="HIM_Text__811941"> +<span class="bold"> +Berlin Hbf (tief) - +Falkenberg(Elster): +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich am Schluss des Zuges. +</span> +</div> +<div id="HIM_Text__811945"> +<span class="bold"> +Berlin Hbf (tief) - +Falkenberg(Elster): +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich am Schluss des Zuges. +</span> +</div> +<div id="HIM_Text__811947"> +<span class="bold"> +Berlin Hbf (tief) - +Falkenberg(Elster): +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich am Schluss des Zuges. +</span> +</div> +<div id="HIM_Text__811950"> +<span class="bold"> +Berlin Hbf (tief) - +Falkenberg(Elster): +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich am Schluss des Zuges. +</span> +</div> +</div> diff --git a/data/hafas_messages/16.html b/data/hafas_messages/16.html new file mode 100644 index 0000000..531590d --- /dev/null +++ b/data/hafas_messages/16.html @@ -0,0 +1,29 @@ +<div id="HIM_Text" class="himMessagesMiddle"> +<div id="HIM_Text__819897"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +<div id="HIM_Text__819899"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +<div id="HIM_Text__819900"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +</div> diff --git a/data/hafas_messages/17.html b/data/hafas_messages/17.html new file mode 100644 index 0000000..531590d --- /dev/null +++ b/data/hafas_messages/17.html @@ -0,0 +1,29 @@ +<div id="HIM_Text" class="himMessagesMiddle"> +<div id="HIM_Text__819897"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +<div id="HIM_Text__819899"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +<div id="HIM_Text__819900"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +</div> diff --git a/data/hafas_messages/18.html b/data/hafas_messages/18.html new file mode 100644 index 0000000..6679632 --- /dev/null +++ b/data/hafas_messages/18.html @@ -0,0 +1,52 @@ +<div id="HIM_Text" class="himMessagesMiddle"> +<div id="HIM_Text__811457"> +<span class="bold"> +Elsterwerda - +Neubrandenburg: +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich an der Spitze des Zuges. +</span> +</div> +<div id="HIM_Text__811459"> +<span class="bold"> +Elsterwerda - +Neubrandenburg: +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich an der Spitze des Zuges. +</span> +</div> +<div id="HIM_Text__811461"> +<span class="bold"> +Elsterwerda - +Neubrandenburg: +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich an der Spitze des Zuges. +</span> +</div> +<div id="HIM_Text__811462"> +<span class="bold"> +Elsterwerda - +Neubrandenburg: +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich an der Spitze des Zuges. +</span> +</div> +<div id="HIM_Text__811464"> +<span class="bold"> +Elsterwerda - +Neubrandenburg: +Information. +</span> +<span class=""> +Der Fahrradwagen befindet sich an der Spitze des Zuges. +</span> +</div> +</div> diff --git a/data/hafas_messages/19.html b/data/hafas_messages/19.html new file mode 100644 index 0000000..bdbb911 --- /dev/null +++ b/data/hafas_messages/19.html @@ -0,0 +1,11 @@ +<div id="HIM_Text" class="himMessagesMiddle"> +<div id="HIM_Text__819897"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +</div> diff --git a/data/hafas_messages/2.html b/data/hafas_messages/2.html new file mode 100644 index 0000000..03772d7 --- /dev/null +++ b/data/hafas_messages/2.html @@ -0,0 +1,12 @@ +<div id="HIM_Text" class="himMessagesHigh"> +<div id="HIM_Text__824314"> +<span class="bold"> +Kassel-Wilhelmshöhe - +Hannover Hbf: +Information. +</span> +<span class=""> +Außergewöhnlich hohes Reisendenaufkommen! Reisende, die noch keine Fahrkarte gekauft haben, wählen bitte eine andere Verbindung. +</span> +</div> +</div> diff --git a/data/hafas_messages/20.html b/data/hafas_messages/20.html new file mode 100644 index 0000000..ba53f9e --- /dev/null +++ b/data/hafas_messages/20.html @@ -0,0 +1,20 @@ +<div id="HIM_Text" class="himMessagesMiddle"> +<div id="HIM_Text__819897"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +<div id="HIM_Text__819899"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +</div> diff --git a/data/hafas_messages/21.html b/data/hafas_messages/21.html new file mode 100644 index 0000000..531590d --- /dev/null +++ b/data/hafas_messages/21.html @@ -0,0 +1,29 @@ +<div id="HIM_Text" class="himMessagesMiddle"> +<div id="HIM_Text__819897"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +<div id="HIM_Text__819899"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +<div id="HIM_Text__819900"> +<span class="bold"> +Berlin Zoologischer Garten: +Bauarbeiten. +</span> +<span class=""> +Aufzüge in Berlin Zoologischer Garten Gleis 3/4 außer Betrieb. Grund: Sperrung der Haupthalle und des Zwischendecks im Bahnhof Berlin Zoologischer Garten ab 25.03. Bitte beachten Sie die veränderte Wegeleitung im Bahnhof. Der Aufzug vom und zum Gleis 3/4 steht in dieser Zeit leider nicht zur Verfügung. Umfahrung für mobilitätseingeschränkte Reisende über Berlin-Charlottenburg und Berlin Hauptbahnhof. +</span> +</div> +</div> diff --git a/data/hafas_messages/22.html b/data/hafas_messages/22.html new file mode 100644 index 0000000..6ab25cc --- /dev/null +++ b/data/hafas_messages/22.html @@ -0,0 +1,32 @@ +<div id="HIM_Text" class="himMessagesMiddle"> +<div id="HIM_Text__815867"> +<span class="bold"> +Gemünden(Main) - +Würzburg Hbf: +Bauarbeiten. +</span> +<span class=""> +Die Ankunft verzögert sich um voraussichtlich 10 bis zu 15 Minuten. +</span> +</div> +<div id="HIM_Text__819427"> +<span class="bold"> +Gemünden(Main) - +Würzburg Hbf: +Bauarbeiten. +</span> +<span class=""> +Die Ankunft verzögert sich um voraussichtlich 20 bis zu 25 Minuten. +</span> +</div> +<div id="HIM_Text__819428"> +<span class="bold"> +Gemünden(Main) - +Würzburg Hbf: +Bauarbeiten. +</span> +<span class=""> +Die Ankunft verzögert sich um voraussichtlich 10 bis zu 15 Minuten. +</span> +</div> +</div> diff --git a/data/hafas_messages/23.html b/data/hafas_messages/23.html new file mode 100644 index 0000000..da45e1e --- /dev/null +++ b/data/hafas_messages/23.html @@ -0,0 +1,12 @@ +<div id="HIM_Text" class="himMessagesMiddle"> +<div id="HIM_Text__818868"> +<span class="bold"> +Frankfurt(Main)Hbf - +Limburg(Lahn): +Bauarbeiten. +</span> +<span class=""> +Wegen Oberleitungsarbeiten zwischen Frankfurt(Main)Hbf und Frankfurt-Höchst kommt es bei den Zügen der Linien RB22 / RE20 im Zeitraum von Freitag, 3. Mai bis Sonntag, 23. Juni 2019 (an ausgewählten Tagen) zu Fahrplanänderungen. Die betroffenen Züge der Linien RB22 / RE20 bekommen eine Verspätung von bis zu 10 Minuten. Bitte rechnen Sie mit Gleisänderungen. Informieren Sie sich frühzeitig über Ihre geplanten Verbindungen und wählen Sie gegebenenfalls eine frühere Zugverbindung, um Ihre Anschlüsse an Ihren Umsteigebahnhöfen erreichen zu können. +</span> +</div> +</div> diff --git a/data/hafas_messages/24.html b/data/hafas_messages/24.html new file mode 100644 index 0000000..02b5f1e --- /dev/null +++ b/data/hafas_messages/24.html @@ -0,0 +1,12 @@ +<div id="HIM_Text" class="himMessagesLow"> +<div id="HIM_Text__788609"> +<span class="bold"> +Stralsund Hbf - +Karlsruhe Hbf: +Information. +</span> +<span class=""> +Seit dem 09. Dezember 2018 verkehren auf der zweistündlichen Linie 26 von Karlsruhe nach Hamburg und weiter nach Stralsund (via Frankfurt Hbf, Marburg, Kassel), statt der bisher eingesetzten Intercity-Wagen, moderne ICE-Züge. Für die Nutzung dieser ICE-Züge gelten die bundesweit einheitlichen Konditionen für die Nutzung von ICE-Zügen: Sowohl für Flexpreis-Fahrkarten als auch für Zeitkarten ist zwischen Karlsruhe und Rostock eine ICE-Berechtigung zum aktuell gültigen Preis erforderlich. Fahrkarten des Nahverkehrs sowie der Verkehrsverbünde haben in den ICE-Zügen keine Gültigkeit. +</span> +</div> +</div> diff --git a/data/hafas_messages/3.html b/data/hafas_messages/3.html new file mode 100644 index 0000000..1768cb5 --- /dev/null +++ b/data/hafas_messages/3.html @@ -0,0 +1,22 @@ +<div id="HIM_Text" class="himMessagesHigh"> +<div id="HIM_Text__820800"> +<span class="bold"> +Ahrensburg - +Bad Oldesloe: +Bauarbeiten. +</span> +<span class=""> +Der Zug fällt zwischen Ahrensburg und Bad Oldesloe aus. Ein Ersatzverkehr von Ahrensburg nach Bad Oldesloe ist eingerichtet. Bitte überprüfen Sie Ihre Verbindung noch einmal kurz vor der Reise. +</span> +</div> +<div id="HIM_Text__820803"> +<span class="bold"> +Bargteheide - +Bad Oldesloe: +Bauarbeiten. +</span> +<span class=""> +Der Zug fällt zwischen Bargteheide und Bad Oldesloe aus. Ein Ersatzverkehr von Bargteheide nach Bad Oldesloe ist eingerichtet. Bitte überprüfen Sie Ihre Verbindung noch einmal kurz vor der Reise. +</span> +</div> +</div> diff --git a/data/hafas_messages/4.html b/data/hafas_messages/4.html new file mode 100644 index 0000000..86d064f --- /dev/null +++ b/data/hafas_messages/4.html @@ -0,0 +1,12 @@ +<div id="HIM_Text" class="himMessagesHigh"> +<div id="HIM_Text__797833"> +<span class="bold"> +Neumünster - +Kiel Hbf: +Bauarbeiten. +</span> +<span class=""> +Der Zug fällt zwischen Neumünster und Kiel Hbf aus. Ein Ersatzverkehr von Neumünster nach Kiel Hbf ist eingerichtet. Bitte überprüfen Sie Ihre Verbindung noch einmal kurz vor der Reise. +</span> +</div> +</div> diff --git a/data/hafas_messages/5.html b/data/hafas_messages/5.html new file mode 100644 index 0000000..41d0276 --- /dev/null +++ b/data/hafas_messages/5.html @@ -0,0 +1,12 @@ +<div id="HIM_Text" class="himMessagesMiddle"> +<div id="HIM_Text__805562"> +<span class="bold"> +Rendsburg - +Flensburg: +Bauarbeiten. +</span> +<span class=""> +Die Ankunft verzögert sich bis zu 15 Minuten. Bitte überprüfen Sie Ihre Verbindung noch einmal kurz vor der Reise. +</span> +</div> +</div> diff --git a/data/hafas_messages/6.html b/data/hafas_messages/6.html new file mode 100644 index 0000000..2820117 --- /dev/null +++ b/data/hafas_messages/6.html @@ -0,0 +1,11 @@ +<div id="HIM_Text" class="himMessagesLow"> +<div id="HIM_Text__819298"> +<span class="bold"> +Uelzen: +Störung. +</span> +<span class=""> +Aufzug Gl 101 wird umgebaut (Letzte Aktualisierung 13:10) +</span> +</div> +</div> diff --git a/data/hafas_messages/7.html b/data/hafas_messages/7.html new file mode 100644 index 0000000..504fdf2 --- /dev/null +++ b/data/hafas_messages/7.html @@ -0,0 +1,12 @@ +<div id="HIM_Text" class="himMessagesMiddle"> +<div id="HIM_Text__820812"> +<span class="bold"> +Hamburg Hbf - +Lübeck Hbf: +Bauarbeiten. +</span> +<span class=""> +Der Zug hält zusätzlich in Ahrensburg und Bargteheide. Bitte überprüfen Sie Ihre Verbindung noch einmal kurz vor der Reise. +</span> +</div> +</div> diff --git a/data/hafas_messages/8.html b/data/hafas_messages/8.html new file mode 100644 index 0000000..4a5c77a --- /dev/null +++ b/data/hafas_messages/8.html @@ -0,0 +1,12 @@ +<div id="HIM_Text" class="himMessagesMiddle"> +<div id="HIM_Text__807918"> +<span class="bold"> +Hamburg Hbf - +Ahrensburg: +Bauarbeiten. +</span> +<span class=""> +Die Ankunft verzögert sich bis zu 10 Minuten. +</span> +</div> +</div> diff --git a/data/hafas_messages/9.html b/data/hafas_messages/9.html new file mode 100644 index 0000000..a2a19a4 --- /dev/null +++ b/data/hafas_messages/9.html @@ -0,0 +1,12 @@ +<div id="HIM_Text" class="himMessagesMiddle"> +<div id="HIM_Text__823981"> +<span class="bold"> +Berlin Südkreuz - +Nauen: +Information. +</span> +<span class=""> +Der Zug verkehrt in umgekehrter Wagenreihung. Die Rollstuhlmitnahme und die 1. Klasse befindet sich im Steuerwagen. +</span> +</div> +</div> diff --git a/external_hafas_messages.go b/external_hafas_messages.go new file mode 100644 index 0000000..19f7e39 --- /dev/null +++ b/external_hafas_messages.go @@ -0,0 +1,101 @@ +package bahn + +import ( + "bytes" + "github.com/andybalholm/cascadia" + "golang.org/x/net/html" + "io" + "regexp" + "strings" +) + +func HafasMessagesFromBytes(source []byte) ([]HafasMessage, error) { + return HafasMessagesFromReader(bytes.NewReader(source)) +} + +var hafasMessageHighSelector = cascadia.MustCompile(".himMessagesHigh > div") +var hafasMessageMiddleSelector = cascadia.MustCompile(".himMessagesMiddle > div") +var hafasMessageLowSelector = cascadia.MustCompile(".himMessagesLow > div") + +var hafasMessageValiditySelector = cascadia.MustCompile("span.bold") +var hafasMessageContentSelector = cascadia.MustCompile("span:not(.bold)") + +var hafasMessageValidityRegex = regexp.MustCompile("^(?P<From>.+?)(?:\\p{Z}-\\p{Z}\\n(?P<To>.+?))?(?::\\p{Z}\\n(?P<Subject>.+?)\\.?)?$") +var hafasMessageIdRegex = regexp.MustCompile("^HIM_Text__(?P<Id>\\d+)$") + +func HafasMessagesFromReader(source io.Reader) ([]HafasMessage, error) { + var err error + var messages []HafasMessage + + var document *html.Node + if document, err = html.Parse(source); err != nil { + return messages, err + } + + parseMessage := func(node *html.Node, priority HafasMessagePriority) { + validityNode := hafasMessageValiditySelector.MatchFirst(node) + contentNode := hafasMessageContentSelector.MatchFirst(node) + + validity := strings.TrimSpace(parseText(validityNode)) + content := strings.TrimSpace(parseText(contentNode)) + + var id string + for _, attr := range node.Attr { + if attr.Namespace == "" && attr.Key == "id" { + id = attr.Val + } + } + + parsedId := parseRegexGroups(hafasMessageIdRegex, strings.TrimSpace(id)) + parsedValidity := parseRegexGroups(hafasMessageValidityRegex, strings.TrimSpace(validity)) + + messages = append(messages, HafasMessage{ + Priority: priority, + Id: parsedId["Id"], + From: parsedValidity["From"], + To: parsedValidity["To"], + Subject: parsedValidity["Subject"], + Content: content, + }) + } + + for _, node := range hafasMessageHighSelector.MatchAll(document) { + parseMessage(node, HafasMessagePriorityHigh) + } + for _, node := range hafasMessageMiddleSelector.MatchAll(document) { + parseMessage(node, HafasMessagePriorityMiddle) + } + for _, node := range hafasMessageLowSelector.MatchAll(document) { + parseMessage(node, HafasMessagePriorityLow) + } + return messages, nil +} + +func parseText(node *html.Node) string { + var result string + parseTextInternal(node, &result) + return result +} + +func parseTextInternal(node *html.Node, out *string) { + if node.Type == html.TextNode { + *out += node.Data + } else { + for c := node.FirstChild; c != nil; c = c.NextSibling { + parseTextInternal(c, out) + } + } +} + +func parseRegexGroups(regex *regexp.Regexp, url string) map[string]string { + match := regex.FindStringSubmatch(url) + + paramsMap := make(map[string]string) + for i, name := range regex.SubexpNames() { + if i > 0 && i <= len(match) { + paramsMap[name] = match[i] + } + } + + return paramsMap +} diff --git a/go.mod b/go.mod index 5ab00a1..6748926 100644 --- a/go.mod +++ b/go.mod @@ -2,4 +2,8 @@ module git.kuschku.de/justjanne/bahn-api go 1.12 -require gopkg.in/yaml.v2 v2.2.2 +require ( + github.com/andybalholm/cascadia v1.0.0 + golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01 + gopkg.in/yaml.v2 v2.2.2 +) diff --git a/go.sum b/go.sum index bd555a3..f8b4c0f 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,7 @@ +github.com/andybalholm/cascadia v1.0.0 h1:hOCXnnZ5A+3eVDX8pvgl4kofXv2ELss0bKcqRySc45o= +github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= +golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01 h1:po1f06KS05FvIQQA2pMuOWZAUXiy1KYdIf0ElUU2Hhc= +golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/model_hafas_messages.go b/model_hafas_messages.go new file mode 100644 index 0000000..bdb3a05 --- /dev/null +++ b/model_hafas_messages.go @@ -0,0 +1,18 @@ +package bahn + +type HafasMessage struct { + Id string `json:"id,omitempty"yaml:"id,omitempty"` + Priority HafasMessagePriority `json:"priority,omitempty"yaml:"priority,omitempty"` + From string `json:"from,omitempty"yaml:"from,omitempty"` + To string `json:"to,omitempty"yaml:"to,omitempty"` + Subject string `json:"subject,omitempty"yaml:"subject,omitempty"` + Content string `json:"content,omitempty"yaml:"content,omitempty"` +} + +type HafasMessagePriority string + +const ( + HafasMessagePriorityLow HafasMessagePriority = "LOW" + HafasMessagePriorityMiddle HafasMessagePriority = "MIDDLE" + HafasMessagePriorityHigh HafasMessagePriority = "HIGH" +) diff --git a/out/canonicalize.sh b/out/canonicalize.sh index a2694c1..afc1ba2 100755 --- a/out/canonicalize.sh +++ b/out/canonicalize.sh @@ -1,6 +1,6 @@ #!/bin/bash -function cleanup_xml { +function cleanup_xml_roundtrip { for i in $(seq 0 1 $2); do CURRENT_FILE="${1}/${i}" CURRENT_FILE_ROUNDTRIP="${CURRENT_FILE}.roundtrip.xml" @@ -15,7 +15,7 @@ function cleanup_xml { done } -function cleanup_json { +function cleanup_json_roundtrip { for i in $(seq 0 1 $2); do CURRENT_FILE="${1}/${i}" CURRENT_FILE_ROUNDTRIP="${CURRENT_FILE}.roundtrip.json" @@ -29,10 +29,21 @@ function cleanup_json { done } +function cleanup_json { + for i in $(seq 0 1 $2); do + CURRENT_FILE="${1}/${i}" + CURRENT_FILE_JSON="${CURRENT_FILE}.json" + + jq "." "${CURRENT_FILE_JSON}" > "${CURRENT_FILE}.tmp" + mv "${CURRENT_FILE}.tmp" "${CURRENT_FILE_JSON}" + done +} + CURRENT_DIR=$(dirname $(realpath "$0")) -cleanup_xml "${CURRENT_DIR}/iris_station" 2 -cleanup_xml "${CURRENT_DIR}/iris_realtime" 4 -cleanup_xml "${CURRENT_DIR}/iris_timetable" 4 -cleanup_xml "${CURRENT_DIR}/iris_wingdef" 2 -cleanup_json "${CURRENT_DIR}/apps_wagenreihung" 226 +cleanup_xml_roundtrip "${CURRENT_DIR}/iris_station" 2 +cleanup_xml_roundtrip "${CURRENT_DIR}/iris_realtime" 4 +cleanup_xml_roundtrip "${CURRENT_DIR}/iris_timetable" 4 +cleanup_xml_roundtrip "${CURRENT_DIR}/iris_wingdef" 2 +cleanup_json_roundtrip "${CURRENT_DIR}/apps_wagenreihung" 226 +cleanup_json "${CURRENT_DIR}/hafas_messages" 24 diff --git a/roundtrip_test.go b/roundtrip_test.go index 5675f9c..7a7ec63 100644 --- a/roundtrip_test.go +++ b/roundtrip_test.go @@ -132,7 +132,7 @@ func jsonInput(raw interface{}, filename string) { } } -func xmlOutput(raw interface{}, data interface{}, filename string) { +func xmlRoundtrip(raw interface{}, data interface{}, filename string) { var err error if err = encodeXml(raw, filename+".roundtrip.xml"); err != nil { @@ -148,7 +148,7 @@ func xmlOutput(raw interface{}, data interface{}, filename string) { } } -func jsonOutput(raw interface{}, data interface{}, filename string) { +func jsonRoundtrip(raw interface{}, data interface{}, filename string) { var err error if err = encodeJson(raw, filename+".roundtrip.json"); err != nil { @@ -164,6 +164,18 @@ func jsonOutput(raw interface{}, data interface{}, filename string) { } } +func jsonOutput(raw interface{}, data interface{}, filename string) { + var err error + + if err = encodeYaml(data, filename+".yaml"); err != nil { + panic(err.Error()) + } + + if err = encodeJson(data, filename+".json"); err != nil { + panic(err.Error()) + } +} + const InputFolder = "data" const OutputFolder = "out" @@ -172,6 +184,7 @@ var timetableData []byte var realtimeData []byte var wingDefinitionData []byte var coachSequenceData []byte +var hafasMessageData []byte func TestMain(m *testing.M) { var err error @@ -191,6 +204,9 @@ func TestMain(m *testing.M) { if coachSequenceData, err = ioutil.ReadFile(fmt.Sprintf("%s/%s/%d.json", InputFolder, "apps_wagenreihung", 0)); err != nil { panic(err) } + if hafasMessageData, err = ioutil.ReadFile(fmt.Sprintf("%s/%s/%d.html", InputFolder, "hafas_messages", 0)); err != nil { + panic(err) + } os.Exit(m.Run()) } @@ -225,7 +241,13 @@ func BenchmarkCoachSequence(b *testing.B) { } } -func BenchmarkRoundtrip(b *testing.B) { +func BenchmarkHafasMessages(b *testing.B) { + if _, err := HafasMessagesFromBytes(coachSequenceData); err != nil { + b.Error(err.Error()) + } +} + +func TestRoundtrip(t *testing.T) { for i := 0; i < 3; i++ { var raw rawStations folderName := "iris_station" @@ -233,7 +255,7 @@ func BenchmarkRoundtrip(b *testing.B) { output := fmt.Sprintf("%s/%s/%d", OutputFolder, folderName, i) xmlInput(&raw, input) data := parseStations(raw) - xmlOutput(&raw, &data, output) + xmlRoundtrip(&raw, &data, output) } for i := 0; i < 5; i++ { @@ -243,7 +265,7 @@ func BenchmarkRoundtrip(b *testing.B) { output := fmt.Sprintf("%s/%s/%d", OutputFolder, folderName, i) xmlInput(&raw, input) data := parseTimetable(raw) - xmlOutput(&raw, &data, output) + xmlRoundtrip(&raw, &data, output) } for i := 0; i < 5; i++ { @@ -253,7 +275,7 @@ func BenchmarkRoundtrip(b *testing.B) { output := fmt.Sprintf("%s/%s/%d", OutputFolder, folderName, i) xmlInput(&raw, input) data := parseTimetable(raw) - xmlOutput(&raw, &data, output) + xmlRoundtrip(&raw, &data, output) } for i := 0; i < 3; i++ { @@ -263,7 +285,7 @@ func BenchmarkRoundtrip(b *testing.B) { output := fmt.Sprintf("%s/%s/%d", OutputFolder, folderName, i) xmlInput(&raw, input) data := parseWingDefinition(raw) - xmlOutput(&raw, &data, output) + xmlRoundtrip(&raw, &data, output) } for i := 0; i < 227; i++ { @@ -273,6 +295,22 @@ func BenchmarkRoundtrip(b *testing.B) { output := fmt.Sprintf("%s/%s/%d", OutputFolder, folderName, i) jsonInput(&raw, input) data := parseCoachSequence(raw) + jsonRoundtrip(&raw, &data, output) + } + + for i := 0; i < 25; i++ { + var raw []HafasMessage + folderName := "hafas_messages" + input := fmt.Sprintf("%s/%s/%d.html", InputFolder, folderName, i) + output := fmt.Sprintf("%s/%s/%d", OutputFolder, folderName, i) + f, err := os.Open(input) + if err != nil { + panic(err) + } + data, err := HafasMessagesFromReader(f) + if err != nil { + panic(err) + } jsonOutput(&raw, &data, output) } } -- GitLab