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

Материал из TourClient - Руководство пользователя
Перейти к: навигация, поиск
(Алгоритм организации поиска)
Строка 2: Строка 2:
 
[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">]
 
[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"/>
  
 
=== Особенности работы ===
 
=== Особенности работы ===

Версия 23:21, 7 июля 2014

Алгоритм организации поиска

  1. Приложение формирует поисковый запрос и отправляет его сервису поиска туров.
  2. Сервис начинает новый поиск.
  3. Приложение ожидает ответа от сервиса.
  4. Сервис возвращает данные по запрошенной странице.
  5. Сервис продолжает поиск до нахождения всех данных для запроса.
  6. Приложение периодически опрашивает сервис статус поиска, для обновления найденного количества туров и проверки что поиск не завершен.
  7. Получив информацию что поиск завершен приложение может:
    • сообщить пользователю что поиск завершен
    • предложить обновить результаты поиска (т.к. могли быть найдены новые данные)
    • обновить результаты поиска автоматически
  8. Для обновления результатов поиска приложение отправляет сервису поиска туров поисковый запрос, идентичный тому что был отправлен ранее.


Особенности работы

  • В случае если поиск с заданными параметрами уже происходит в текущий момент, сервис будет использовать его результаты. Если данные для запрашиваемой страницы уже получены, она будет возвращена сразу. Если нет, сервис подождет пока поступит необходимое количество данных.
  • В случае если поиск с заданными параметрами уже завершен, сервис сразу вернет результат из кеша поиска.
  • На данный момент время жизни кеша 15 минут.

Сервис Поиск туров

Работа с сервисом осуществляется путем отправки POST запросов на адрес ... .

Параметр 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>
</TourExtraEntities>
 
</root>

Ответ сервиса

Сервис возвращает ответ, содержащий массив объектов Тур (Tours) и объект Статус поиска (SearchStatus)

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <Tours>
        <Tour>...</Tour>
        <Tour>...</Tour>
        <Tour>...</Tour>
        ...
    </Tours>
    <SearchStatus>
       ...
    </SearchStatus>
</root>


Сервис Статус поиска

Работа с сервисом осуществляется путем отправки POST запросов на адрес ... .

Параметр 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>