2011-04-15 8 views
7

मैं एक चुनौतीपूर्ण समस्या पर काम कर रहा हूं: बुकिंग प्रक्रिया के बाद डेटा प्राप्त करने का समाधान ढूंढना। असल में, मेरे पास एक फॉर्म (SLIM FORM) वाला एक पृष्ठ है, जिसे मुझे प्रदाता फ़ॉर्म से आने वाली सूचनाओं को स्वचालित रूप से भरना होगा (उदा। Easyjet.com या hotels.com, मूल रूप से कोई बुकिंग साइट)। उदाहरण के लिए: https://secure.booking.com/hotel/es/royal.html?sid=1c2bab12a0c64a541728840f52cd6401;errorc_checkin_invalid=checkin;errorc_intro_error_message_invalid=intro_error_message;errorv_stage=1;errorv_checkin=2011-07-05;errorv_hotel_id=90228;errorv_installment_count=1;errorv_hostname=www.booking.com;errorv_nr_rooms_9022801_80638194_0=1;errorv_interval=1 मेरी बुकिंग में जानकारी वह है जो मुझे प्राप्त करने की आवश्यकता है।बुकिंग के बाद जानकारी प्राप्त करें (cURL, iFrame ...?) बाहरी वेबसाइट पर

enter image description here

मैं कुछ परीक्षण किए गए और यहाँ मैं क्या पता चला, अब के लिए कर रहे हैं:

यह cURL साथ, बाहरी के साथ कोई संचार नहीं है क्योंकि, एक ही पृष्ठ पर दोनों के लिए संभव नहीं है सर्वर, और iframes के साथ, यह iframe परिवर्तनों के स्रोत ASAP को छोड़ देता है।

तो, मैंने तय कर लिया है कि बुकिंग प्रक्रिया बुकिंग प्रदाता (easyjet.com ...)

1) क्या मैं सही हूँ पर बुकिंग प्रदर्शन पर विचार करने के क्षेत्र में, एक समर्पित पृष्ठ पर होना चाहिए वास्तविक साइट, या मेरे पृष्ठ पर बाहरी वेबसाइट को शामिल करने और इसमें बुकिंग की पूरी प्रक्रिया को करने का कोई तरीका है (मूल रूप से प्रस्थान, आगमन तिथि आदि पर फॉर्म भरना ...)?

यदि संभव हो तो नहीं, मैं cURL साथ कुछ परीक्षण किए गए हैं और इस निष्कर्ष पर पहुंचा

_ मैं प्रत्येक प्रदाता के लिए फिट regex परिभाषित करने के लिए होगा, और मैं धारणा के तहत कर रहा हूँ कुछ cURL पहचान करने के लिए तंत्र है और कहा कि इसे रोको। (जैसे lufthansa.com) लेकिन यह काफी अच्छी तरह से अन्य लोगों के साथ काम करता है (booking.com)

2 additionnal प्रश्न हैं:

2) वहाँ cURL तुलना में बेहतर समाधान एक पेज में कुछ HTML पार्स करने के लिए कर रहे हैं (विशेष रूप से के बाद से यदि URL में sessionID शामिल नहीं है तो यह काम नहीं करता है)? मैं शायद सेलेनियम जैसे कुछ उपयोग करने के बारे में सोच रहा था ...

3) मैं अपने कर्ल पार्सिंग को किसी अन्य टैब या विंडो पर कैसे ट्रिगर कर सकता हूं? लंबाई के लिए

अपने जवाब के लिए धन्यवाद (मैं बुकमार्क्स के लिए इसी तरह एक प्रणाली है कि कुछ जावास्क्रिप्ट कोड को गति प्रदान कर सकते हैं के बारे में सोच रहा था) और खेद :-)

अद्यतन: जवाब मैं प्राप्त किया, यहाँ के आधार पर नए सिरे से कर रहे हैं विचार: बड़े प्रदाताओं के लिए (easyjet, hotels.com आदि ...), यदि उपलब्ध हो तो मैं एक एपीआई का उपयोग करूंगा। छोटे प्रदाताओं के लिए (उदा। http://www.hotel-gare-clermont.com/en,1,6217.html), मुझे लगता है कि प्रॉक्सी समाधान दूसरे के लायक है, और मुझे उन छोटे प्रदाताओं को दृश्यता जोड़ने के दौरान "होटल डे ला गारे" से कानूनी मुद्दों पर कोई शिकायत नहीं मिलेगी। तुम क्या सोचते हो?

+3

ध्यान रखें कि आप प्रदाताओं से बात करने की कोशिश करनी चाहिए में रखना है - वे एक API इंटरफ़ेस पेशकश करने में सक्षम हो सकता है, वे आपत्ति हो सकती है और सर्वर आईपी ब्लॉक (हालांकि यह उनके लिए व्यवसाय है, इसलिए यह संभावना नहीं है) –

उत्तर

7

1) यह संभव है, लेकिन इसका सीमा रेखा अवैध होने का दुष्प्रभाव है। आप केवल प्रदाताओं के रूपों को स्कैप नहीं कर सकते हैं और अपने पृष्ठों को आईफ्रेम में आरक्षित कर सकते हैं। यदि प्रदाताओं ने आपको ऐसा करने में पकड़ा तो आपको मुकदमा चलाया जाएगा।

आपको जो चाहिए वह विभिन्न प्रदाताओं के साथ एक साझेदारी समझौता है। इस समझौते के साथ, वे आपके उपयोग के लिए एक एपीआई (एप्लिकेशन प्रोग्रामिंग इंटरफेस) खोलेंगे। इससे आप अपनी साइट पर अधिक सीधे पूछ सकते हैं और बुकिंग को स्वच्छ और अनुमोदित तरीके से बना सकते हैं।


2) cURL एक महान पुस्तकालय है, जो बहुत अच्छी तरह से वेब पृष्ठ प्राप्त की काम करता है। किसी पृष्ठ को स्ट्रिंग में लाने के लिए इंटरनेट के आस-पास कई उदाहरण हैं। उस स्ट्रिंग को पार्स करने के मामले में, एक आदर्श दुनिया में आप एक एक्सएमएल पार्सर का उपयोग कर सकते हैं। दुर्भाग्यवश एचटीएमएल पेज बहुत बुरी तरह से निर्मित हैं, जिससे उन्हें पार्स करना मुश्किल हो जाता है। अधिकांश कोडर, जब उन्हें HTML भाग का विश्लेषण करना होता है तो वे नियमित अभिव्यक्तियों का उपयोग करते हैं।

सत्र आईडी प्राप्त करने के लिए, आपका पहला कर्ल अनुरोध example.com पर लॉगिन फॉर्म होना चाहिए। http://example.com?username=bob&pass=secret प्राप्त करने का प्रयास कर लॉगिन फॉर्म जमा करें। आप टेक्स्ट "सफल लॉगिन" या सर्वर प्रतिक्रिया में समान पाठ की तलाश करके एक वैध लॉगिन की जांच कर सकते हैं। आप प्रतिक्रिया शीर्षकों से सत्र आईडी (यदि यह कुकी है) प्राप्त कर सकते हैं। बाद के कर्ल अनुरोधों को आपकी कुकी भेजनी चाहिए।


3) कर्ल सर्वर की तरफ काम करता है, इसलिए आपके टैबों के बारे में पूरी तरह से कोई जानकारी नहीं है। आप टैब्स पूछने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं, लेकिन मुझे लगता है कि अधिकतर ब्राउज़र आपको सुरक्षा कारणों से ऐसा करने की अनुमति नहीं देंगे।

+1

+1 अवैध। इसमें तकनीकी प्रभाव भी हैं। चूंकि डेटा मशीन-पठनीय होने के लिए उत्पन्न नहीं होता है, इसलिए वे आउटपुट प्रारूप को बदलने के लिए स्वतंत्र होते हैं। इसलिए इंटरफेस का उपयोग करने का इरादा आप केवल अधिक कानूनी नहीं बल्कि कुछ लेआउट बदलने के लिए भी कम प्रवण है। – Nicolas78

+0

साझेदारी समझौतों की आवश्यकता पर बहुत स्पष्ट, धन्यवाद। – boisvert

+0

यह प्रदाताओं से किसी भी डेटा को 'चोरी' करने का इरादा नहीं है। मैं एक बड़ी जीडीएस के लिए काम कर रहा हूं, वेबसाइट बुकिंग एजेंसियों के लिए बुकिंग करने के लिए एक जीयूआई है (लेकिन न केवल), यही कारण है कि उन्हें easyjet.com या hotels.com में बुकिंग करने की आवश्यकता है और उन आंकड़ों को कुछ सांख्यिकीय उपचार करने की आवश्यकता है । लेकिन प्रत्येक प्रदाता से संपर्क करना जो उड़ान या होटल बुक करने की अनुमति देता है वह लगभग असंभव मिशन है।लेकिन मैं सहमत हूं कि एक एपीआई कब उपलब्ध है यह निश्चित रूप से सबसे अच्छा समाधान है। क्या प्रॉक्सी समाधान में ऐसे कानूनी मुद्दे शामिल हैं? –

6

प्रदाता को सीधे उपयोगकर्ता भेजना एक अधिक विश्वसनीय समाधान है, क्योंकि आप प्रक्रिया के अपने उपयोगकर्ता नियंत्रण को देते हैं। लेकिन निश्चित रूप से, आप इस प्रक्रिया :)

वैकल्पिक रूप से, आप देखेंगे कि आपके उपयोगकर्ता की ओर से साइट प्रश्नों अपने सर्वर पर एक प्रॉक्सी बनाने के लिए का नियंत्रण खो:

end-user   yourdomain  easyjet 
    |     |    | 
    |-----search----->|    | 
    |<--booking form--|    | 
    |---user's data-->|    | 
    |     |---forward-->| 
    |     |<--result----| 
    |<--pass to user--|    | 
    |     |    | 
    v     v    v 
अंत उपयोगकर्ता के लिए

, बुकिंग आपके साथ होती है; easyjet/lufthansa/जो भी, आप एक ग्राहक होने लगते हैं। समस्या यह है कि, प्रत्येक वेबसाइट अलग होती है, और आपके पास अपने सिस्टम को प्रत्येक (या अधिकतर) साइट की आवश्यकता होती है, और जैसा कि आपने पहले ही देखा है, एयरलाइंस नहीं चाहते हैं कि आप अपना कस्टम ले लें। यही कारण है कि कई दलाल की साइटें (केल्कू, gocompare ...) जो आप योजना बना रहे हैं वह करना शुरू कर दिया, लेकिन गौरवशाली विज्ञापन के रूप में समाप्त हो गया।

+0

के लिए धन्यवाद यह बहुत स्पष्ट उत्तर (माफ करना मैं बक्षीस के कारण को वोट नहीं दे सकता ;-)) पीएस: gocompare.com पर, ऐसा लगता है कि आप प्रदाता साइट पर जाने के बिना सभी बुकिंग कर सकते हैं ... –

+0

को पता नहीं था कि gocompare था उतना अच्छा। मैंने उन्हें बीमा के लिए कोशिश की, और मुझे जो कुछ मिला वह मेरे बारे में बहुत सारे डेटा एकत्रित हुआ और बहुत कम सटीक जानकारी वापस आई। लेकिन हवाई यात्रा काफी जटिल नहीं है। – boisvert

+0

और कानूनी मुद्दों के बारे में क्या? प्रॉक्सी सेट करने के लिए कुछ प्राधिकरण या कुछ चाहिए? –

0

प्रदाताओं से API का उपयोग करने का सबसे अच्छा तरीका। अगला curl या IFrame आता है।

आप जेएसओएन/AJAX का उपयोग कर सकते हैं जो क्रॉस साइट अनुरोधों का समर्थन करता है और आप आउटपुट में हेरफेर कर सकते हैं।

संबंधित मुद्दे