summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Krause <[email protected]>2017-12-22 09:43:45 +0100
committerVolker Krause <[email protected]>2017-12-22 12:07:07 +0100
commit1ed96df9de27f2bf7c52b65733c3964eb02df807 (patch)
tree76e844ecba34fff0c381529dab79bd226c8bc853
parent8c4c79d041dcd7133bab584f31e9a95e51538043 (diff)
Add extractor for Swiss flight booking confirmations
-rw-r--r--plugins/messageviewer/bodypartformatter/autotests/unstructureddata/swiss_one-leg-return.json50
-rw-r--r--plugins/messageviewer/bodypartformatter/autotests/unstructureddata/swiss_one-leg-return.txt7
-rw-r--r--plugins/messageviewer/bodypartformatter/semantic/extractors/extractors.qrc2
-rw-r--r--plugins/messageviewer/bodypartformatter/semantic/extractors/swiss.js59
-rw-r--r--plugins/messageviewer/bodypartformatter/semantic/extractors/swiss.json6
5 files changed, 124 insertions, 0 deletions
diff --git a/plugins/messageviewer/bodypartformatter/autotests/unstructureddata/swiss_one-leg-return.json b/plugins/messageviewer/bodypartformatter/autotests/unstructureddata/swiss_one-leg-return.json
new file mode 100644
index 0000000..6da9ae5
--- /dev/null
+++ b/plugins/messageviewer/bodypartformatter/autotests/unstructureddata/swiss_one-leg-return.json
@@ -0,0 +1,50 @@
+[
+ {
+ "@type": "FlightReservation",
+ "reservationFor": {
+ "@type": "Flight",
+ "airline": {
+ "@type": "Airline",
+ "iataCode": "LX"
+ },
+ "arrivalAirport": {
+ "@type": "Airport",
+ "iataCode": "ZRH",
+ "name": "Zürich"
+ },
+ "arrivalTime": "2017-09-10T08:15:00",
+ "departureAirport": {
+ "@type": "Airport",
+ "iataCode": "TXL",
+ "name": "Berlin"
+ },
+ "departureTime": "2017-09-10T06:45:00",
+ "flightNumber": "963"
+ },
+ "reservationNumber": "XXX007"
+ },
+ {
+ "@type": "FlightReservation",
+ "reservationFor": {
+ "@type": "Flight",
+ "airline": {
+ "@type": "Airline",
+ "iataCode": "LX"
+ },
+ "arrivalAirport": {
+ "@type": "Airport",
+ "iataCode": "TXL",
+ "name": "Berlin"
+ },
+ "arrivalTime": "2017-09-15T22:15:00",
+ "departureAirport": {
+ "@type": "Airport",
+ "iataCode": "ZRH",
+ "name": "Zürich"
+ },
+ "departureTime": "2017-09-15T20:50:00",
+ "flightNumber": "962"
+ },
+ "reservationNumber": "XXX007"
+ }
+]
diff --git a/plugins/messageviewer/bodypartformatter/autotests/unstructureddata/swiss_one-leg-return.txt b/plugins/messageviewer/bodypartformatter/autotests/unstructureddata/swiss_one-leg-return.txt
new file mode 100644
index 0000000..e373822
--- /dev/null
+++ b/plugins/messageviewer/bodypartformatter/autotests/unstructureddata/swiss_one-leg-return.txt
@@ -0,0 +1,7 @@
+// technically this is HTML, but it contains soooo much style sheet noise I didn't want to check that in, so this is preprocssed content already
+ Vielen Dank, Ihre Buchung ist bestätigt.
+ Vielen Dank, Ihre Buchung ist bestätigt. Buchungsreferenz: XXX007 Sehr geehrter Herr Doe
+
+Danke, dass Sie mit uns fliegen. Ihre Buchungsdetails finden Sie untenstehend. Eine gute Reise und bis bald. Mit Ihrer Buchungsreferenz können Sie jederzeit Ihre Buchungen bearbeiten . Wenn Sie ein elektronisches e-Ticket wünschen, können Sie es unter Elektronische Dokumente bestellen Fluginformationen Hinflug Berlin (TXL) - Zürich (ZRH) So 10.09.2017 06:45 TXL 08:15 ZRH Reisedauer 1h 30m LX 963 Classic - K Durchgeführt von SWISS Rückflug Zürich (ZRH) - Berlin (TXL) Fr 15.09.2017 20:50 ZRH 22:15 TXL Reisedauer 1h 25m LX 962 Classic - T Durchgeführt von SWISS Bitte beachten Sie • Je nach gewähltem Tarif ist nur die Mitnahme von Handgepäck im Ticket inbegriffen. Überprüfen Sie die Konditionen Ihres Tarifs. • Nach geltendem EU-Recht haben Sie das Recht den Namen und die Adresse einer zusätzlichen Kontaktperson bei SWISS anzugeben. Gepäckinformationen Berlin (TXL) - Zürich (ZRH) So 10.09.2017 1 Erwachsener Freigepäck (inkl.) 1 Gepäckstück à 23kg Total 1 Gepäckstück à 23kg Zürich (ZRH) - Berlin (TXL) Fr 15.09.2017 1 Erwachsener Freigepäck (inkl.) 1 Gepäckstück à 23kg Total 1 Gepäckstück à 23kg Gepäckregeln Aufgegebenes Gepäck Übergepäck Gepäckgebühren auf Codeshare und Interline Partner Gewählte Leistungen Name E-Ticket Services Preis in EUR John Doe 1234567850627 Flugtarif 42,00 Internationaler Zuschlag 42,00 Flughafentaxen 42,40 SWISS Service Fee 0,00 OPC 2,50 Sitzreservation 0,00 999,90 Gesamtpreis EUR 999,90
+ Quicklinks Buchung verwalten Reisevorbereitung An Bord Zürich entdecken Mietwagen Profitieren Sie jetzt von einer grossen Auswahl an Mietwagen. Mit SWISS zu günstigen Preisen buchen. Jetzt buchen Hotel Angebote Finden Sie mit SWISS das perfekte Hotel zu günstigen Preisen. Jetzt buchen Aktivitäten Die besten Angebote für Aktivitäten an Ihrem Reiseziel. Jetzt buchen Rechtliches | Beförderungsbestimmungen | Kontakt
+
diff --git a/plugins/messageviewer/bodypartformatter/semantic/extractors/extractors.qrc b/plugins/messageviewer/bodypartformatter/semantic/extractors/extractors.qrc
index 076c8c0..860568a 100644
--- a/plugins/messageviewer/bodypartformatter/semantic/extractors/extractors.qrc
+++ b/plugins/messageviewer/bodypartformatter/semantic/extractors/extractors.qrc
@@ -10,5 +10,7 @@
<file>eurowings.js</file>
<file>fcmtravel.json</file>
<file>fcmtravel.js</file>
+ <file>swiss.json</file>
+ <file>swiss.js</file>
</qresource>
</RCC>
diff --git a/plugins/messageviewer/bodypartformatter/semantic/extractors/swiss.js b/plugins/messageviewer/bodypartformatter/semantic/extractors/swiss.js
new file mode 100644
index 0000000..8c0e1c5
--- /dev/null
+++ b/plugins/messageviewer/bodypartformatter/semantic/extractors/swiss.js
@@ -0,0 +1,59 @@
+/*
+ Copyright (c) 2017 Volker Krause <[email protected]>
+
+ This library is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at your
+ option) any later version.
+
+ This library is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
+ License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+*/
+
+function main(text) {
+ var reservations = new Array();
+ var bookingRef = text.match(/Buchungsreferenz: ([A-Z0-9]{6})/);
+
+ var pos = 0;
+ while (true) {
+ var flight = text.substr(pos).match(/Hinflug|Rückflug/);
+ if (!flight)
+ break;
+ var index = flight.index + flight[0].length;
+
+ var res = JsonLd.newObject("FlightReservation");
+ res.reservationNumber = bookingRef[1];
+ res.reservationFor = JsonLd.newObject("Flight");
+
+ var leg = text.substr(pos + index).match(/ +(.+?) \(([A-Z]{3})\) - (.+?) \(([A-Z]{3})\) +[A-Z][a-z] (\d{2}.\d{2}.\d{4}) +(\d{2}:\d{2}) +[A-Z]{3} +(\d{2}:\d{2}) .*? ([A-Z0-9]{2}) (\d{3,4})/);
+ if (!leg)
+ break;
+ index += leg.index + leg[0].length;
+ res.reservationFor.departureAirport = JsonLd.newObject("Airport");
+ res.reservationFor.departureAirport.name = leg[1];
+ res.reservationFor.departureAirport.iataCode = leg[2];
+ res.reservationFor.arrivalAirport = JsonLd.newObject("Airport");
+ res.reservationFor.arrivalAirport.name = leg[3];
+ res.reservationFor.arrivalAirport.iataCode = leg[4];
+ res.reservationFor.departureTime = JsonLd.toDateTime(leg[5] + ' ' + leg[6], "dd.MM.yyyy hh:mm", "en");
+ res.reservationFor.arrivalTime = JsonLd.toDateTime(leg[5] + ' ' + leg[7], "dd.MM.yyyy hh:mm", "en");
+ res.reservationFor.flightNumber = leg[9];
+ res.reservationFor.airline = JsonLd.newObject("Airline");
+ res.reservationFor.airline.iataCode = leg[8];
+ // TODO: parse the operated by part to fill in airline name
+
+ reservations.push(res);
+ if (index == 0)
+ break;
+ pos += index;
+ }
+
+ return reservations;
+}
diff --git a/plugins/messageviewer/bodypartformatter/semantic/extractors/swiss.json b/plugins/messageviewer/bodypartformatter/semantic/extractors/swiss.json
new file mode 100644
index 0000000..7020300
--- /dev/null
+++ b/plugins/messageviewer/bodypartformatter/semantic/extractors/swiss.json
@@ -0,0 +1,6 @@
+{
+ "filter": [
+ { "header": "From", "match": "[email protected]" }
+ ],
+ "script": "swiss.js"
+}