Yurt İçi Uçak Biletlerini Gerçek Zamanlı Karşılaştırıp Arayabileceğiniz Uygulama - Android için
(play.google.com)Yurt içi uçak biletlerini arayıp havayolunun web sitesinde
rezervasyon yapabileceğiniz bir Android uygulamasıdır.
Kişisel olarak Jeju Adası'na sık seyahat ettiğim için
uygun ve hızlı şekilde ucuz uçak bileti ararken
bu fikir aklıma geldi ve geliştirdim.
[ Başlıca özellikler ]
- Uçak bileti karşılaştırmalı arama
- Uçak biletlerini doğrudan havayolunun web sitesinde rezerve edebilme
[ Dikkate alınan noktalar ]
- Düşük donanımlı akıllı telefonlarda çalışabilecek şekilde hafif tasarlandı.
- Mevcut havayolu uygulaması varsa ilgili uygulamada açılabiliyor.
[ Diğer uygulamalardan farkları ]
- Komisyon yok.
- Kullanıcı bu uygulama üzerinden uçak biletini doğrudan rezerve edebilir.
- Kişisel bilgi istemez. Giriş yapmanız gerekmez.
[ Kullanılan teknolojiler ]
- Android : WebView, java
- Frontend : Vanilna JS, CSS, Webpack, Swagger API
Geliştirmeyle ilgili konuları da sorarsanız yanıtlayabilirim.
Hobi olarak yaptığım için eksik kalan birçok yönü oldu.
Bununla ilgili geri bildirim paylaşırsanız sevinirim.
16 yorum
Havayolu şirketlerinin site API'lerini nasıl analiz ettiniz?
Oldukça kaba kuvvetle yaptım. -_-
Korean Air, Asiana, Jin Air, Jeju Air, T'way, Air Seoul, Air Busan, Eastar
Google Flights, Naver Uçuş, Webtour, Interpark Uçuş vb.
Yurtiçinde tanıtılan havayollarının web sitelerine girip
hepsinde tek tek debugger penceresini ve ağ paket yakalamayı açarak
birbirleriyle nasıl veri alışverişi yaptıklarını analiz ettim.
Analiz ederken bir noktadan sonra yol görünmeye başlıyor.
Ben de analiz etmek istiyorum ama bakınca nedense pek anlayamıyorum T_T En azından biraz ipucu verebilir misiniz..?
Ve ayrıca...
Her havayolunun ödeme sistemi birbirinden çok farklı olduğu için
webview üzerinde ödeme yapmayı denediğinizde
akla gelebilecek her türlü hata ortaya çıkıyor.
Basitçe anlatmak gerekirse
PC'de bankacılık işlemi yaparken güvenlik programı kurulduğu gibi
Android için güvenlik programı kurulmadan ödemenin tamamlanmadığı
yerler de var.
Bir havayolunda 5 ödeme modülü varsa
8 havayolu olduğunda kabaca 40 farklı test yapmak gerekiyor.
Bunu bir kişinin tek başına yapması zor.
Başka bir toplulukta uçak bileti rezervasyonunu nasıl yaptıklarını
kısaca sordum...
Naver, Interpark ya da Google Flights gibi yerlerde
sadece fiyat aratıyorlar.
Asıl rezervasyonu ise havayolunun uygulaması üzerinden yapıyorlarmış.
Benim yaptığım uygulamanın ilk amacı da buna benziyordu.
Arama yapıp... havayolu uygulamasını açmadan doğrudan havayolunun ana sayfasındaki
arama sonuçları ekranına gidip hemen ödeme yapmak...
Tavsiyem şu olur...
Firefox’un geliştiricilere yönelik bir tarayıcısı var.
Chrome geliştirici araçları da fena değil ama
biraz fark var.
Genelde API çağrılıyor ve ardından bir sonraki sayfaya redirect ediliyor, bu yüzden..
asıl asıl API çağrısının yapıldığını anlamak pek kolay olmuyor.
Kaba kuvvetle, redirect geçmeden önce web’i durdurursunuz ya da..
Yoksa..
ağ paketlerini yakalayan bir program açıp
izlerseniz son API’yi bulabilirsiniz.
API’yi bulsanız bile..
doğrulama anahtarı, çerez bilgisi, ilgili oturum bilgisi uyuşmuyorsa
o API’yi çağırsanız da hata oluşur.
Her havayolunun kendine özgü özellikleri olduğu için
gerçekten -_- biraz numara gerekiyor.
En zor yer Korean Air!! Angular kullandığı için
reverse etmek çok zor.
Bırakayım mı derken...
yaklaşık 2 yıl epey uğraştım.haha Kafam pek basmayınca.. el ayak çalıştı...
Önce Jin Air ile deniyorum;
x-csrf-tokenvecookiedeğerlerini nasıl işlediğinizi sorsam sorun olur mu...? Diğer havayollarında henüz tam olarak çözemedim ama Jin Air için isteğin nasıl gönderilmesi gerektiğini buldum; sorun bu iki değer T_TChrome veya Firefox ya da Edge'de F12'ye basarsanız
geliştirici araçları açılır.
Burada Debugger sekmesini seçin ve soldaki kaynak penceresini kontrol edin,
sonra Depolama sekmesini seçerseniz solda local storage, session storage, cache storage, Indexed DB ve cookie öğeleri
bulunur.. Bunları kontrol edin...
Network sekmesini seçin ve web sayfasına tıkladığınızda paketlerin nasıl gidip geldiğini kontrol edin,
kabaca anladıktan sonra
Debugger sekmesinde breakpoint koyup
bu durumda web sayfasının sunucuyla nasıl gidip geldiğini
tek tek kontrol etmeniz gerekiyor.
Jin Air nispeten kolay taraflardan biri^^;;; Son dönemde arayüz güzel şekilde yenilendi gerçi.
İç mantık ise eskisiyle karşılaştırınca (2 yıl öncesine göre neredeyse hiç değişmedi)
Sunucuda oluşturulan token istemciye geldiğinde, bunun web tarayıcısının içindeki depolamanın
neresine kaydedildiğini kontrol edin.
Benim durumumda ise sadece kullanıcı bilgisi ve tarih bilgisiyle
o ekrana kadar gidiyorum..
o saate karşılık gelen konuma kadar ekranı kaydırıp bitiriyorum.
Burada fiyata bastırıp giriş yaptırmak da mümkün ama
bu kısım fazla duruma göre değişiyor..
Bu yüzden kullanıcıya özgürce yapabilmesi için bıraktım.
Daha kolay anlatmak gerekirse
kullanıcı havayolu uygulamasını açmadan
telefonundaki sık kullandığı web tarayıcısıyla (Chrome, Samsung Internet vb.)
havayolunun sitesine girip arama yapıyor,
giriş yapıp ödeme gerçekleştiriyor..
Ama bunu WebView ile yaparsanız
kısıtlar çok fazla olduğu için düzgün şekilde uygulanmıyor.
Her havayolu şirketi birbirinden tuhaf mantıklarla geliştirilmiş olduğu için..
Sadece Jin Air'de bile birden fazla ödeme sistemi vardır muhtemelen.
Bunların entegrasyon testlerinin hepsini yapmak gerektiğinden..
Ben de bu yazıyı görüp sık kullandığım hattın havayolları ağırlıklı denemeyi düşünüyorum ama ben de bayağı uğraşacağım galiba lol
Teşekkürler
Harika bir proje!! Android’im olmadığı için T_T iOS ya da bir web sayfası bekliyor olacağım!!
Web uygulaması olduğu için... aslında bunu bir web sayfası olarak da yapabilirdim...^^
Sunucu yönetmekle uğraşmak istemediğim için -_-
web sayfası için gereken dosyaların hepsini doğrudan telefona koydum.
Kullanıcı açısından sunucuya bağlanılmadığı için..
tepki hızı da hızlıydı..
Böyle olunca...
ilgili güvenlik kısıtlamaları ve çakışmalar da çok oldu, bu yüzden
geliştirirken epey zorlandım.
Özellikle ödeme modülleri
havayolu şirketine göre birbirinden çok farklıydı ve akla gelebilecek her türlü ödeme sistemi ekliydi; bunu
yayımlamadan hemen önce fark ettiğim için
test ederken çok zorlandım.
Ben de bazen satın alırken bir crawler yapıp en düşük fiyatı arıyordum, faydalı olacak gibi görünüyor haha
Merak ettiğim bir nokta var. Skyscanner'da görünmeyen şeyler çok muydu?
Skyscanner gibi yurt dışı uçak bileti arama siteleri küresel ölçekte aramayı destekliyor.
Yani ülkeler arası yolculukları en düşük fiyatla bulmaya odaklandıkları için... yurt içi kullanım için pek uygun değildi.
Yurt içi için ise istediğim havayolunu, tarihi ve saati tek seferde kolayca görebileceğim bir şey yapalım
düşüncesi ilk geliştirme yönüydü...
İlk başta otomatik(?) olarak arama yapıp belirli bir tarihte havayolu, saat ve fiyatı eşleştirip
bildirim göndermeyi düşünmüştüm ama... bu özelliği şimdilik bir kenara bırakıp...
mevcut uçak bileti uygulamalarındaki gibi arama yaparak kolayca filtreleme uygulanabilen ve doğrudan havayolu şirketinin web sitesine
geçip rezervasyon yapılabilen bir yapı oluşturdum.
Harika bir hizmet geliştirmişsiniz.
Screen scraping kullanmadım.
Cache de kullanmıyorum.
Havayollarının kullanıcı web sayfasına gönderdiği bilgileri
tek tek( -_-) manuel olarak kendi içimde parse edip sadece gerekli bilgileri çekerek
fiyat bilgisini oluşturdum...
Bunu sunucuda yapmayı düşünmüştüm ama..
sunucu maliyeti yüzünden...
her şeyi doğrudan
webviewiçinde işledim.Vay, harikasınız. iOS planınız yok mu?
iOS için yapmak üzere bir Mac mini aldım. ^^