Суточный кеш (xml)

Материал из wiki.Sletat.ru
Перейти к: навигация, поиск

Описание сервиса

Сервис предназначен для выгрузки кеша туров проекта Слетать.ру в базу данных клиента. Раз в час система подготавливает сжатые алгоритмом 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

Набор битовых флагов тура. Тур может иметь несколько установленных флагов одновременно, данное значение является их суммой. Возможные флаги тура:

  • 1 – туроператор рекомендует данный тур;
  • 2 – доступно мгновенное подтверждение;
  • 4 – туроператор считает данный тур лучшим предложением;
  • 8 – тур раннего бронирования;
  • 16 – тур позднего бронирования;
  • 32 – туроператор предоставляет скидку на данный тур;
  • 64 – VIP предложение;
  • 128 – тур доступен в кредит;
  • 256 – тур является эксклюзивным предложением туроператора;
  • 512 – при покупке тура турист получает подарок;
  • 1024 – тур является комбинированным.

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&amp;TOWNFROMINC=75&amp;STATEINC=58&amp;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&amp;TOWNFROMINC=75&amp;STATEINC=58&amp;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?

Идентификатор валюты сбора. Пусто при отсутствии сбора

Топливный сбор применяется по наибольшему совпадению параметров тура с параметрами сбора.Фильтровать сборы для тура нужно следующим образом:

  1. Выбрать сборы по туроператору и те, для которых поле SourceId = null;
  2. Из выбранных сборов взять те, чьи периоды действия включают даты начала и окончания тура;
  3. Из выбранных сборов взять те, для которых поле TownFromId = городу вылета или null;
  4. Из выбранных сборов взять те, для которых поле CountryId = стране или null;
  5. Из выбранных сборов взять те, для которых поле ResortId = курорту или null;
  6. Из выбранных удалить сборы с «широким фильтром» (среди параметров TownFromId, CountryId, ResortId, SourceId все или несколько равны null), у которых остальные параметры совпадают с параметрами сборов в выборке с более «узким фильтром» (среди параметров TownFromId, CountryId, ResortId, SourceId все или несколько равны параметрам тура соответственно).

GetVisaSurcharges

Метод GetVisaSurcharges позволяет получить список всех визовых сборов. Сигнатура:

VisaSurchargeInfo[] GetVisaSurcharges()

Параметры отсутствуют.В ответ возвращает массив описаний визовых сборов VisaSurchargeInfo. Каждый элемент содержит следующие поля:

Название поля

Тип

Описание

SourceId

Int32?

Идентификатор туроператора. Если null, значит сбор применяется вне зависимости от туроператора.

TownFromId

Int32?

Идентификатор города оформления. Возможные исключения:

  1. Если null, значит сбор применяется вне зависимости от города вылета.
  2. Если 1, значит виза оформляется по прибытии.

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[]

Выбранные курорты (если были указаны).