8 पॉइंट द्वारा baeba 2024-08-28 | 16 टिप्पणियां | WhatsApp पर शेयर करें

यह एक Android ऐप है जिसमें घरेलू फ्लाइट टिकट खोजकर एयरलाइन की वेबसाइट पर
बुकिंग की जा सकती है।

मैं व्यक्तिगत रूप से अक्सर Jeju Island की यात्रा करता हूँ,
इसलिए आसानी से, जल्दी और सस्ते दाम पर फ्लाइट टिकट खोजते-खोजते
यह आइडिया आया और मैंने इसे बनाया।

[ मुख्य फीचर्स ]

  • फ्लाइट टिकट तुलना खोज
  • फ्लाइट टिकट को सीधे एयरलाइन की वेबसाइट पर बुक किया जा सकता है

[ ध्यान में रखी गई बातें ]

  • इसे हल्का बनाया गया है ताकि यह कम-स्पेक स्मार्टफोन पर भी चल सके।
  • अगर मौजूदा एयरलाइन ऐप इंस्टॉल है, तो उसे खोलकर इस्तेमाल किया जा सकता है।

[ दूसरे ऐप्स से अंतर ]

  • कोई शुल्क नहीं।
  • यूज़र इस ऐप के माध्यम से सीधे फ्लाइट टिकट बुक कर सकता है।
  • व्यक्तिगत जानकारी नहीं मांगी जाती। लॉगिन की जरूरत नहीं।

[ उपयोग की गई तकनीक ]

  • Android : WebView, java
  • Frontend : Vanilna JS, CSS, Webpack, Swagger API

अगर आप डेवलपमेंट से जुड़ी बात पूछेंगे तो मैं जवाब दूँगा।
शौक के तौर पर बनाते हुए इसमें कई कमियाँ रह गई होंगी।
इस बारे में फीडबैक दें तो आभारी रहूँगा।

16 टिप्पणियां

 
sonhy02 2024-09-04

आपने airline site API का analysis कैसे किया?

 
baeba 2024-09-05

बहुत ही सीधे तरीके से किया। -_-

Korean Air, Asiana, Jin Air, Jeju Air, T'way, Air Seoul, Air Busan, Eastar
Google Flights, Naver Flights, Webtour, Interpark Flights आदि
देश में उपलब्ध एयरलाइंस की वेबसाइटों पर जाकर
सबकी debugger window और network packet capture एक-एक करके खोलकर
वे आपस में कैसे डेटा का आदान-प्रदान करते हैं, इसका विश्लेषण किया।

विश्लेषण करते-करते रास्ता(?) दिखने लगता है.

 
sonhy02 2024-09-05

मैं भी इसका विश्लेषण करना चाहता/चाहती हूँ, लेकिन देखते-देखते कुछ ठीक से समझ नहीं आ रहा है T_T क्या थोड़ा-सा टिप मिल सकता है..?

 
baeba 2024-09-05

और...
हर airline की payment system इतनी अलग-अलग होती है कि
अगर webview में payment करने की कोशिश करें
तो तरह-तरह की errors आती हैं।
आसान शब्दों में कहूँ तो
जैसे PC पर banking करते समय security program install करना पड़ता है,
वैसे ही कुछ जगहों पर
Android के लिए security program install करना पड़े तभी payment होती है।

अगर 1 airline के लिए payment modules 5 हों,
तो 8 airlines के लिए लगभग 40 तरह के tests करने पड़ते हैं।
यह किसी एक व्यक्ति के लिए करना मुश्किल है।

मैंने दूसरे community में यह सरलता से पूछा कि
airline tickets की booking कैसे करते हैं...
तो पता चला कि Naver, Interpark, Google Flights जैसी जगहों पर
लोग सिर्फ कीमत search करते हैं।
असल booking तो airline app के जरिए करते हैं।

मेरे बनाए app का शुरुआती इरादा भी कुछ ऐसा ही था।
Search करना... airline app खोले बिना सीधे airline homepage के
search result window पर जाना और वहीं तुरंत payment कर देना..

 
baeba 2024-09-05

अगर सलाह दूँ तो...
Firefox का developer browser है।
Chrome dev tools भी ठीक हैं, लेकिन।
थोड़ा फर्क है।

आमतौर पर API call होता है और फिर अगली page पर redirect हो जाता है..
इसलिए असली API कैसे call हो रहा है, यह पता लगाना आसान नहीं होता।
सीधे तरीके से redirect होने से पहले web को रोक दें, या..

नहीं तो..
network packet capture program चलाकर
monitoring करें, तो आप final API ढूंढ सकते हैं।

API मिल भी जाए तो..
auth key, cookie info, और संबंधित session info सही न हो
तो उस API को call करने पर भी error आता है।

हर airline की अपनी-अपनी खासियत होती है।
सच में -_- ट्रिक की ज़रूरत पड़ती है।

सबसे मुश्किल जगह Korean Air है!! Angular इस्तेमाल करता है,
इसलिए reverse करना बहुत मुश्किल है.

छोड़ दूँ क्या, ऐसा सोचते-सोचते...
लगभग 2 साल तक बहुत माथापच्ची की। haha दिमाग ज़्यादा तेज़ नहीं है, तो.. हाथ-पैर ही ज़्यादा मेहनत करते रहे...

 
sonhy02 2024-09-08

मैं पहले Jin Air से कोशिश कर रहा हूँ, क्या यह पूछना ठीक रहेगा कि आपने x-csrf-token और cookie वैल्यू को कैसे हैंडल किया था...? बाकी एयरलाइनों के बारे में अभी तक ठीक से समझ नहीं आया, लेकिन Jin Air के लिए request कैसे भेजनी है यह तो पता चल गया है, बस यही दो वैल्यू समस्या बन रही हैं T_T

 
baeba 2024-09-09

Chrome, Firefox या Edge में F12 दबाएँ।
डेवलपर टूल खुल जाएगा।
यहाँ Debugger टैब चुनें.. बाईं तरफ Source विंडो देखें,
फिर Storage टैब चुनने पर बाईं ओर Local Storage, Session Storage, Cache Storage, IndexedDB, Cookie जैसी चीज़ें
मिलेंगी.. इन्हें जाँचें...

Network टैब चुनें.. और जब वेब पेज पर क्लिक किया जाता है तो packets कैसे आ-जा रहे हैं, यह देखें
और जब मोटे तौर पर समझ आ जाए

Debugger टैब में breakpoint लगाकर
इस स्थिति में वेब पेज सर्वर से कैसे आ-जा रहा है,
इसे एक-एक करके जाँचना पड़ता है।

Jin Air अपेक्षाकृत आसान है^^;;; हाल ही में स्क्रीन को काफ़ी सुंदर तरीके से फिर से डिज़ाइन किया गया है।
अंदरूनी logic पहले जैसा ही है (करीब 2 साल पहले से लगभग कुछ नहीं बदला)

जब सर्वर में बना token client तक आता है, तो वेब browser के अंदर मौजूद storage में
वह कहाँ save होता है, यह देखिए।

मेरे मामले में मैं बस user जानकारी और तारीख़ की जानकारी लेकर
उस screen तक move कराता हूँ..
और उस समय की position तक screen scroll करके काम ख़त्म हो जाता है।

यहाँ price पर क्लिक कराकर login भी कराया जा सकता है।
लेकिन यह हिस्सा बहुत case by case है..

इसलिए मैंने इसे यूज़र को अपनी सुविधा से करने के लिए छोड़ा है।

और आसान शब्दों में कहूँ तो
यूज़र airline app खोले बिना
बस स्मार्टफ़ोन में मौजूद आम तौर पर इस्तेमाल होने वाले web browser (Chrome, Samsung Internet वगैरह) से
airline homepage पर जाकर search करता है
login करता है और payment करता है..

लेकिन अगर इसे WebView में करें
तो restrictions बहुत ज़्यादा हैं, इसलिए इसे ठीक से implement नहीं किया जा सकता।
हर airline ने अलग-अलग तरह की अजीब logic से इसे implement किया हुआ है..
सिर्फ Jin Air में भी payment system कई तरह के होंगे।
इन सबका integration test भी करना पड़ेगा..

 
sonhy02 2024-09-05

मैंने भी यह पोस्ट देखकर सोचा है कि जिन routes पर मैं अक्सर उड़ान भरता हूँ, उन airlines पर केंद्रित करके कुछ करने की कोशिश करूँ, लेकिन लगता है मुझे भी काफ़ी trial and error करना पड़ेगा haha
धन्यवाद

 
kdhyo98 2024-08-30

बहुत बढ़िया प्रोजेक्ट है!! मेरे पास Android नहीं है T_T, इसलिए iOS या वेबपेज का इंतज़ार करूँगा!!

 
baeba 2024-09-02

वेब ऐप था... इसे वेबपेज के रूप में भी बना सकता था...^^
लेकिन सर्वर मैनेज करना झंझट लगा -_-
इसलिए वेबपेज वाली सारी फाइलें सीधे फोन पर ही डाल दीं।
यूज़र के नज़रिए से सर्वर से कनेक्ट ही नहीं करना पड़ता, इसलिए..
रिस्पॉन्स स्पीड भी तेज़ है..

ऐसा करते हुए...
संबंधित security restrictions और conflicts काफ़ी थे,
इसलिए development के दौरान थोड़ा काफ़ी संघर्ष करना पड़ा।
खासकर payment modules
हर airline के लिए बिल्कुल अलग-अलग थे, और तरह-तरह के payment systems जुड़े हुए थे,
यह बात launch से ठीक पहले पता चली,
इसलिए testing करते-करते काफ़ी मुश्किल हुई।

 
kandk 2024-08-30

मैं भी कभी-कभी खरीदते समय crawler बनाकर सबसे कम कीमत खोजता था, इसलिए यह उपयोगी लग रहा है haha
एक बात जाननी है। क्या Skyscanner पर नहीं दिखने वाली चीजें काफी थीं?

 
baeba 2024-08-30

Skyscanner जैसे विदेशी flight ticket search sites global search को support करते हैं.
यानी, वे देशों के बीच यात्रा के लिए सबसे कम कीमत खोजने पर केंद्रित होते हैं... इसलिए घरेलू उपयोग के लिए वे उतने अच्छे नहीं थे.

घरेलू उपयोग के लिए शुरुआती development direction यह थी कि उपयोगकर्ता अपनी मनचाही airline, date और time को एक ही जगह आसानी से देख सके.

शुरुआत में idea यह था कि अपने-आप(?) search करके किसी खास तारीख के लिए airline, time और price को मिलाकर
alarm भेजा जाए... लेकिन इस feature को फिलहाल रोक दिया गया...
और उसकी जगह, मौजूदा flight ticket apps की तरह search करके आसानी से filter किया जा सके और सीधे airline की website पर
जाकर booking की जा सके, ऐसा बनाया गया.

 
bncgood 2024-08-28

आपने वाकई एक शानदार सेवा बनाई है।

  1. क्या घरेलू हवाई टिकटों की मूल्य जानकारी screen scraping से प्रोसेस की गई है?
  2. स्पीड की समस्या तो अनिवार्य रूप से आती होगी, क्या आप cache का उपयोग करते हैं?
 
baeba 2024-08-28

मैंने screen scraping का उपयोग नहीं किया।
cache का उपयोग नहीं किया जाता।
airline से user web page तक पहुँचाई जाने वाली जानकारी को
एक-एक करके( -_-) मैन्युअली अंदरूनी तौर पर parse करके सिर्फ़ ज़रूरी जानकारी निकाली
और price information बनाई...

इसे server पर करने की कोशिश की थी..
लेकिन server cost की वजह से...
बस webview में ही सब प्रोसेस किया।

 
bncgood 2024-08-29

वाह, बहुत शानदार है। क्या iOS के लिए कोई योजना नहीं है?

 
baeba 2024-08-30

मैंने इसे iOS के लिए बनाने के लिए Mac mini खरीदा है. ^^