XML - результаты поиска/Поиск туров — различия между версиями
Jeka (обсуждение | вклад) м (→Особенности работы) |
Akme (обсуждение | вклад) |
||
Строка 151: | Строка 151: | ||
<entity>RoomType</entity> | <entity>RoomType</entity> | ||
<entity>RoomView</entity> | <entity>RoomView</entity> | ||
+ | <entity>Operator</entity> | ||
</TourExtraEntities> | </TourExtraEntities> | ||
Версия 11:39, 8 июля 2014
Содержание
Использование сервиса
В зависимости от выбранного клиентом способа использования администрацией TourClient выставляется соответствующая настройка сервиса - тип поиска. Пользователю сервиса данная настройка недоступна.
Тип поиска определяет поведение сервиса и предоставляемые им данные.
Импорт данных в свою систему (тип поиска: БД)
Импорт данных в свою систему может производиться для получения каких-то статистических показателей. Например расчета минимальных по каким-то параметрам. Или же организации каких-то своих сервисов.
Сервис предоставляет только те данные которые в текущий момент сохранены в нашей БД.
Обратите внимание: сервис не предназначен для полной синхронизации БД клиента с нашей (из-за большого объема данных и очень интенсивной скорости обновления нашей БД). Архитектура получения данных в текстовом формате через xml-шлюз маленькими блоками не позволит работать с такими объемами данных, пропускной способности будет недостаточно для оперативного обновления данных (потенциально базу выкачать возможно, но она тут же устарает, и не будет успевать обновляться по данной технологии).
Сервис рекомендуется использовать для получения данных в рамках какого-то среза ограничивающего возможный объем данных: по ограниченному набору отелей, на ближайшие даты, по нескольким странам и т.п.
Особенности работы
- максимально быстрая скорость получения результата
- ответ на запрос формируется сразу полностью
- минимальная цена точная (та которая в текущий момент минимальна в нашей БД по данным параметрам)
- по непопулярным запросам можно получить данных меньше чем в комбинированном поиске, если они в текущий момент не присутствуют в нашей БД (принципы работы комбинированного поиска не позволяют использовать его для выгрузки данных)
Ограничения
- Количество данных возвращаемое одним запросом: не более 2500 туров.
- Макс. допустимое количество запросов в сутки: не регламентировано (определяется индивидуально в случае создания клиентом высокой нагрузки на сервис).
Организация поиска на своем сайте (тип поиска: комбинированный)
Алгоритм организации поиска
- Приложение формирует поисковый запрос и отправляет его сервису Поиск туров.
- Сервис инициирует новый поиск.
- Приложение ожидает ответа от сервиса.
- Сервис возвращает данные по запрошенной странице, данные о количестве найденных туров и ключ поиска.
- Сервис в фоновом режиме продолжает поиск до нахождения всех данных для запроса.
- Приложение периодически опрашивает сервис Статус поиска, для обновления найденного количества туров и проверки что поиск не завершен.
- Получив информацию что поиск завершен приложение может:
- сообщить пользователю что поиск завершен
- предложить обновить результаты поиска (т.к. могли быть найдены новые данные)
- обновить результаты поиска автоматически
- Для обновления результатов поиска приложение отправляет сервису Поиск туров поисковый запрос, идентичный тому что был отправлен ранее.
Особенности работы
- В случае если поиск с заданными параметрами уже происходит в текущий момент, сервис будет использовать его результаты. Если данные для запрашиваемой страницы уже получены, она будет возвращена сразу. Если нет, сервис подождет пока поступит необходимое количество данных.
- В случае если поиск с заданными параметрами уже завершен, сервис сразу вернет результат из кеша поиска.
- На данный момент время жизни кеша 15 минут.
Сервис Поиск туров
Работа с сервисом осуществляется путем отправки POST запросов на адрес http://tourclient.ru/f/exml/ИДЕНТИФИКАТОР_ПОЛЬЗОВАТЕЛЯ/tours_export .
Параметр request должен содержать xml запроса.
В результате сервис вернет ответ в формате 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>
Ответ сервиса
Сервис возвращает ответ, содержащий массив объектов Тур (Tours) и объект Статус поиска (SearchStatus)
<?xml version="1.0" encoding="UTF-8"?> <root> <Tours> <Tour>...</Tour> <Tour>...</Tour> <Tour>...</Tour> ... </Tours> <SearchStatus> ... </SearchStatus> </root>
Сервис Статус поиска
Работа с сервисом осуществляется путем отправки POST запросов на адрес http://tourclient.ru/f/exml/ИДЕНТИФИКАТОР_ПОЛЬЗОВАТЕЛЯ/tours_export .
Параметр request должен содержать xml запроса.
В результате сервис вернет ответ в формате xml.
Запрос к сервису
<?xml version="1.0" encoding="UTF-8"?> <root> <SearchStatusRequest> <key>df1b446a09606710d301153157fc862b</key> <!-- Уникальный ключ поискового запроса. --> </SearchStatusRequest> </root>
Ответ сервиса
Сервис возвращает ответ объект Статус поиска (SearchStatus)
Сервис возвращает ответ, содержащий массив объектов Тур (Tours) и объект Статус поиска (SearchStatus)
<?xml version="1.0" encoding="UTF-8"?> <root> <SearchStatus> ... </SearchStatus> </root>
Описание объектов
Объект Статус поиска
<SearchStatus> <key>df1b446a09606710d301153157fc862b</key> <!-- Уникальный ключ поискового запроса. --> <inProgress>true</inProgress> <!-- Параметр показывающий завершен ли поиск. --> <toursCount>450</toursCount> <!-- Количество найденных (на момент получения статуса) туров в рамках данного поискового запроса. --> <exactCount>false</exactCount> <!-- Параметр показывающий что количество найденных туров окончательное, и при изменении параметров offset и limit изменяться не будет. --> </SearchStatus>
Объект Тур
<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>
Дополнительные объекты для объекта Тур
Наличие мест
<OnlineSeatsState> <allocation>1</allocation> <flightThereEco>1</flightThereEco> <flightBackEco>1</flightBackEco> <flightThereBus>2</flightThereBus> <flightBackBus>2</flightBackBus> <isStopFlight>false</isStopFlight> <isStopAllocation>false</isStopAllocation> </OnlineSeatsState>
Доплаты
<ExtraCharges> <visa> <min>25</min> <max>25</max> <currency>1</currency> </visa> <feeFuel> <min>0</min> <max>40</max> <currency>1</currency> </feeFuel> </ExtraCharges>
Город вылета
<City> <id>1000</id> <name>Москва</name> </City>
Страна
<Country> <id>12</id> <name>Египет</name> </Country>
Туроператор
<Operator> <id>308</id> <name>Troyka</name> </Operator>
Размещение
<RoomSize> <id>14</id> <name>DBL</name> <description>2-е взрослых</description> <adults>2</adults> <children>0</children> </RoomSize>
Курорт
<Resort> <id>4</id> <name>Хургада</name> </Resort>
Район (курорта)
<ResortPlace> <id>2392</id> <name>Эль-Дахар</name> </ResortPlace>
Отель
<Allocation> <id>12395</id> <name>Sea View</name> <rate>2.5</rate> </Allocation>
Категория отеля
<AllocCat> <id>7</id> <name>2*</name> </AllocCat>
Питание
<Meal> <id>1</id> <name>AI</name> <description>питание+напитки местного производства</description> </Meal>
Тип номера
<RoomType> <id>13</id> <name>Executive</name> <description>улучш. номер "Executive"</description> </RoomType>
Вид из номера
<RoomView> <id>22</id> <name>ROH</name> <description>без опред. вида из номера</description> </RoomView>