Получить информацию после завершения бронирования (завиток, iFrame...?) на внешнем веб-сайте


Я работаю над сложной проблемой: нахожу решение для получения данных после процесса бронирования. В принципе, у меня есть страница с формой (ТОНКАЯ ФОРМА), которую мне нужно автоматически заполнить информацией, поступающей из формы поставщика (например, 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{[3] } информация в моем бронировании - это то, что мне нужно получить.

enter image description here

Я провел несколько тестов, и вот что я выяснил, на данный момент :

Невозможно разместить оба на одной странице, потому что с cURL нет связи с внешним сервером, а с iframes он покидает страницу как можно скорее, когда изменяется src iframe.

Итак, я решил, что процесс бронирования должен происходить на специальной странице в домене поставщика бронирования (easyjet.com ...)

1) Имею ли я право рассмотреть возможность бронирования на реальном сайте или есть способ включить внешний веб-сайт на моей странице и выполнить весь процесс бронирования в нем (в основном заполнение форм на вылет, дату прибытия и т. Д.)?

Если это невозможно, я провел несколько тестов с cURL и пришел к такому выводу:

_ Мне придется определить подходящее регулярное выражение для каждого поставщика, и у меня сложилось впечатление, что у некоторых есть механизмы для идентификации cURL и его блокировки. (например, lufthansa.com) Но это довольно хорошо работает с другими ( booking.com )

У меня есть 2 дополнительных вопроса:

2) Существуют ли лучшие решения, чем Завиток для анализа некоторого HTML-кода на странице (тем более, что он не работает, если URL-адрес не содержит идентификатор сеанса)? Я думал, может быть, использовать что-то вроде селена...

3) Как я могу запустить синтаксический анализ завитка на другой вкладке или в другом окне? (Я думал о системе, похожей на закладки, которая может запускать некоторый код JavaScript)

Спасибо за ваши ответы и извините за длину:-)

Обновление: Основываясь на полученных мною ответах, вот свежие мысли: для крупных поставщиков (easyjet, hotels.com и т.д....), я буду использовать API, если он доступен. Для небольших поставщиков (например, http://www.hotel-gare-clermont.com/en,1,6217.html ), Я думаю, что прокси-решение стоит еще одного, и я не буду получать никаких жалоб по юридическим вопросам от "Hotel de la Gare", добавляя при этом видимость этим небольшим провайдерам. Что вы думаете?

Author: Michael Kohne, 2011-04-15

3 answers

1) Это возможно, но это имеет побочный эффект, будучи погранично незаконным. Вы не можете просто просматривать формы поставщиков и резервировать их страницы в iframe. Если провайдеры поймают вас за этим занятием, на вас, скорее всего, подадут в суд.

Что вам нужно, так это партнерское соглашение с различными поставщиками. в соответствии с этим соглашением они, скорее всего, откроют для вас API (интерфейс прикладного программирования). Это позволит вам более непосредственно запрашивать их сайт и делать заказы в чистом и одобренный способ.


2) cURL - отличная библиотека, которая очень хорошо выполняет работу по извлечению веб-страниц. В Интернете есть много примеров извлечения страницы в строку. С точки зрения синтаксического анализа этой строки, в идеальном мире вы могли бы использовать анализатор XML. К сожалению, HTML-страницы очень плохо сконструированы, что затрудняет их анализ. Большинство программистов, когда им приходится анализировать фрагменты HTML, как правило, используют регулярные выражения.

Чтобы получить идентификатор сеанса, ваш первый Запрос cURL должен быть направлен в форму входа на example.com . Подделайте отправку формы входа, пытаясь получить http://example.com?username=bob&pass=secret . Вы можете проверить правильность входа, посмотрев текст "успешный вход" или аналогичный в ответе сервера. Вы можете получить идентификатор сеанса (если это файл cookie) из заголовков ответов. Последующие запросы cURL должны отправлять ваши файлы cookie.


3) cURL работает на стороне сервера, поэтому абсолютно ничего не знает о ваших вкладках, которые открывать. Вы можете использовать Javascript для запроса вкладок, но я уверен, что большинство браузеров не позволят вам сделать это по соображениям безопасности.

 7
Author: xconspirisist, 2011-04-30 22:24:27

Отправка пользователя напрямую поставщику является гораздо более надежным решением, поскольку вы предоставляете своему пользователю контроль над процессом. Но, конечно, вы теряете контроль над процессом:)

В качестве альтернативы вам необходимо создать прокси-сервер на своем сервере, который запрашивает сайт от имени вашего пользователя:

end-user         yourdomain     easyjet
   |                 |             |
   |-----search----->|             |
   |<--booking form--|             |
   |---user's data-->|             |
   |                 |---forward-->|
   |                 |<--result----|
   |<--pass to user--|             |
   |                 |             |
   v                 v             v

Для конечного пользователя бронирование происходит с вами; для easyjet/lufthansa/кого бы то ни было, вы кажетесь клиентом. Проблема в том, что каждый веб-сайт отличается, и у вас будет много работайте над адаптацией своей системы к требованиям каждого (или большинства) сайтов, и, как вы уже заметили, авиакомпании не хотят, чтобы вы принимали их обычаи. Вот почему сайты многих брокеров (kelkoo, gocompare...) начинали с того, что вы планируете, но в итоге превратились в прославленную рекламу.

 6
Author: boisvert, 2011-04-28 10:50:13

Лучший способ использовать API от поставщиков. Следующим идет завиток или IFrame.

Вы можете использовать JSON/AJAX, который поддерживает межсайтовые запросы, и вы можете управлять выводом.

 0
Author: AjayR, 2011-05-03 02:31:22