Pull to refresh

Своими руками. Как я сделал сервис сбора статистики цен на туры

Reading time 4 min
Views 15K
Работа — работой, но иногда хочется отдохнуть. Предположим, вы собрались в отпуск в жаркие края. Перед вами сразу возникает несколько вопросов, основные из которых:

1) Куда поехать отдыхать
Действительно, нужно перечитать множество источников, чтобы определиться, где сейчас (или когда вы там собрались) тепло, нужна ли для въезда в страну виза, сколько стоит путёвка и т.д.

2) Когда поехать отдыхать
Допустим, вы знаете, что хотите провести свой отпуск в Египте, но не знаете когда. Самый важный вопрос для многих — когда дешевле всего туда ехать? Так же важно знать, какая там погода и т.д.

image

Как это работает


Загрузка


У многих туроператоров имеются так называемые xml-шлюзы для выгрузки цен. Через эти шлюзы можно получить цены на те или иные туристические продукты. К сожалению, для доступа к этим данным очень часто требуется договор с туроператором. Так что просто так выполнить экспорт не получится. Для этого пришлось зарегистрироваться как юридическое лицо и помучаться с подписанием множества документов.

Данные, поставляемые туроператорами, выглядят приблизительно так:

<entry>
<tour_date>18.11.2014</tour_date>
<aircompany>Трансаэро (аэропорт Пафос / Ларнака)</aircompany>
<town>Пафос / Paphos</town>
<room>STANDARD Inland View BB</room>
<dt>18.11.2014</dt>
<id_hotel>102610001680</id_hotel>
<id_ns>104610415895</id_ns>
<duration>1</duration>
<o_duration>1</o_duration>
<quota>9</quota>
<id_price>121132934133</id_price>
<price>
<amount>435</amount>
<RUR>25435</RUR>
<ag>14+, 14+</ag>
<id_vr>102510005340</id_vr>
</price>
</entry>

Раз в неделю встроенный в Java scheduler начинает процесс сборки информации. За один проход осуществляется просмотр более 4000 отелей в 21 стране мира.

Сбор данных осуществляется более чем со 100 туроператоров.

Данные бережно укладываются в базу данных до востребования.

Новые отели так же добавляются автоматически. Это решает проблему изменения названия отеля или его закрытия.

Так же автоматически осуществляется сбор множества дополнительной информации.

Приблизительная схема базы данных наглядно демонстрирует множество параметров:



На текущий момент в базе данных под управлением Apache Derby содержит примерно 2 Гб данных.

Куда поехать отдыхать


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

На основе статистических данных о ценах, а так же используя вспомогательные данные, а именно:
— Даты и краткое описание праздников;
— Экскурсии, цены на них, краткое описание и тип (познавательные, экстремальные, обзорные);
— Необходимость в визе в ту или иную страну, а так же примерная цена, срок изготовления и место её получения;
— Время перелёта;
— Питание в отеле;
можно рассчитать в процентном соотношении, на сколько подходит каждая из 21 страны, предложенной сервисом.

Все параметры равновесные, так что применяя не очень хитрую формулу можно получить интересный результат:

image

Когда поехать отдыхать


В этом случае пользователь знает, куда он хочет поехать и просто хочет посмотреть, как менялась цена и погода, а так же дополнительные параметры страны.

В этом случае мы просто отображаем так называемую «Карточку страны», которая отразит много полезной информации:

image

История создания


Идея зародилась ещё на 3м курсе (далёкий 2010) моего университета (спасибо СПбГПУ).
Захотелось мне как-то в отпуск, но возникла проблема — непонятно, когда дешевле и где теплее отдыхать.
На форумах пишут разные, порой противоречивые сведения, а сайтов с реальной статистикой хоть каких-то данных я не нашел.
Как это принято в IT-сфере, если не нашел решение — напиши сам.

Первым шагом была ручная сборка данных. Была табличка в Excel и пару функций, которые строили графики по данным. Через некоторое время стало лень (или просто забывал) добавлять данные.

Вторым шагом стало изучение языка C++. Практически вовремя в университете мы стали изучать язык C++ и делать на нём простенькие проекты. Мне сразу же захотелось автоматизировать процесс сборки данных и я написал сервис, который собирает данные с нескольких туроператоров. Данные он складывал в файлик и ни о каких базах данных или веб-серверах тогда речи не шло. Запускался сервис по крону на домашнем компьютере.

Третьим шагом стало полное переписывание проекта на Java с одновременным изучением EJB (Java EE), добавлением реляционной СУБД и веб-сервером для отображения данных пользователю (табличный вид).

В дальнейшем я добавлял различные js-библиотеки для построения графиков, улучшал производительность, устранял ошибки и так далее.
Перенёс сервис на «настоящий» сервер с моего домашнего компьютера
Заказал дизайн сайта у своего коллеги с одной из прошлых работ.

Зачем всё это?


На самом деле, всё просто — проект был придуман исключительно для собственного использования. Мне просто хотелось получить сведения для наиболее дешевого и приятного отдыха.

Затем мне захотелось поделиться информацией со всем миром, чтобы каждый мог найти для себя полезную информацию.

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

Могут быть ошибки в вёрстке или другие мелкие проблемы — прошу не судить строго.

Шейринг приветствуется
protury.info
Tags:
Hubs:
+23
Comments 39
Comments Comments 39

Articles