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

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

Комментарии (39)


  1. botaniQQQ
    06.04.2015 19:43

    Я «прошлёпал» ссылку в тексте или ее нет?


    1. leoleovich Автор
      06.04.2015 19:57
      +1

      protury.info
      Пользуйтесь на здоровье!


  1. Infanty
    06.04.2015 21:04

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

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

    3. >> Своими руками.

    Из этого следует вопрос — всё таки ко всем 100 операторами подключались руками и потратили на это человеко-год? Или всё же подключались к нескольким более глобальным шлюзам а нескольких пришлось подключить руками? Интересен данный момент — буду благодарен если расскажите.


    1. leoleovich Автор
      06.04.2015 21:36
      +1

      К сожалению не все туроператоры предоставляют доступ к данным даже по договору. Так что в текущей версии сбор осуществляется также и с «глобальных шлюзов». И да, я потратил на это очень много времени:)


  1. MAXXL
    06.04.2015 23:14

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


  1. Psychosynthesis
    07.04.2015 00:45

    Выбираю «люблю зимние виды спорта» и стоимость поездки на двоих 40к.
    Показывает мне Египет — зимние виды?!
    И Доминикану — цена от 140к.


    1. leoleovich Автор
      07.04.2015 00:59

      Как я указал в статье, параметры. Это значит, что другие параметры удовлетворяют запросу.
      Согласен, иногда результат неожиданный:)


  1. lopatoid
    07.04.2015 01:19

    Результат уж очень неожиданный. Указал цену до 30000, в списке одной из подходящих мне стран выдало Тунис; написало, что подходит на 50%, и что предложения отсутствуют. Если предложения отсутствуют, зачем вообще указывать в списке подходящих стран?


    1. leoleovich Автор
      07.04.2015 01:33

      Спасибо за замечание.
      Предложения могут отсутствовать по разным причинам… Можно попросить список всех параметров, тогда я смогу исправить ошибку:)


      1. lopatoid
        07.04.2015 01:35

        Поставил галочку «стоимость отдыха», нажал подобрать страну. Всё.


        1. leoleovich Автор
          07.04.2015 01:39
          -1

          В данном случае у вас выбрано по умолчанию «Вас интересует пляжный отдых?» — «Да». Это значит, что Тунис всё же отвечает на 50% вашему запросу. Думаете действительно нужно автоматически ставить 0%?


          1. lopatoid
            07.04.2015 01:50
            +2

            Как программист, я и сам понимаю, откуда могла получиться цифра 50%. Но с точки зрения пользователя — зачем мне видеть направления, на которые я не могу купить тур?


            1. leoleovich Автор
              07.04.2015 22:48

              Отчитываюсь вот.
              Сделал веса для параметров. Как видно из примера несмотря на то, что заданы 5 параметров запроса и Тунис подходит по 4м из них (кроме наличия цены) он получает не 80%, а всего лишь 58%. К сожалению выкинуть полностью я не могу, так как он всё же подходит по многим параметрам. Но в «ТОП» теперь точно не вылезет.
              image

              Спасибо за идею!:)


  1. Keroro
    07.04.2015 14:16

    А почему в списке мало стран? Нет Японии, Китая, Кореи?


    1. leoleovich Автор
      07.04.2015 14:30

      На данный момент 21 страна и примерно 60 курортов.
      Здесь собраны наиболее популярные направления по «пакетным» турам.
      Но да, расширяться никогда не поздно:)


  1. leoleovich Автор
    07.04.2015 15:24

    Спасибо всем огромное за комментарии/сообщения тут и через фидбек на сайте.
    Постараюсь исправить все недочёты:)


  1. crazydima
    09.04.2015 11:05

    Какая правильная штука, а главное масштабируется на другие государства. Есть такое в планах?

    Ну и интерфейсик бы привести в порядок ;)


    1. leoleovich Автор
      09.04.2015 12:06

      Интерфейс требует денег) А вот сбор статистики отовсюду есть в планах:)


  1. KaaPex
    09.04.2015 13:58

    А где Маврикий, рай для кайтеров и серферов?


  1. dowell
    09.04.2015 17:45

    если не сложно, прикрутите курс местной валюты


    1. leoleovich Автор
      09.04.2015 20:35

      Отличная мысль, занимаюсь:)


    1. leoleovich Автор
      10.04.2015 16:13

      image

      Готово:)


  1. china
    10.04.2015 06:00
    +1

    Верхняя позиция в поиске по странам подсвечивается синим — не сразу её заметил.

    В виндовс, с её синими окошками привыкаешь не обращать внимания на полоску сверху синего же цвета.


    1. and7ey
      10.04.2015 10:28

      Если бы вы об этом не написали, то я бы так и не узнал, что в списке есть еще одна страна (первая!). Интерфейс точно надо как минимум поправить.


      1. leoleovich Автор
        10.04.2015 16:16

        Поменял цвет на желтый. Надеюсь не придут пользователи виндовс с золотыми окошками;)
        image


        1. and7ey
          10.04.2015 16:17

          А зачем вообще выделение цветом первой позиции нужно? У меня Mac, но я до прочтения этого комментария строчку эту не видел (т.е. Windows тут не причем).


  1. china
    10.04.2015 06:11

    По цене: если она указана, то это доминирующий фактор.

    В отличие от других параметров цена — имеет широкий диапазон, а значит если я согласен на «подороже», то выставлю цену побольше, а если «подешевле» — то соответственно снижу планку. Т.е. пользователь явно указал свои предпочтения.

    Поэтому цену нужно при расчете веса страны учитывать более жестко, сейчас в пятерке верхних для поиска «до 33 тр + пляж» выдается Доминикана за 110 тр и Индонезия за 145 тр.

    upd: «в шестерке верхних — опять не заметил синюю Турцию ((


  1. china
    10.04.2015 06:23

    Хочу посмотреть туры, жму «хочу туда», получаю ответ «заказать на email» — это у меня только или сейчас нельзя посмотреть список туров?


  1. man_without_face
    10.04.2015 08:48

    Выбрал Испанию, указал курорт «Мадрид» и выкидывается бесконечный alert


    1. leoleovich Автор
      10.04.2015 16:17

      Исправил. По крайней мере нет бесконечного alert больше. Но данных по Мадриду всё равно не достаточно, чтобы построить график. Он здесь скорее из-за того, что столица. Такая же проблема была ещё с несколькими городами.
      Вроде всё, что нашел исправил.
      Спасибо огромное за фидбэк.


  1. and7ey
    10.04.2015 10:30

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

    Как автоматическое добавление новых отелей решает проблему с изменением названия существующего отеля?


    1. leoleovich Автор
      10.04.2015 13:35

      Сайт периодически просматривает все существующие отели. Скажем в Турции. Если отель был переименован (а это достаточно часто происходит), то через некоторое время вместо тысяч отелей реальные данные будут собираться по 100.
      Конкретно эту проблему это решает:)


  1. unlying
    10.04.2015 10:56

    Серьёзно? Очень полезный сайт. При выборе Канарских островов без попыток что-то бронировать.


    1. leoleovich Автор
      10.04.2015 13:34
      +1

      Сайт перебрасывает на это окно, если вы пытаетесь посмотреть «статистику» за будущие даты.
      Иными словами вы хотите увидеть не статистику а актуальные предложения.
      Раньше был модуль, который покажет стоимость туров в будущем. Но пока мы его убрали.

      И так, попробуйте выбрать правильные даты. Я проверил, работает:)


      1. unlying
        10.04.2015 14:17

        Конечно, мне интересны предложения) Сайт называется «Когда и куда поехать на отдых». А не статистика прошлых лет :)


  1. Lexxtor
    13.04.2015 11:54

    У Яндекса есть что-то подобное: travel.yandex.ru
    Но цены там большие.


    1. leoleovich Автор
      13.04.2015 21:47

      У Яндекса даже в проекте этого сервиса не было, когда мой уже работал:)


  1. muon
    14.04.2015 09:02

    Без джаваскрипта выглядит чудовищно, аж с кусками html-тегов.

    А вообще спасибо.


    1. leoleovich Автор
      16.04.2015 16:38

      Да, пожалуйста, пользуйтесь на здоровье:)
      И да, я всё же не спец по js, скорее админ;)