Цель: написание робота собирающего цены по которым можно забронировать билеты на сайте www.s7.ru 1. заходите на сайт 2. выбираете направление (например, москва-уфа) 3. выбираете "в одну сторону" 4. выбираете дату отправления (первоначально - сегодняшнюю, т.е. дату проверки). 5. кликаете далее Получаете таблицу, в которой приведены 1. рейсы 2. цены по которым можно забронировать билет. из них выбрать минимальную. Внимание - иногда список рейсов может менятся, одбавляться и тп - следовательно - необходимо отслеживать номер рейса, а не просто брать сверху вниз. Записывать всё в результирующую таблицу: Направление Дата отправления Номер рейса Цена Далее, необходимо перейти на следующий день, для этого нажать на стрелочку "направо", и т.д. Внимание - иногда сессия прерывается. В таком случае необходимо сгенерировать запрос заново.
Источник: weblancer.net
1. Получить с сервера данные.
2. Вытащить из этих данных нужную нам информацию по рейсам и стоимостям.
3. Обеспечить рабочий скрипт каким-то окружением, которое будет впоследствии задавать режим его работы.
4. Сделать вывод результатов в удобной для пользователя форме.
Основная страница поиска расположена на дополнительном домене: http://ibe.s7.ru/S7/webqtrip.html. С этой страницей и будем работать. Отслеживаем посредством Firebug, что происходит при поиске билетов.
Ищем рейсы Москва—Уфа на 10 августа 2009 года; коды аэропортов вытаскиваем из javascript'а страницы поиска.
После нескольких попыток-итераций получается примерно такой код.
Отлично. В файле response.html получаем такую же табличку с рейсами, какую получаем и при запросе посредством браузера (ну разве что с немного покоцаными стилями).
Откуда-куда и дата у нас уже есть. Нужно собрать номера рейсов и минимальную стоимость.
Этот код разбирает html с привлечением модуля TagParser, и выводит табличку рейсов-тарифов с ценами.
5 сентября 2009 года
Вообще-то тут надо привести работающий примерчик. Как один из вариантов — набросать обработчик формы на jQuery. Но JavaScript же не такой гармоничный и изящный как Perl, потому пока душа не лежит к такому программированию. Поверьте, всё, описанное выше, на момент написания работало корректно :)