Dies ist eine Android-App, mit der man nach Inlandsflugtickets suchen und auf der Website der Fluggesellschaft
eine Buchung vornehmen kann.
Ich reise persönlich recht häufig nach Jeju,
und während ich bequem und schnell nach günstigen Flugtickets gesucht habe,
ist mir die Idee gekommen und ich habe die App entwickelt.
[ Hauptfunktionen ]
- Vergleichssuche für Flugtickets
- Flugtickets können direkt auf der Website der Fluggesellschaft gebucht werden
[ Berücksichtigte Punkte ]
- Sie wurde leichtgewichtig entwickelt, damit sie auch auf leistungsschwachen Smartphones läuft.
- Wenn bereits eine App der jeweiligen Fluggesellschaft installiert ist, kann diese geöffnet werden.
[ Unterschiede zu anderen Apps ]
- Keine Gebühren.
- Nutzer können über diese App Flugtickets direkt selbst buchen.
- Es werden keine personenbezogenen Daten verlangt. Kein Login erforderlich.
[ Verwendete Technologien ]
- Android : WebView, java
- Frontend : Vanilna JS, CSS, Webpack, Swagger API
Wenn Sie Fragen zur Entwicklung haben, beantworte ich diese gern.
Da ich die App als Hobbyprojekt erstellt habe, gibt es noch viele Punkte, die verbessert werden können.
Ich würde mich über entsprechendes Feedback freuen.
16 Kommentare
Wie haben Sie die API der Airline-Website analysiert?
Ich bin ziemlich brachial vorgegangen. -_-
Korean Air, Asiana, Jin Air, Jeju Air, T'way, Air Seoul, Air Busan, Eastar
Google Flights, Naver Flug, Webtour, Interpark Flug usw.
Ich bin auf die Websites der hierzulande vorgestellten Airlines gegangen
und habe für jede einzelne ein Debugger-Fenster und Packet-Capturing für den Netzwerkverkehr offen gehabt
und analysiert, wie sie miteinander kommunizieren.
Wenn man so analysiert, sieht man irgendwann den Weg(?).
Ich würde das auch gern analysieren, aber wenn ich es mir ansehe, erkenne ich irgendwie nicht viel T_T Könnten Sie mir vielleicht wenigstens ein paar Tipps geben..?
Und dann ...
Da die Zahlungssysteme der einzelnen Fluggesellschaften sehr unterschiedlich sind,
tritt eine Vielzahl von Fehlern auf,
wenn man versucht, die Zahlung in einer WebView durchzuführen.
Einfach erklärt:
So wie man beim Banking am PC Sicherheitsprogramme installieren muss,
gibt es auch Stellen, an denen die Zahlung nur funktioniert,
wenn man ein Sicherheitsprogramm für Android installiert,
weshalb
man, wenn eine Fluggesellschaft 5 Zahlungsmodule hat
und es 8 Fluggesellschaften gibt, ungefähr 40 verschiedene Tests durchführen muss.
Das ist für eine Einzelperson schwer zu bewältigen.
Ich habe in einer anderen Community kurz gefragt,
wie man Flugtickets bucht ...
Dort sucht man nur bei Naver, Interpark oder Google Flights
nach dem Preis.
Die eigentliche Buchung erfolgt dann über die App der Fluggesellschaft.
Meine App war anfangs auch mit einer ähnlichen Absicht entwickelt worden.
Suchen ... und dann, ohne die App der Fluggesellschaft zu öffnen, direkt zum Suchergebnisfenster auf der Website der Fluggesellschaft wechseln
und sofort bezahlen ...
Wenn ich einen Rat geben darf ...
Es gibt den Firefox-Browser für Entwickler.
Auch die Chrome-Entwicklertools sind ganz gut, aber
es gibt leichte Unterschiede.
Normalerweise wird die API aufgerufen und dann zur nächsten Seite weitergeleitet, daher ist es nicht leicht herauszufinden,
wie die eigentliche API aufgerufen wird.
Man kann ziemlich brachial den Webvorgang stoppen, bevor die Weiterleitung erfolgt ...
Oder ...
starten Sie ein Programm zum Mitschneiden von Netzwerkpaketen
und überwachen Sie damit den Verkehr; so können Sie die endgültige API finden.
Selbst wenn man die API gefunden hat ...
wenn Authentifizierungsschlüssel, Cookie-Informationen und die zugehörigen Sitzungsdaten nicht stimmen,
tritt auch beim Aufruf dieser API ein Fehler auf.
Da jede Fluggesellschaft ihre eigenen Besonderheiten hat,
braucht man wirklich -_- einige Tricks.
Am schwierigsten ist Korean Air!! Sie verwenden Angular,
daher ist Reverse Engineering sehr schwierig.
Ich war schon kurz davor, alles hinzuschmeißen ...
Ich habe ungefähr zwei Jahre lang damit herumprobiert. Hahaha, weil ich nicht der Hellste bin ... mussten eben Hände und Füße leiden ...
Ich probiere es zunächst mit Jin Air. Dürfte ich fragen, wie ihr die Verarbeitung von
x-csrf-tokenund den Cookie-Werten gehandhabt habt ...? Bei den anderen Fluggesellschaften habe ich noch keinen richtigen Ansatz, aber bei Jin Air habe ich herausgefunden, wie die Anfrage gesendet werden muss — diese beiden Werte sind allerdings das Problem T_TWenn Sie in Chrome, Firefox oder Edge
F12drücken,öffnen sich die Entwicklertools.
Wählen Sie dort den Tab „Debugger“ und prüfen Sie links das Quellfenster.
Wenn Sie dann den Tab „Speicher“ auswählen, gibt es links Einträge wie Local Storage, Session Storage, Cache Storage, IndexedDB und Cookies.
Schauen Sie sich das an ...
Wählen Sie dann den Tab „Netzwerk“ und prüfen Sie, wie die Pakete übertragen werden, wenn Sie auf die Webseite klicken.
Wenn Sie das grob verstanden haben,
setzen Sie im Tab „Debugger“ Breakpoints
und müssen in diesem Zustand einzeln überprüfen,
wie die Webseite mit dem Server kommuniziert.
Jin Air ist eher einfach ^^;;; in letzter Zeit wurde die Oberfläche zwar hübsch überarbeitet.
Die interne Logik hat sich aber im Vergleich zu früher (fast unverändert seit etwa 2 Jahren) kaum geändert.
Wenn ein vom Server erzeugtes Token an den Client übergeben wird, prüfen Sie,
wo es im Speicher innerhalb des Webbrowsers abgelegt wird.
In meinem Fall nehme ich einfach nur Benutzerinformationen und Datumsinformationen,
wechsle nur bis zu dem entsprechenden Bildschirm
und scrolle den Bildschirm dann bis zur Position der betreffenden Zeit — das war’s.
Hier könnte man auch auf den Preis klicken und den Login auslösen.
Dieser Teil ist aber wirklich sehr stark vom Einzelfall abhängig ...
Deshalb habe ich es so gelassen, dass der Benutzer frei damit umgehen kann.
Einfacher gesagt:
Der Benutzer startet nicht die Airline-App,
sondern ruft einfach mit einem häufig genutzten Webbrowser auf dem Smartphone (Chrome, Samsung Internet usw.)
die Website der Airline auf, sucht dort,
loggt sich ein und bezahlt.
Wenn man das jedoch mit einer WebView umsetzt,
gibt es sehr viele Einschränkungen, sodass es nicht sauber implementiert werden kann.
Jede Airline ist mit allen möglichen seltsamen Logiken implementiert ...
Selbst bei Jin Air dürfte es mehrere Bezahlsysteme geben.
Man müsste dafür alle Integrationstests durchprobieren ...
Ich habe diesen Beitrag auch gesehen und wollte es vor allem mit den Airlines auf einer Strecke versuchen, die ich oft fliege, aber ich werde dabei wohl auch ziemlich viel herumprobieren müssen hahaha.
Danke
Tolles Projekt!! Schade, dass ich kein Android habe T_T Ich hoffe auf eine iOS-Version oder eine Webseite!!
Da es eine Web-App ist … hätte ich sie auch als Webseite bauen können …^^
Aber ich wollte mich nicht mit der Serververwaltung herumschlagen -_-
Also habe ich einfach alle Dateien für die Webseite direkt aufs Handy gepackt.
Aus Sicht der Nutzer muss keine Verbindung zu einem Server hergestellt werden, daher …
ist die Reaktionsgeschwindigkeit auch schnell …
Dadurch gab es allerdings …
viele sicherheitsbezogene Einschränkungen und Konflikte,
weshalb ich beim Entwickeln ziemlich zu kämpfen hatte.
Vor allem bei den Bezahlmodulen
war es je nach Fluggesellschaft völlig unterschiedlich, und es hingen die unterschiedlichsten Bezahlsysteme daran.
Erst kurz vor der Veröffentlichung habe ich das gemerkt,
und die Tests waren entsprechend ziemlich anstrengend.
Ich habe mir beim gelegentlichen Kauf auch mal einen Crawler gebaut, um nach dem günstigsten Preis zu suchen, daher klingt das nützlich, haha.
Ich habe noch eine Frage: Gab es bei Skyscanner oft viele Angebote, die dort nicht auftauchten?
Ausländische Flugticket-Suchseiten wie Skyscanner unterstützen die globale Suche.
Das heißt, sie sind darauf ausgelegt, grenzüberschreitende Reisen zum günstigsten Preis zu finden, daher waren sie für Inlandsflüge eher weniger geeignet.
Für den Inlandsbereich war die ursprüngliche Entwicklungsrichtung einfach:
Die gewünschten Fluggesellschaften sowie Datum und Uhrzeit sollten sich auf einen Blick und möglichst einfach anzeigen lassen.
Anfangs wollte ich automatisch(?) suchen, die Fluggesellschaften, Zeiten und Preise für ein bestimmtes Datum zusammenstellen
und dann einen Alarm senden, aber diese Funktion habe ich erst einmal zurückgestellt.
Stattdessen habe ich es so gemacht, dass man wie bei bestehenden Flugticket-Apps suchen, bequem filtern und dann direkt zur Website der Fluggesellschaft
wechseln kann, um dort zu buchen.
Sie haben einen großartigen Service entwickelt.
Ich habe kein Screen Scraping verwendet.
Es wird kein Cache verwendet.
Ich habe die Informationen, die die Fluggesellschaften an die Webseiten der Nutzer übermitteln,
alle einzeln (
-_-)) intern manuell geparst und nur die benötigten Informationen herausgezogen,um daraus die Preisinformationen zu erstellen ...
Ich wollte es zuerst auf dem Server machen ...
aber wegen der Serverkosten ...
habe ich die Verarbeitung einfach komplett im
webviewerledigt.Wow, großartig. Gibt es keine Pläne für iOS?
Ich habe mir einen Mac mini gekauft, um eine iOS-Version zu entwickeln. ^^