|
|
(не показаны 78 промежуточные версии 3 участников) |
Строка 1: |
Строка 1: |
− | == Использование сервиса ==
| |
− | В зависимости от выбранного клиентом способа использования администрацией TourClient выставляется соответствующая настройка сервиса - '''тип поиска'''. Пользователю сервиса данная настройка недоступна.
| |
| | | |
− | Тип поиска определяет поведение сервиса и предоставляемые им данные.
| + | == Назначение сервиса == |
| + | === Импорт данных в систему клиента === |
| + | Импорт данных в систему клиента может производиться для получения каких-то статистических показателей. Например расчета минимальных по каким-то параметрам. Или же организации каких-то своих сервисов. |
| | | |
− | === Импорт данных в свою систему (тип поиска: БД) ===
| + | В этом случае используется [[XML_-_результаты_поиска/Поиск_туров/Тип_поиска_-_БД|Тип поиска - БД]]. |
− | Импорт данных в свою систему может производиться для получения каких-то статистических показателей. Например расчета минимальных по каким-то параметрам. Или же организации каких-то своих сервисов.
| + | |
| | | |
| + | === Организация поиска на сайте клиента === |
| + | Используется для организации сервиса подобного нашему модулю [[Поиск туров - результаты поиска]], когда клиент хочет самостоятельно управлять его работой. Позволяет получить результат в текущий момент наиболее соответствующий данным в системах туроператоров. |
| | | |
− | '''Сервис предоставляет только те данные которые в текущий момент сохранены в нашей БД.'''
| + | В этом случае используется [[XML_-_результаты_поиска/Поиск туров/Тип_поиска_-_Комбинированный|Тип поиска - комбинированный]]. |
| | | |
| | | |
− | '''Обратите внимание:''' сервис не предназначен для полной синхронизации БД клиента с нашей (из-за большого объема данных и очень интенсивной скорости обновления нашей БД). Архитектура получения данных в текстовом формате через xml-шлюз маленькими блоками не позволит работать с такими объемами данных, пропускной способности будет недостаточно для оперативного обновления данных (потенциально базу выкачать возможно, но она тут же устарает, и не будет успевать обновляться по данной технологии). | + | В зависимости от выбранного клиентом способа использования сервиса, администрацией TourClient выставляется соответствующая настройка сервиса - '''тип поиска'''. Клиенту изменение данной настройки недоступно. |
| + | |
| + | Тип поиска определяет поведение сервиса и предоставляемые им данные. |
| | | |
| + | <br> |
| | | |
− | Сервис рекомендуется использовать для получения данных в рамках какого-то среза ограничивающего возможный объем данных: по ограниченному набору отелей, на ближайшие даты, по нескольким странам и т.п.
| + | == Описание интерфейсов == |
− |
| + | |
− | ==== Особенности работы ==== | + | |
− | * максимально быстрая скорость получения результата
| + | |
− | * ответ на запрос формируется сразу полностью
| + | |
− | * минимальная цена точная (та которая в текущий момент минимальна в нашей БД по данным параметрам)
| + | |
− | * по непопулярным запросам можно получить данных меньше чем в комбинированном поиске, если они в текущий момент не присутствуют в нашей БД (принципы работы комбинированного поиска не позволяют использовать его для выгрузки данных)
| + | |
| | | |
− | ==== Ограничения ====
| + | * [[XML_-_результаты_поиска/Поиск_туров/Интерфейс_-_Результаты_поиска|Результаты поиска]] |
− | * Количество данных возвращаемое одним запросом: не более 2500 туров. | + | * [[XML_-_результаты_поиска/Поиск_туров/Интерфейс_-_Статус_поиска|Статус поиска]] |
− | * Макс. допустимое количество запросов в сутки: не регламентировано (определяется индивидуально в случае создания клиентом высокой нагрузки на сервис). | + | * [[XML_-_результаты_поиска/Поиск_туров/Интерфейс_-_Результаты_поиска_по_отелю|Результаты поиска по отелю]] |
| + | * [[XML_-_результаты_поиска/Поиск_туров/Интерфейс_-_Сводный_прайс_по_ночам|Сводный прайс по ночам]] |
| | | |
| | | |
− | === Организация поиска на своем сайте (тип поиска: комбинированный) ===
| + | Результаты возвращаемые сервисом содержат общие для системы объекты, описанные в |
− | Используется для организации сервиса подобного нашему модулю [[Поиск туров - результаты поиска]], когда клиент хочет самостоятельно управлять его работой.
| + | * [[XML_экспорт/Описание_объектов|Описании объектов]] |
− | | + | |
− | | + | |
− | '''Сервис предоставляет данные полученные в текущий момент из всех возможных источников: сохраненные в БД, полученные "на лету" из системы туроператора, а также некоторыми другими способами.'''
| + | |
− | | + | |
− | | + | |
− | ==== Алгоритм организации поиска ====
| + | |
− | [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">]
| + | |
− | | + | |
− | # Приложение формирует поисковый запрос и отправляет его сервису '''Поиск туров'''.
| + | |
− | # Сервис инициирует новый поиск.
| + | |
− | # Приложение ожидает ответа от сервиса.
| + | |
− | # Сервис возвращает данные по запрошенной странице, данные о количестве найденных туров и ключ поиска.
| + | |
− | # Сервис в фоновом режиме продолжает поиск до нахождения всех данных для запроса.
| + | |
− | # Приложение периодически опрашивает сервис '''Статус поиска''', для обновления найденного количества туров и проверки что поиск не завершен.
| + | |
− | # Получив информацию что поиск завершен приложение может:
| + | |
− | #* сообщить пользователю что поиск завершен
| + | |
− | #* предложить обновить результаты поиска (т.к. могли быть найдены новые данные)
| + | |
− | #* обновить результаты поиска автоматически
| + | |
− | # Для обновления результатов поиска приложение отправляет сервису '''Поиск туров''' поисковый запрос, идентичный тому что был отправлен ранее.
| + | |
− | | + | |
− | | + | |
− | <br clear="all"/>
| + | |
− | | + | |
− | ==== Особенности работы ====
| + | |
− | * В случае если поиск с заданными параметрами уже происходит в текущий момент, сервис будет использовать его результаты. Если данные для запрашиваемой страницы уже получены, она будет возвращена сразу. Если нет, сервис подождет пока поступит необходимое количество данных.
| + | |
− | * В случае если поиск с заданными параметрами уже завершен, сервис сразу вернет результат из кеша поиска.
| + | |
− | * На данный момент время жизни кеша 15 минут.
| + | |
− | | + | |
− | == Сервис Поиск туров ==
| + | |
− | | + | |
− | Работа с сервисом осуществляется путем отправки POST запросов на адрес http://tourclient.ru/f/exml/ИДЕНТИФИКАТОР_ПОЛЬЗОВАТЕЛЯ/tours_export .
| + | |
− | | + | |
− | Параметр request должен содержать xml запроса.
| + | |
− | | + | |
− | В результате сервис вернет ответ в формате xml.
| + | |
− | | + | |
− | === Запрос к сервису ===
| + | |
− | <source lang="xml">
| + | |
− | | + | |
− | <?xml version="1.0" encoding="UTF-8"?>
| + | |
− | <root>
| + | |
− | <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>
| + | |
− | | + | |
− | </root>
| + | |
− | </source>
| + | |
− | | + | |
− | === Ответ сервиса ===
| + | |
− | Сервис возвращает ответ, содержащий массив объектов Тур (Tours) и объект Статус поиска (SearchStatus)
| + | |
− | | + | |
− | <source lang="xml">
| + | |
− | | + | |
− | <?xml version="1.0" encoding="UTF-8"?>
| + | |
− | <root>
| + | |
− | <Tours>
| + | |
− | <Tour>...</Tour>
| + | |
− | <Tour>...</Tour>
| + | |
− | <Tour>...</Tour>
| + | |
− | ...
| + | |
− | </Tours>
| + | |
− | <SearchStatus>
| + | |
− | ...
| + | |
− | </SearchStatus>
| + | |
− | </root>
| + | |
− | | + | |
− | </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"?>
| + | |
− | <root>
| + | |
− | <SearchStatusRequest>
| + | |
− | <key>df1b446a09606710d301153157fc862b</key> <!-- Уникальный ключ поискового запроса. -->
| + | |
− | </SearchStatusRequest>
| + | |
− | </root>
| + | |
− | | + | |
− | </source>
| + | |
− | | + | |
− | === Ответ сервиса ===
| + | |
− | Сервис возвращает ответ объект Статус поиска (SearchStatus)
| + | |
− | | + | |
− | Сервис возвращает ответ, содержащий массив объектов Тур (Tours) и объект Статус поиска (SearchStatus)
| + | |
− | | + | |
− | <source lang="xml">
| + | |
− | | + | |
− | <?xml version="1.0" encoding="UTF-8"?>
| + | |
− | <root>
| + | |
− | <SearchStatus>
| + | |
− | ...
| + | |
− | </SearchStatus>
| + | |
− | </root>
| + | |
− | | + | |
− | </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>
| |
Импорт данных в систему клиента может производиться для получения каких-то статистических показателей. Например расчета минимальных по каким-то параметрам. Или же организации каких-то своих сервисов.
Тип поиска определяет поведение сервиса и предоставляемые им данные.