Получить информацию после завершения бронирования (cURL, iFrame ...?) На внешнем веб-сайте - PullRequest
6 голосов
/ 15 апреля 2011

Я работаю над сложной проблемой: найти решение для получения данных после процесса бронирования.По сути, у меня есть страница с формой (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 информация в моем бронировании - это то, что мне нужно получить.

enter image description here

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

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

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

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

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

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

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

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

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

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

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

Ответы [ 3 ]

7 голосов
/ 01 мая 2011

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

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


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

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


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

6 голосов
/ 28 апреля 2011

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

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

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

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

0 голосов
/ 03 мая 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...