Суточный кеш (xml)
Содержание
Описание сервиса
Сервис предназначен для выгрузки кеша туров проекта Слетать.ру в базу данных клиента. Раз в час система подготавливает сжатые алгоритмом GZIP XML-пакеты с новыми турами, по одному пакету на каждое направление ото всех туроператоров. Веб-сервис предоставляет метод для получения списка подготовленных пакетов. API выгрузки кеша – это стандартный веб-сервис, предоставляющий WSDL-документ с описанием всех методов и типов данных. Версия, выпущенная на момент написания настоящего документа, работает только по протоколу HTTPS. Для большей совместимости с различными клиентами сервис основан на SOAP версии 1.1. Взаимодействие с сервисом возможно одним из двух способов:
- Как с обычным веб-сервисом посредством SOAP запросов, WSDL доступен.
- Как с сервисом WCF (Windows Communication Foundation) — самый простой способ, если клиент под .NET Framework 3.5 или выше. Логика обработки запросов не зависит от способа работы с сервисом. При передаче строк и XML-пакетов используется кодировка UTF-8. Сервис не требует сессий при работе с ним, и все методы не зависят друг от друга с точки зрения очередности вызова. Таким образом, очередность вызова методов диктуется реализуемым алгоритмом для работы с поисковым сервисом.
Внимание! Сервис требует авторизации. Для работы используйте логин и пароль от личного кабинета на сайте sletat.ru. |
Все описанные ниже методы возвращают информацию только при наличии дополнительной лицензии для доступа к Отельной базе. По всем вопросам обращайтесь в службу поддержки по тел. 8(800)700-33-09 (звонок бесплатный для всех регионов России) или по электронной почте info@sletat.ru. |
Подключение к сервису
Чтобы начать работу с сервисом, зарегистрируйтесь на сайте sletat.ru и получите тестовую лицензию в Службе технической поддержки Слетать.ру по электронному адресу info@sletat.ru. После получения лицензии можно начинать работать с API. Для работы с сервисом вам нужно использовать WSDL документ, который расположен по адресу:
https://bulk.sletat.ru/main.svc?singleWSDL
Современные среды разработки позволяют автоматически создавать все необходимые классы, используя WSDL-документ. Это избавляет разработчика от необходимости работать вручную с SOAP-конвертами.Ниже мы подробно опишем алгоритмы работы с сервисом для клиентов, использующих .NET Framework.
Клиент на .NET
Добавьте в проект ссылку на WSDL-документ используя Service Reference (или Web Reference для проектов на .NET 2.0). Теперь ваш проект готов к работе с сервисом. Ниже приведен пример вызова метода для получения списка городов вылета:
using System; using WcfClient.Gate;namespace WcfClient { class Program { static void Main() { // создаём экземпляр обёртки для работы с поисковым сервисом using (var gate = new Soap11GateClient()) { // указываем данные для авторизации на сервисе var authInfo = new AuthData() { Login = "********", Password = "********" }; // далее нам доступен вызов любых методов сервиса var result = gate.GetFuelSurcharges(authInfo); } } } }
Не забудьте указать логин и пароль вашей учетной записи на сайте SLETAT.RU. Данные авторизации передаются первым параметром для всех методов сервиса.
Логика работы с сервисом
Сервис предоставляет метод GetPacketList для получения списка всех доступных для выгрузки пакетов с турами. Каждый пакет имеет указание на город вылета, страну и туроператора, а также на временной интервал, за который пакет включает туры. Используя список, вы можете загрузить либо все туры, либо туры по интересующим направлениям и туроператорам. Каждый пакет имеет уникальный идентификатор, используя который можно загрузить содержимое пакета. Сервис также предоставляет методы для выгрузки топливных и визовых сборов GetFuelSurcharges и GetVisaSurcharges.
Методы
В этом разделе описаны все методы поискового сервиса. К методам приведены примеры запросов и ответов в SOAP. Все методы требуют авторизации. Информация для авторизации (логин и пароль) передаётся в заголовке SOAP:
<soap:Envelope xmlns:soap=http://schemas.xmlsoap.org/soap/envelope/ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Header> <AuthInfo xmlns="urn:SletatRu:DataTypes:AuthData:v1"> <Login>********</Login> <Password>********</Password> </AuthInfo> </soap:Header> <soap:Body> ... </soap:Body> </soap:Envelope>
В примерах SOAP-запросов и ответов, которые приводятся ниже для каждого метода, элемент soap:Header убран для лучшей читаемости документа.
GetPacketList
Метод GetPacketList возвращает список всех пакетов, доступных для загрузки. Сигнатура:
PacketInfo[] GetPacketList(DateTime? createDatePoint)
CreateDatePoint – опциональный параметр; если передан, то будут возвращены пакеты, подготовленные после указанной даты. Каждый пакет ответа имеет следующие поля (знаком * здесь и далее отмечены обязательные поля):
Название поля |
Тип |
Описание |
Id * |
Int32 |
Идентификатор пакета. |
DptCityId * |
Int32 |
Идентификатор города вылета. |
CountryId * |
Int32 |
Идентификатор страны. |
SourceId * |
Int32 |
Идентификатор туроператора. |
DateTimeFrom * |
DateTime |
Начало временного интервала, за который были собраны обновлённые туры (московское время). |
DateTimeTo * |
DateTime |
Окончание временного интервала, за который были собраны обновлённые туры (московское время). |
CreateDate * |
DateTime |
Дата и время подготовки пакета (московское время). |
BulkCacheDownload
BulkCacheDownload в интерфейсе сервиса выгрузки кеша является не методом, а отдельным инструментом для загрузки содержимого пакетов по их идентификаторам. Для работы с методом используются HTTP GET-запросы. Использование:
https://bulk.sletat.ru/BulkCacheDownload?packetId=[packetId]
Параметр packetId – идентификатор пакета.Ответом является сжатый алгоритмом GZIP XML-пакет, MIME-тип устанавливается application/x-gzip. XML-пакет имеет кодировку UTF-8 и несложную структуру в виде корневого элемента tours и элементов tour, каждый из которых в атрибутах содержит описание одного тура. Ниже в таблице описаны все атрибуты для элементов tour:
Название атрибута |
Тип |
Описание | ||
adults * |
Int32 |
Количество туристов (взрослых). | ||
hasBusinessTicketsDpt |
Int32 |
Наличие билетов бизнес-класса (туда). Возможные значения: 0 (нет билетов), 1 (есть билеты), 2 (под запрос). Если атрибут отсутствует, то этой информации. | ||
hasBusinessTicketsRtn |
Int32 |
Наличие билетов бизнес-класса (обратно). Возможные значения: 0 (нет билетов), 1 (есть билеты), 2 (под запрос). Если атрибут отсутствует, то этой информации нет. | ||
ticketsIncluded * |
Int32 |
Включает ли тур в стоимость перелёт: 0 (не включает) и 1 (включает). Если атрибут отсутствует, то нет такой информации о туре. | ||
checkIn * |
String |
Дата вылета в формате dd.MM.yyyy. | ||
hasEconomTicketsDpt |
Int32 |
Наличие билетов эконом-класса (туда). Возможные значения: 0 (нет билетов), 1 (есть билеты), 2 (под запрос). | ||
hasEconomTicketsRtn |
Int32 |
Наличие билетов эконом-класса (обратно), возможные значения: 0 (нет билетов), 1 (есть билеты), 2 (под запрос). Если атрибут отсутствует, то этой информации нет. | ||
hotelId |
Int32 |
Идентификатор отеля. Может отсутствовать, если отель не слинкован. | ||
hotelIsInStop |
Int32 |
Наличие мест в отеле. Возможные значения: 1 (нет мест), 0 (есть места), 2 (под запрос). Если атрибут отсутствует, то этой информации нет. | ||
hotelName * |
String |
Название отеля. | ||
htPlaceId |
Int32 |
Идентификатор размещения. Атрибут может отсутствовать, если размещение не слинковано. | ||
htplaceName * |
String |
Тип размещения. | ||
kids * |
Int32 |
Количество туристов (детей). | ||
kid1age |
Int32 |
Возраст первого ребенка. Атрибут необязательный. | ||
kid2age |
Int32 |
Возраст второго ребенка. Атрибут необязательный. | ||
kid3age |
Int32 |
Возраст третьего ребенка. Атрибут необязательный. | ||
mealId |
Int32 |
Идентификатор типа питания. Может отсутствовать, если тип питания не слинкован. | ||
mealName * |
String |
Тип питания. | ||
nights * |
Int32 |
Продолжительность тура, ночей. | ||
offerId * |
Int64 |
Идентификатор ценового предложения. Используется вместе с sourceId и requestId для актуализации тура и для оформления заказа. | ||
price * |
Int32 |
Цена тура в запрошенной валюте. | ||
currencyId * |
Int32 |
Идентификатор валюты к атрибуту price (2 – USD, 3 – EUR, 5 – RUR). | ||
requestId |
Int32 |
Идентификатор поискового запроса. Используется вместе с sourceId и requestId для актуализации тура и для оформления заказа. | ||
townId |
Int32 |
Идентификатор курорта. Может отсутствовать, если курорт не слинкован. | ||
townName * |
String |
Название курорта. | ||
roomId |
Int32 |
Идентификатор типа номера. Может отсутствовать, если тип номера не слинкован. | ||
roomName * |
String |
Тип номера. | ||
sourceId * |
Int32 |
Идентификатор туроператора. Значение используется вместе с offerId и requestId для заказа и оформления туров. | ||
starId |
Int32 |
Идентификатор категории отеля. Может отсутствовать, если категория отеля не слинкована. | ||
starName * |
String |
Категория отеля. | ||
tourName * |
String |
Название тура. Может быть пустым, если туроператор не предоставляет таких данных. | ||
tourUrl |
String |
Ссылка на описание / бронирование тура на сайте туроператора. | ||
originalHotelName * |
String |
Оригинальное название отеля (данные туроператора). | ||
originalStarName * |
String |
Оригинальная категория отеля (данные туроператора). | ||
originalTownName * |
String |
Оригинальное название курорта (данные туроператора). | ||
originalMealName * |
String |
Оригинальный тип питания (данные туроператора). | ||
originalHtPlaceName * |
String |
Оригинальный тип размещения (данные туроператора). | ||
originalRoomName * |
String |
Оригинальный тип номера (данные туроператора). | ||
originalCountryName * |
String |
Оригинальное название страны (данные туроператора). | ||
originalDptCityName * |
String |
Оригинальное название города вылета (данные туроператора). | ||
originalPrice * |
Int32 |
Цена тура у туроператора (может отличаться от цены в атрибуте price, если туроператор предоставляет такую информацию). | ||
originalCurrencyId * |
Int32 |
Идентификатор валюты к атрибуту originalPrice (2 – USD, 3 – EUR, 5 – RUR). | ||
originalCurrencyName * |
String |
Оригинальное название валюты у туроператора. | ||
fewPlacesInHotel |
Int32 |
Если есть места в отеле (hotelIsInStop = 0) и данное значение отлично от нуля, то мест в отеле МАЛО. Значение -1 передаётся, если туроператор сообщает, что мест МАЛО, но не информирует о точном количестве в остатке. Если передано любое иное число, отличное от нуля, то это точное количество оставшихся мест. | ||
fewEconomTicketsDpt |
Int32 |
Если есть места на перелёт эконом-классом (туда) (economTicketsDpt = 1) и данное значение отлично от нуля, то билетов МАЛО. Значение -1 передаётся, если туроператор сообщает, что билетов МАЛО, но не информирует о точном количестве в остатке. Если передано любое иное число отличное от нуля, то это точное количество оставшихся билетов. | ||
fewEconomTicketsRtn |
Int32 |
Если есть места на перелёт эконом-классом (обратно) (economTicketsRtn = 1) и данное значение отлично от нуля, то билетов МАЛО. Значение -1 передаётся, если туроператор сообщает, что билетов МАЛО, но не информирует о точном количестве в остатке. Если передано любое иное число отличное от нуля, то это точное количество оставшихся билетов. | ||
fewBusinessTicketsDpt |
Int32 |
Если есть места на перелёт бизнес-классом (туда) (businessTicketsDpt = 1) и данное значение отлично от нуля, то билетов МАЛО. Значение -1 передаётся, если туроператор сообщает, что билетов МАЛО, но не информирует о точном количестве в остатке. Если передано любое иное число отличное от нуля, то это точное количество оставшихся билетов. | ||
fewBusinessTicketsRtn |
Int32 |
Если есть места на перелёт бизнес-классом (обратно) (businessTicketsRtn = 1) и данное значение отлично от нуля, то билетов МАЛО. Значение -1 передаётся, если туроператор сообщает, что билетов МАЛО, но не информирует о точном количестве в остатке. Если передано любое иное число отличное от нуля, то это точное количество оставшихся билетов. | ||
priceType * |
Int32 |
Тип цены у туроператора (0 – на номер, 1- на человека). Независимо от типа цены стоимость тура выдаётся конечной. | ||
flags |
UInt64 |
Набор битовых флагов тура. Тур может иметь несколько установленных флагов одновременно, данное значение является их суммой. Возможные флаги тура:
| ||
creditMonths |
Int32? |
Если тур доступен для покупки в кредит, то в данном поле указывается срок кредита в месяцах, иначе атрибут будет отсутствовать. | ||
creditMonthlyPay |
Int32? |
Если тур доступен для покупки в кредит, то в данном поле указывается размер ежемесячных выплат, иначе атрибут будет отсутствовать. | ||
description |
String |
Дополнительная информация по туру. Например, для комбинированных туров может содержать информацию о проживании в отелях. | ||
discountPercent |
Single? |
Если туроператор предоставляет скидку, то в данном поле выводится размер скидки, иначе атрибут будет отсутствовать. | ||
discountExpires |
DateTime ? |
Если туроператор предоставляет скидку и указывает срок её действия, то в данном поле выводится дата окончания акции, иначе атрибут будет отсутствовать. | ||
discountCaption |
String |
Описание скидки/акции. | ||
receivingParty |
String |
Принимающая сторона (если информация предоставляется туроператором). | ||
giftCaption |
String |
Если по акции туроператор предоставляет подарки, то в данном поле выводится их описание. | ||
earlyBookingValidTill |
DateTime ? |
Если тур является туром раннего бронирования и туроператор предоставляет последнюю дату ранней брони, то в данном поле выводится это значение, иначе атрибут будет отсутствовать. | ||
updateDate * |
DateTme |
Дата и время (UTC) последнего обновления информации о туре. | ||
Пример запроса направлений для Санкт-Петербурга:
https://bulk.sletat.ru/BulkCacheDownload?packetId=922AC42F-9927-4B8C-A1EB-0020C35C4F22
После загрузки и распаковки данных получаем следующий пакет (для читаемости оставлены только два элемента tour):
<tours> <tour offerId="200626003" requestId="116002036" sourceId="3" updateDate="2013-04-28 14:31:00" price="35382" currencyId="5" checkin="2013-05-26" nights="13" adults="1" kids="0" mealId="113" roomId="5283" htplaceId="13094" hotelIsInStop="0" ticketsIncluded="1" hasEconomTicketsDpt="1" hasEconomTicketsRtn="1" hasBusinessTicketsDpt="0" hasBusinessTicketsRtn="0" tourName="PALMA DE MALLORCA (KEMEROVO)" hotelName="HOTEL BLUE SEA DON JAIME" townName="PALMA DE MALLORCA" starName="3*" mealName="HB" roomName="Standard" htplaceName="SGL" originalHotelName="HOTEL BLUE SEA DON JAIME" originalTownName="PALMA DE MALLORCA" originalStarName="3*" originalMealName="HB" originalRoomName="Standard Room" originalHtplaceName="Single" originalCountryName="SPAIN" originalDptCityName="Кемерово" originalCurencyId="3" originalCurrencyName="EUR" originalPrice="853" tourUrl="https://agency.pegast.ru/samo5/bron?CLAIM=1717245082&TOWNFROMINC=75&STATEINC=58&SPOINC=397842" priceType="0" flags="128" creditMonths="6" creditMonthlyPay="5897" /> <tour offerId="200626009" requestId="116002036" sourceId="3" updateDate="2013-04-28 14:31:00" price="39282" currencyId="5" checkin="2013-05-26" nights="13" adults="1" kids="0" mealId="113" htplaceId="13094" hotelIsInStop="0" ticketsIncluded="1" hasEconomTicketsDpt="1" hasEconomTicketsRtn="1" hasBusinessTicketsDpt="0" hasBusinessTicketsRtn="0" tourName="PALMA DE MALLORCA (KEMEROVO)" hotelName="APARTHOTEL BLUE SEA CALA GUYA MAR" townName="PALMA DE MALLORCA" starName="3*" mealName="HB" roomName="One Bedroom Apartment" htplaceName="SGL" originalHotelName="APARTHOTEL BLUE SEA CALA GUYA MAR" originalTownName="PALMA DE MALLORCA" originalStarName="3*" originalMealName="HB" originalRoomName="One Bedroom Apartment" originalHtplaceName="Single" originalCountryName="SPAIN" originalDptCityName="Кемерово" originalCurencyId="3" originalCurrencyName="EUR" originalPrice="947" tourUrl="https://agency.pegast.ru/samo5/bron?CLAIM=1717245104&TOWNFROMINC=75&STATEINC=58&SPO INC=397842" priceType="0" flags="128" creditMonths="6" creditMonthlyPay="6547" /> </tours>
GetFuelSurcharges
Метод GetFuelSurcharges позволяет получить список всех топливных сборов.Сигнатура:
FuelSurchargeInfo[] GetFuelSurcharges()
Параметры отсутствуют. В ответ возвращает массив описаний топливных сборов FuelSurchargeInfo. Каждый элемент содержит следующие поля:
Название поля |
Тип |
Описание |
SourceId |
Int32? |
Идентификатор туроператора. Если null, значит сбор применяется вне зависимости от туроператора |
TownFromId |
Int32? |
Идентификатор города вылета. Если null, значит сбор применяется вне зависимости от города вылета. |
CountryId |
Int32? |
Идентификатор направления. Если null, значит сбор применяется вне зависимости от направления. |
ResortId |
Int32? |
Идентификатор курорта, если null, значит сбор применяется вне зависимости от курорта. |
AirportId |
Int32? |
Идентификатор аэропорта назначения. Если null, значит сбор применяется вне зависимости от аэропорта назначения. |
AircompanyId |
Int32? |
Идентификатор авиакомпании. Если null, значит сбор применяется вне зависимости от авиакомпании. |
FlightNumber |
Int32? |
Номер рейса. Если null, значит сбор применяется вне зависимости от номера рейса. |
HostId |
Int32? |
Идентификатор туроператора принимающей стороны. Если null, значит сбор применяется вне зависимости от туроператора принимающей стороны. |
PeriodStartDate |
DateTime |
Дата начала действия сбора. |
PeriodEndDate |
DateTime |
Дата окончания действия сбора. |
Price |
Decimal ? |
Сумма сбора. Если пусто, значит по данному фильтру сбор не взимается. |
CurrencyId |
Int32? |
Идентификатор валюты сбора. Пусто при отсутствии сбора |
Топливный сбор применяется по наибольшему совпадению параметров тура с параметрами сбора.Фильтровать сборы для тура нужно следующим образом:
- Выбрать сборы по туроператору и те, для которых поле SourceId = null;
- Из выбранных сборов взять те, чьи периоды действия включают даты начала и окончания тура;
- Из выбранных сборов взять те, для которых поле TownFromId = городу вылета или null;
- Из выбранных сборов взять те, для которых поле CountryId = стране или null;
- Из выбранных сборов взять те, для которых поле ResortId = курорту или null;
- Из выбранных удалить сборы с «широким фильтром» (среди параметров TownFromId, CountryId, ResortId, SourceId все или несколько равны null), у которых остальные параметры совпадают с параметрами сборов в выборке с более «узким фильтром» (среди параметров TownFromId, CountryId, ResortId, SourceId все или несколько равны параметрам тура соответственно).
GetVisaSurcharges
Метод GetVisaSurcharges позволяет получить список всех визовых сборов. Сигнатура:
VisaSurchargeInfo[] GetVisaSurcharges()
Параметры отсутствуют.В ответ возвращает массив описаний визовых сборов VisaSurchargeInfo. Каждый элемент содержит следующие поля:
Название поля |
Тип |
Описание |
SourceId |
Int32? |
Идентификатор туроператора. Если null, значит сбор применяется вне зависимости от туроператора. |
TownFromId |
Int32? |
Идентификатор города оформления. Возможные исключения:
|
CountryId |
Int32? |
Идентификатор страны назначения. Если null, значит сбор применяется вне зависимости от страны назначения |
Citizenship |
Int32? |
Идентификатор страны, гражданином которой является турист. Если null, значит сбор применяется вне зависимости от гражданства. |
IsExpress |
bool? |
True – сбор указан для экспресс-оформления. False – сбор указан для обычного оформления, null – сбор для любого типа оформления. |
AgeFrom |
Int32? |
Нижняя возрастная граница оформления визы. |
AgeTo |
Int32? |
Верхняя возрастная граница оформления визы. |
PasportType |
bool? |
Тип паспорта: true – свой, false – вписан, null – сбор применяется вне зависимости от типа паспорта. |
IssueDaysFrom |
Int32? |
Минимальный срок оформления, дней. |
IssueDaysTo |
Int32? |
Максимальный срок оформления, дней. |
Price |
Decimal ? |
Сумма сбора. Если пусто, значит по данному фильтру сбор не взимается. |
CurrencyId |
Int32? |
Идентификатор валюты сбора. Пусто при отсутствии сбора. |
GetRequestInfo
Вспомогательный метод GetRequestInfo предназначен для получения данных о поисковом запросе по его идентификатору. Идентификаторы поисковых запросов присутствуют в выгрузке для всех туров. Сигнатура:
RequestInfo GetRequestInfo(Int32 requestId)
Параметр requestId – идентификатор поискового запроса. Если запрос был найден, то в ответ будет возвращена структура со следующими полями:
Название поля |
Тип |
Описание |
CurrencyAlias * |
Int32 |
Валюта поиска (RUB, USD, UAH, BYR или EUR). |
DptCityId * |
Int32 |
Идентификатор города вылета. |
CountryId * |
Int32 |
Идентификатор страны. |
Adults * |
Int32 |
Количество туристов (взрослых). |
Kids * |
Int32 |
Количество туристов (детей). |
KidsAges |
Int32[] |
Возрасты детей (если были указаны). |
NightsMin * |
Int32 |
Минимальная продолжительность тура, ночей. |
NightsMax * |
Int32 |
Максимальная продолжительность тура, ночей. |
PriceMin |
Int32 |
Минимальная цена. |
PriceMax |
Int32 |
Максимальная цена. |
Date1 * |
DateTime |
Диапазон дат вылета, первая дата. |
Date2 * |
DateTime |
Диапазон дат вылета, вторая дата. |
HotelIsNotInStop * |
Boolean |
Отмечен флажок «Есть места в отеле». |
TicketsIncluded * |
Boolean |
Отмечен флажок «Перелет включен». |
HasTickets * |
Boolean |
Отмечен флажок «Есть билеты». |
HotelIds |
Int32[] |
Выбранные отели (если были указаны). |
StarIds |
Int32[] |
Выбранные категории отелей (если были указаны). |
MealIds |
Int32[] |
Выбранные типы питания (если были указаны). |
TownIds |
Int32[] |
Выбранные курорты (если были указаны). |