XML - результаты поиска/Поиск туров — различия между версиями

Материал из TourClient - Руководство пользователя
Перейти к: навигация, поиск
м (Алгоритм организации поиска)
 
(не показаны 68 промежуточные версии 3 участников)
Строка 1: Строка 1:
== Использование сервиса ==
 
В зависимости от выбранного клиентом способа использования администрацией TourClient выставляется соответствующая настройка сервиса - '''тип поиска'''. Пользователю сервиса данная настройка недоступна.
 
  
Тип поиска определяет поведение сервиса и предоставляемые им данные.
+
== Назначение сервиса ==
 
+
=== Импорт данных в систему клиента ===
=== Импорт данных в свою систему (тип поиска: БД) ===
+
Импорт данных в систему клиента может производиться для получения каких-то статистических показателей. Например расчета минимальных по каким-то параметрам. Или же организации каких-то своих сервисов.  
Импорт данных в свою систему может производиться для получения каких-то статистических показателей. Например расчета минимальных по каким-то параметрам. Или же организации каких-то своих сервисов.
+
 
+
 
+
'''Сервис предоставляет только те данные которые в текущий момент сохранены в нашей БД.'''
+
 
+
 
+
'''Обратите внимание:''' сервис не предназначен для полной синхронизации БД клиента с нашей (из-за большого объема данных и очень интенсивной скорости обновления нашей БД). Архитектура получения данных в текстовом формате через xml-шлюз маленькими блоками не позволит работать с такими объемами данных, пропускной способности будет недостаточно для оперативного обновления данных (потенциально базу выкачать возможно, но она тут же устарает, и не будет успевать обновляться по данной технологии).
+
 
+
 
+
Сервис рекомендуется использовать для получения данных в рамках какого-то среза ограничивающего возможный объем данных: по ограниченному набору отелей, на ближайшие даты, по нескольким странам и т.п.
+
+
==== Особенности работы ====
+
* максимально быстрая скорость получения результата
+
* ответ на запрос формируется сразу полностью
+
* минимальная цена точная (та которая в текущий момент минимальна в нашей БД по данным параметрам)
+
* по непопулярным запросам можно получить данных меньше чем в комбинированном поиске, если они в текущий момент не присутствуют в нашей БД (принципы работы комбинированного поиска не позволяют использовать его для выгрузки данных)
+
 
+
==== Ограничения ====
+
* Количество данных возвращаемое одним запросом: не более 2500 туров.
+
* Макс. допустимое количество запросов в сутки: не регламентировано (определяется индивидуально в случае создания клиентом высокой нагрузки на сервис).
+
  
 +
В этом случае используется [[XML_-_результаты_поиска/Поиск_туров/Тип_поиска_-_БД|Тип поиска - БД]].
  
=== Организация поиска на своем сайте (тип поиска: комбинированный) ===
+
=== Организация поиска на сайте клиента ===
 
Используется для организации сервиса подобного нашему модулю [[Поиск туров - результаты поиска]], когда клиент хочет самостоятельно управлять его работой. Позволяет получить результат в текущий момент наиболее соответствующий данным в системах туроператоров.
 
Используется для организации сервиса подобного нашему модулю [[Поиск туров - результаты поиска]], когда клиент хочет самостоятельно управлять его работой. Позволяет получить результат в текущий момент наиболее соответствующий данным в системах туроператоров.
  
 +
В этом случае используется [[XML_-_результаты_поиска/Поиск туров/Тип_поиска_-_Комбинированный|Тип поиска - комбинированный]].
  
'''Сервис предоставляет данные полученные в текущий момент из всех возможных источников: сохраненные в БД, полученные "на лету" из системы туроператора, а также некоторыми другими способами.'''
 
  
 +
В зависимости от выбранного клиентом способа использования сервиса, администрацией TourClient выставляется соответствующая настройка сервиса - '''тип поиска'''. Клиенту изменение данной настройки недоступно.
 +
 
 +
Тип поиска определяет поведение сервиса и предоставляемые им данные.
  
'''Обратите внимание:''' данный тип поиска для обработки запросов от конечных пользователей, и не предназначен для обработки автоматических запросов. Ограничение вызвано тем что запросы в конечном счете передаются в системы туроператоров, которые зачастую не адаптированы к большой нагрузке. Для автоматических запросов должен использоваться тип поиска '''БД поиск'''.
+
<br>
  
==== Алгоритм организации поиска ====
+
== Описание интерфейсов ==
[http://wiki.tourclient.ru/w/images/d/d6/Search_tour.svg <img src="http://wiki.tourclient.ru/w/images/d/d6/Search_tour.svg" width="200px" style="float: right">]
+
  
# Приложение формирует поисковый запрос и отправляет его сервису '''Поиск туров'''.
+
* [[XML_-_результаты_поиска/Поиск_туров/Интерфейс_-_Результаты_поиска|Результаты поиска]]
# Сервис инициирует новый поиск.
+
* [[XML_-_результаты_поиска/Поиск_туров/Интерфейс_-_Статус_поиска|Статус поиска]]
# Приложение ожидает ответа от сервиса.
+
* [[XML_-_результаты_поиска/Поиск_туров/Интерфейс_-_Результаты_поиска_по_отелю|Результаты поиска по отелю]]
# Сервис возвращает данные по запрошенной странице, данные о количестве найденных туров и ключ поиска.
+
* [[XML_-_результаты_поиска/Поиск_туров/Интерфейс_-_Сводный_прайс_по_ночам|Сводный прайс по ночам]]
# Сервис в фоновом режиме продолжает поиск до нахождения всех данных для запроса.
+
# Приложение периодически опрашивает сервис '''Статус поиска''', для обновления найденного количества туров и проверки что поиск не завершен.
+
# Получив информацию что поиск завершен приложение может:
+
#* сообщить пользователю что поиск завершен
+
#* предложить обновить результаты поиска (т.к. могли быть найдены новые данные)
+
#* обновить результаты поиска автоматически
+
# Для обновления результатов поиска приложение отправляет сервису '''Поиск туров''' поисковый запрос, идентичный тому что был отправлен ранее.
+
  
==== Особенности работы ====
 
===== Время поиска =====
 
* Т.к. в момент поиска приходится ждать ответа из разных систем, полный поиск может занимать продолжительное время.
 
* Ограничение на время полного поиска 30 сек., после этого в результаты поиска попадают туры найденные за это время.
 
* Приложение должно запрашивать у сервиса нужную ему страницу данных. Страница определяется параметрами dataLimit, dataOffset.
 
* После запроса сервис возвращает данные в момент когда:
 
** либо найдено достаточное количество данных для формирования запрошенной страницы
 
** либо истек таймаут
 
* Таймаут на возврат запрошенной страницы 10 сек. По истечении таймаута сервис вернет все найденные на этот момент предложения.
 
* Таймаут может быть автоматически увеличен до 30 сек, если за это время ни одного предложения не найдено, но все еще ожидается ответ от медленного поставщика данных.
 
  
===== Минимальная цена =====
+
Результаты возвращаемые сервисом содержат общие для системы объекты, описанные в
* При возврате запрошенной страницы первым туром будет тур с минимальной ценой из всех найденных в текущий момент.
+
* [[XML_экспорт/Описание_объектов|Описании объектов]]
* Если на момент возврата страницы таймаут еще не истек, это тур с минимальной ценой по данному запросу.
+
* Если страница возвращена из-за таймаута, то потенциально в процессе поиска могут быть найдены туры с ценой меньше. Они будут доступны по данному запросу после окончания поиска.
+
 
+
===== Кеширование =====
+
* Все запросы
+
 
+
 
+
 
+
 
+
===== Поиск =====
+
* В случае если поиск с заданными параметрами уже происходит в текущий момент, сервис будет использовать его результаты. Если данные для запрашиваемой страницы уже получены, она будет возвращена сразу. Если нет, сервис подождет пока поступит необходимое количество данных.
+
* В случае если поиск с заданными параметрами уже завершен, сервис сразу вернет результат из кеша поиска.
+
* На данный момент время жизни кеша 15 минут.
+
 
+
 
+
 
+
==== Особенности работы ====
+
* максимально быстрая скорость получения результата
+
* ответ на запрос формируется сразу полностью
+
* минимальная цена точная (та которая в текущий момент минимальна в нашей БД по данным параметрам)
+
* по непопулярным запросам можно получить данных меньше чем в комбинированном поиске, если они в текущий момент не присутствуют в нашей БД (принципы работы комбинированного поиска не позволяют использовать его для выгрузки данных)
+
 
+
==== Ограничения ====
+
* Количество данных возвращаемое одним запросом: не более 2500 туров.
+
* Макс. допустимое количество запросов в сутки: не регламентировано (определяется индивидуально в случае создания клиентом высокой нагрузки на сервис).
+
 
+
== Сервис Поиск туров ==
+
 
+
Работа с сервисом осуществляется путем отправки POST запросов на адрес http://tourclient.ru/f/exml/ИДЕНТИФИКАТОР_ПОЛЬЗОВАТЕЛЯ/tours_export .
+
 
+
Параметр request должен содержать xml запроса.
+
 
+
В результате сервис вернет ответ в формате xml.
+
 
+
=== Запрос к сервису ===
+
<source lang="xml">
+
 
+
<?xml version="1.0" encoding="UTF-8"?>
+
<TourSearchRequest>
+
    <dataOffset>0</dataOffset>
+
    <dataLimit>50</dataLimit>
+
 
+
    <seatStatus>3</seatStatus>
+
 
+
    <cityId>1000</cityId>
+
    <countryId>12</countryId>
+
    <roomSizeId>14</roomSizeId>
+
 
+
    <adults>2</adults>
+
    <children>0</children>
+
 
+
    <childAge1>0</childAge1>
+
    <childAge2>0</childAge2>
+
 
+
    <durationFrom>7</durationFrom>
+
    <durationTill>14</durationTill>
+
 
+
    <departureFrom>2014-07-25</departureFrom>
+
    <departureTill>2014-08-10</departureTill>
+
 
+
    <ticket>1</ticket>
+
 
+
    <priceFrom>500</priceFrom>
+
    <priceTill>50000</priceTill>
+
    <currency>3</currency>
+
 
+
    <operatorIds>
+
        <id>111</id>
+
        <id>222</id>
+
        <id>333</id>
+
    </operatorIds>
+
 
+
    <resortIds>
+
        <id>111</id>
+
        <id>222</id>
+
        <id>333</id>
+
    </resortIds>
+
 
+
    <resortPlaceIds>
+
        <id>111</id>
+
        <id>222</id>
+
        <id>333</id>
+
    </resortPlaceIds>
+
 
+
    <allocCatId>7</allocCatId>
+
    <allocRate>3.56</allocRate>
+
 
+
    <allocationIds>
+
        <id>111</id>
+
        <id>222</id>
+
        <id>333</id>
+
    </allocationIds>
+
 
+
    <mealIds>
+
        <id>111</id>
+
        <id>222</id>
+
        <id>333</id>
+
    </mealIds>
+
 
+
    <roomViewIds>
+
        <id>111</id>
+
        <id>222</id>
+
        <id>333</id>
+
    </roomViewIds>
+
 
+
    <roomTypeIds>
+
        <id>111</id>
+
        <id>222</id>
+
        <id>333</id>
+
    </roomTypeIds>
+
 
+
</TourSearchRequest>
+
<TourExtraEntities>
+
    <entity>OnlineSeatsState</entity>
+
    <entity>ExtraCharges</entity>
+
    <entity>City</entity>
+
    <entity>Country</entity>
+
    <entity>RoomSize</entity>
+
    <entity>Resort</entity>
+
    <entity>ResortPlace</entity>
+
    <entity>Allocation</entity>
+
    <entity>AllocCat</entity>
+
    <entity>Meal</entity>
+
    <entity>RoomType</entity>
+
    <entity>RoomView</entity>
+
    <entity>Operator</entity>
+
</TourExtraEntities>
+
 
+
</source>
+
 
+
=== Ответ сервиса ===
+
Сервис возвращает ответ, содержащий массив объектов Тур (Tours) и объект Статус поиска (SearchStatus)
+
 
+
<source lang="xml">
+
 
+
<?xml version="1.0" encoding="UTF-8"?>
+
<Result>
+
    <Tours>
+
        <Tour>...</Tour>
+
        <Tour>...</Tour>
+
        <Tour>...</Tour>
+
        ...
+
    </Tours>
+
    <SearchStatus>
+
      ...
+
    </SearchStatus>
+
</Result>
+
 
+
</source>
+
  
 
<br>
 
<br>
  
== Сервис Статус поиска ==
+
== Дополнительная информация ==
Работа с сервисом осуществляется путем отправки POST запросов на адрес http://tourclient.ru/f/exml/ИДЕНТИФИКАТОР_ПОЛЬЗОВАТЕЛЯ/tours_export .
+
  
Параметр request должен содержать xml запроса.
+
* [[XML_-_результаты_поиска/Поиск_туров/Буфер_поиска|Буфер поиска]]
 
+
* [[XML_-_результаты_поиска/Поиск_туров/Тип_поиска_-_БД|Тип поиска - БД]]
В результате сервис вернет ответ в формате xml.
+
* [[XML_-_результаты_поиска/Поиск туров/Тип_поиска_-_Комбинированный|Тип поиска - комбинированный]]
 
+
 
+
=== Запрос к сервису ===
+
<source lang="xml">
+
 
+
<?xml version="1.0" encoding="UTF-8"?>
+
<SearchStatusRequest>
+
    <key>df1b446a09606710d301153157fc862b</key> <!-- Уникальный ключ поискового запроса. -->
+
</SearchStatusRequest>
+
 
+
</source>
+
 
+
=== Ответ сервиса ===
+
Сервис возвращает ответ объект Статус поиска (SearchStatus)
+
 
+
Сервис возвращает ответ, содержащий массив объектов Тур (Tours) и объект Статус поиска (SearchStatus)
+
 
+
<source lang="xml">
+
 
+
<?xml version="1.0" encoding="UTF-8"?>
+
<Result>
+
    <SearchStatus>
+
      ...
+
    </SearchStatus>
+
</Result>
+
 
+
</source>
+
  
 
<br>
 
<br>
 
== Описание объектов ==
 
===Объект Статус поиска===
 
 
<source lang="xml">
 
<SearchStatus>
 
    <key>df1b446a09606710d301153157fc862b</key> <!-- Уникальный ключ поискового запроса. -->
 
    <inProgress>true</inProgress>  <!-- Параметр показывающий завершен ли поиск. -->
 
    <toursCount>450</toursCount>  <!-- Количество найденных (на момент получения статуса) туров в рамках данного поискового запроса. -->
 
    <exactCount>false</exactCount> <!-- Параметр показывающий что количество найденных туров окончательное, и при изменении параметров offset и limit изменяться не будет. -->
 
</SearchStatus>
 
</source>
 
 
=== Объект Тур ===
 
<source lang="xml">
 
<Tour>
 
    <id>3145968261@511</id>          <!-- Уникальный идентификатор тура. -->
 
    <operatorId>308</operatorId>      <!-- Идентификатор туроператора. -->
 
 
    <cityId>1000</cityId>            <!-- Идентификатор города вылета. -->
 
    <countryId>12</countryId>        <!-- Идентификатор страны прилета. -->
 
    <roomSizeId>14</roomSizeId>      <!-- Идентификатор размещения (DBL,SNGL,TRL...). -->
 
 
    <departure>2014-07-10</departure>  <!-- Дата вылета. -->
 
    <arrival>2014-07-17</arrival>      <!-- Дата прилета. -->
 
    <duration>7</duration>              <!-- Продолжительность (количество ночей в отеле). -->
 
    <ticket>1</ticket>                  <!-- Дата прилета. -->
 
                                        <!-- 0 - без билета, 1 - авиаперелет, 2 - поезд, 3 - автобус, 4 - паром, 5 - автомобиль -->
 
    <directFlight>false</directFlight>  <!-- Прямой перелет. true - известно что перелет прямой. -->
 
                                        <!-- false - известно что перелет с пересадкой. Если не опеределен, то не известно. -->
 
 
    <price>18000</price>                <!-- Стоимость тура в валюте запроса. -->
 
    <currency>2</currency>              <!-- Идентификатор валюты запроса. -->
 
    <priceIsApprox>true</priceIsApprox> <!-- Параметр показывает что цена была пересчитана по кросс-курсу и может содержать погрешность пересчета -->
 
                                        <!-- (возникает в случаях когда валюта запроса отлична от валюты предложения и оператор не имеет кросскурса для пересчета). -->
 
 
    <priceOrig>500</priceOrig>          <!-- Стоимость тура в валюте туроператора. -->
 
    <currencyOrig>1</currencyOrig>      <!-- Стоимость тура в валюты туроператора. -->
 
                                        <!-- 1 - USD, 2 - EUR, 3 - RUB, 4 - UAH -->
 
 
    <prevPriceOrig>0</prevPriceOrig>    <!-- Предыдущая стоимость тура (в валюте туроператора). -->
 
    <priceDiffPercent>0</priceDiffPercent>  <!-- Стоимость тура в валюте запроса. -->
 
                                        <!-- 1 - USD, 2 - EUR, 3 - RUB, 4 - UAH -->
 
 
    <ch1From>0</ch1From>                <!-- Возраст 1-го ребенка ОТ (для размещений с детьми) -->
 
    <ch1Till>0</ch1Till>                <!-- Возраст 1-го ребенка ДО (для размещений с детьми) -->
 
    <ch2From>0</ch2From>                <!-- Возраст 2-го ребенка ОТ (для размещений с детьми) -->
 
    <ch2Till>0</ch2Till>                <!-- Возраст 2-го ребенка До (для размещений с детьми) -->
 
 
    <resortId>4</resortId>              <!-- Идентификатор курорта -->
 
    <resortPlaceId>2392</resortPlaceId> <!-- Идентификатор района -->
 
    <allocationId>12395</allocationId>  <!-- Идентификатор отеля -->
 
    <allocCatId>7</allocCatId>          <!-- Идентификатор категории отеля -->
 
    <mealId>2</mealId>                  <!-- Идентификатор питания -->
 
    <roomTypeId>4</roomTypeId>          <!-- Идентификатор типа номера -->
 
    <roomViewId>22</roomViewId>        <!-- Идентификатор вида из номера -->
 
 
    <isStop>false</isStop>                      <!-- Параметр показывающий что тур в стопе -->
 
    <isStopAllocation>false</isStopAllocation>  <!-- Параметр показывающий что тур в т.к. нет мест в отеле -->
 
    <isStopFlight>false</isStopFlight>          <!-- Параметр показывающий что тур в стопе т.к. нет мест на рейсы -->
 
 
    <!-- Дополнительные объекты, описывающие параметры тура. Присутствуют объекте тур опционарно, в зависимости от параметров входящего запроса -->
 
    <OnlineSeatsState>...</OnlineSeatsState>
 
 
    <ExtraCharges>...</ExtraCharges>
 
 
    <City>...</City>
 
 
    <Country>...</Country>
 
 
    <Operator>...</Operator>
 
 
    <RoomSize>...</RoomSize>
 
 
    <Resort>...</Resort>
 
 
    <ResortPlace>...</ResortPlace>
 
 
    <Allocation>...</Allocation>
 
 
    <AllocCat>...</AllocCat>
 
 
    <Meal>...</Meal>
 
 
    <RoomType>...</RoomType>
 
 
    <RoomView>...</RoomView>
 
 
</Tour>
 
 
</source>
 
 
===Дополнительные объекты для объекта Тур===
 
==== Наличие мест ====
 
<source lang="xml">
 
<OnlineSeatsState>
 
    <allocation>1</allocation>
 
    <flightThereEco>1</flightThereEco>
 
    <flightBackEco>1</flightBackEco>
 
    <flightThereBus>2</flightThereBus>
 
    <flightBackBus>2</flightBackBus>
 
    <isStopFlight>false</isStopFlight>
 
    <isStopAllocation>false</isStopAllocation>
 
</OnlineSeatsState>
 
</source>
 
 
==== Доплаты ====
 
<source lang="xml">
 
<ExtraCharges>
 
    <visa>
 
        <min>25</min>
 
        <max>25</max>
 
        <currency>1</currency>
 
    </visa>
 
    <feeFuel>
 
        <min>0</min>
 
        <max>40</max>
 
        <currency>1</currency>
 
    </feeFuel>
 
</ExtraCharges>
 
</source>
 
 
==== Город вылета ====
 
<source lang="xml">
 
<City>
 
    <id>1000</id>
 
    <name>Москва</name>
 
</City>
 
</source>
 
       
 
==== Страна ====
 
<source lang="xml">
 
<Country>
 
    <id>12</id>
 
    <name>Египет</name>
 
</Country>
 
</source>
 
 
==== Туроператор ====
 
<source lang="xml">
 
<Operator>
 
    <id>308</id>
 
    <name>Troyka</name>
 
</Operator>
 
</source>
 
 
==== Размещение ====
 
<source lang="xml">
 
<RoomSize>
 
    <id>14</id>
 
    <name>DBL</name>
 
    <description>2-е взрослых</description>
 
    <adults>2</adults>
 
    <children>0</children>
 
</RoomSize>
 
</source>
 
 
==== Курорт ====
 
<source lang="xml">
 
<Resort>
 
    <id>4</id>
 
    <name>Хургада</name>
 
</Resort>
 
</source>
 
 
==== Район (курорта) ====
 
<source lang="xml">
 
<ResortPlace>
 
    <id>2392</id>
 
    <name>Эль-Дахар</name>
 
</ResortPlace>
 
</source>
 
 
==== Отель ====
 
<source lang="xml">
 
<Allocation>
 
    <id>12395</id>
 
    <name>Sea View</name>
 
    <rate>2.5</rate>
 
</Allocation>
 
</source>
 
 
==== Категория отеля ====
 
<source lang="xml">
 
<AllocCat>
 
    <id>7</id>
 
    <name>2*</name>
 
</AllocCat>
 
</source>
 
       
 
==== Питание ====
 
<source lang="xml">
 
<Meal>
 
    <id>1</id>
 
    <name>AI</name>
 
    <description>питание+напитки местного производства</description>
 
</Meal>
 
</source>
 
       
 
==== Тип номера ====
 
<source lang="xml">
 
<RoomType>
 
    <id>13</id>
 
    <name>Executive</name>
 
    <description>улучш. номер "Executive"</description>
 
</RoomType>
 
</source>
 
       
 
==== Вид из номера ====
 
<source lang="xml">
 
<RoomView>
 
    <id>22</id>
 
    <name>ROH</name>
 
    <description>без опред. вида из номера</description>
 
</RoomView>
 
</source>
 

Текущая версия на 16:54, 22 июня 2017

Назначение сервиса

Импорт данных в систему клиента

Импорт данных в систему клиента может производиться для получения каких-то статистических показателей. Например расчета минимальных по каким-то параметрам. Или же организации каких-то своих сервисов.

В этом случае используется Тип поиска - БД.

Организация поиска на сайте клиента

Используется для организации сервиса подобного нашему модулю Поиск туров - результаты поиска, когда клиент хочет самостоятельно управлять его работой. Позволяет получить результат в текущий момент наиболее соответствующий данным в системах туроператоров.

В этом случае используется Тип поиска - комбинированный.


В зависимости от выбранного клиентом способа использования сервиса, администрацией TourClient выставляется соответствующая настройка сервиса - тип поиска. Клиенту изменение данной настройки недоступно.

Тип поиска определяет поведение сервиса и предоставляемые им данные.


Описание интерфейсов


Результаты возвращаемые сервисом содержат общие для системы объекты, описанные в


Дополнительная информация