Отельная база (xml)

Материал из wiki.Sletat.ru
Версия от 10:53, 4 октября 2018; Kdadmin (обсуждение | вклад) (Работа с изображениями отелей)

Перейти к: навигация, поиск

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

Отельная база Слетать.ру даёт вам доступ к информации обо всех отелях, представленных в системе поиска Слетать.ру, включая адреса, банки фотографий и отзывы реальных туристов. Это стандартный веб-сервис, предоставляющий WSDL-документ с описанием всех методов и типов данных. Текущая версия сервиса работает только по протоколу HTTP/2 и TLS/1.2. Для большей совместимости с различными клиентами сервис основан на SOAP версии 1.1.

Взаимодействие с сервисом возможно одним из двух способов:

  • Как с обычным веб-сервисом посредством SOAP-запросов, WSDL доступен.
  • Как с сервисом WCF (Windows Communication Foundation) — самый простой

способ, если клиент под .NET Framework 3.5 или выше.

При передаче строк и XML-пакетов используется кодировка UTF-8.

Работа сервиса не требует сессий, и методы не зависят друг от друга с точки зрения очередности вызова. Таким образом, очередность вызова методов диктуется реализуемым алгоритмом работы с поисковым сервисом.

Внимание! Сервис требует авторизации. Для работы используйте логин и пароль от личного кабинета на сайте sletat.ru.
Все описанные ниже методы возвращают информацию только при наличии дополнительной лицензии для доступа к Отельной базе. По всем вопросам обращайтесь в службу поддержки по тел. 8(800)700-33-09 (звонок бесплатный для всех регионов России) или по электронной почте support@sletat.ru.

Подключение к сервису

Чтобы начать работу с сервисом, зарегистрируйтесь на сайте sletat.ru и получите тестовую лицензию в Службе технической поддержки Слетать.ру по электронной почте support@sletat.ru. После получения лицензии можно начинать работать с API. Для работы с сервисом используйте WSDL-документ, расположенный по адресу:

https://module.sletat.ru/XmlGate.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.GetHotelComments(15523);             }
        }
    }
}

Не забудьте указать логин и пароль вашей учетной записи на сайте sletat.ru. Данные для авторизации передаются первым параметром для всех методов сервиса.

Логика работы с сервисом

Метод получения информации об отеле использует идентификатор отеля. Соответственно, сначала нужно загрузить список всех отелей. Также в информации об отеле используются идентификатор страны и идентификатор категории отеля. Соответствующие справочники вы можете загрузить одним документом по адресу:

https://module.sletat.ru/Dictionaries.xml


Методы

В этом разделе описаны все методы поискового сервиса. К методам приведены примеры запросов и ответов в 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>
    <GetHotelComments xmlns="urn:SletatRu:Contracts:Soap11Gate:v1">
      <hotelId>15523</hotelId>
    </GetHotelComments>
  </soap:Body>
</soap:Envelope>

В примерах SOAP- запросов и ответов, которые приводятся ниже для каждого метода, элемент soap:Header убран для лучшей читаемости документа.Все идентификаторы в методах используют тип Int32 (если не указано иначе), который может принимать значения от -2 147 483 648 до 2 147 483 647.

GetHotelInformation

Метод возвращает полную информацию по отелю.Сигнатура:

HotelInformation GetHotelInformation(
                        Int32 hotelId,
                        String cssStylesheet)

Параметры:

  • hotelId – идентификатор отеля;
  • cssStylesheet(устаревший параметр) URL-адрес внешнего файла CSS, который необходимо подключить на странице с описанием отеля. В текущей версии можно подключить нужный файл таблицы стилей в GET-параметре вызова iframe, например: https://hotels.sletat.ru/hotel_desc/?id=36064&cssStylesheet=http://ya.ru/style.css

В ответ возвращается структура HotelInformation:

Поле

Тип

Описание

Int32

Идентификатор отеля.

Address

String

Адрес отеля.

AirportDistance

Double

Расстояние до аэропорта.

Area

String

Регион, в котором расположен отель.

BuildingDate

String

Дата постройки отеля.

CityCenterDistance

Double

Расстояние от центра города.

CountryId

Int32

Идентификатор страны, в которой расположен отель.

CountryName

String

Наименование страны, в которой расположен отель.

Description

String

HTML-код, содержащий iframe с описанием отеля. К коду HTML-страницы внутри iframe подключается таблица стилей, указанная в GET-параметре cssStylesheet. Пример вызова iframe с указанием файла таблицы стилей: https://hotels.sletat.ru/hotel_desc/?id=36064&cssStylesheet=http://ya.ru/style.css

DistanceToLifts

String

Расстояние до подъемников.

District

String

Район, в котором расположен отель.

Email

String

Адрес электронной почты.

Fax

String

Номер факса.

HotelRate

Float

Рейтинг отеля.

HouseNumber

String

Номер дома, в котором расположен отель.

ImageCount

Int32

Объём банка фотографий.

Latitude

Float

Широта, на которой расположен отель.

Longitude

Float

Долгота, на которой расположен отель.

Name

String

Наименование отеля.

NativeAddress

String

Адрес отеля на языке страны, в которой отель расположен.

OldCyrillicName

String

Старое название кириллицей.

OldLatinName

String

Старое название латиницей.

Phone

String

Номер телефона.

PostIndex

String

Почтовый индекс.

RatingMeal

Int32

Рейтинг отеля по показателю качества еды.

RatingOverall

Int32

Суммарный рейтинг отеля.

RatingPlace

Int32

Рейтинг отеля по его расположению.

RatingService

Int32

Рейтинг отеля по показателю качества обслуживания.

Region

String

Область, в которой расположен отель.

Renovation

String

Дата реконструкции.

ResortId

Int32

Идентификатор курорта, в котором расположен отель.

Resort

String

Название курорта, в котором расположен отель.

RoomsCount

Int32

Количество номеров в отеле.

Site

String

Адрес вебсайта отеля.

Square

String

Площадь, занимаемая отелем.

StarId

Int32

Идентификатор категории отеля из справочника, параметр может быть равен 0, если категория отеля туроператора не слинкована.

StarName

String

Название категории отеля из справочника, параметр может иметь пустое значение, если категория отеля туроператора не слинкована.

Street

String

Название улицы, на которой расположен отель.

Video

String

Ссылка на видео об отеле.

ImageUrls

String[]

Массив строк, в которых указаны URL-адреса всех изображений из банка фотографий отеля

HotelFacilities

HotelInfoFacilityGroup[]

Массив структур HotelInfoFacilityGroup, содержащих группы услуг отеля. Структура HotelInfoFacilityGroup описана ниже.

Error

Boolean

True, если при поиске отеля произошла ошибка.

ErrorDescription

String

Текстовое описание ошибки. Например, «Отель не найден в базе данных».

Внимание! Условия использования API-сервиса запрещают каким-либо образом изменять содержание поля Description, а также размещать данные поля в блоках, доступных для индексирования поисковыми системами. Все авторские права на контент, передаваемый в этом поле, принадлежат Слетать.ру. Согласно Договору, в случае нарушения этого требования все действующие лицензии будут отозваны без возврата стоимости недооказанных услуг.

Описание структуры HotelInfoFacilityGroup:

Поле

Тип

Описание

Id

Int32

Идентификатор группы услуг.

Name

String

Наименование группы услуг.

Facilities

HotelInfoFacility[]

Массив структур HotelInfoFacility, содержащих услуги отеля в данной группе. Структура HotelInfoFacility описана ниже.

Описание структуры HotelInfoFacility:HotelInfoFacilityGroup

Поле Тип Описание

Id

Int32

Идентификатор услуги.

Name

String

Наименование услуги.

Hit

String

Дополнительные сведения об услуге.

Соответствие полей Name и ID отображены в файле.

Работа с изображениями отелей

Для вставки изображений используйте следующий шаблон генерации ссылки:

https://hotels.sletat.ru/i/p/{hotelId}_{imageNumber}_{height}_{width}_{method}.jpg 

где:

  • hotelId – идентификатор отеля;
  • imageNumber – номер изображения;
  • height – необходимая высота изображения;
  • width – необходимая ширина изображения;
  • method – метод обработки, имеет всего 2 значения (0 – не сохранять пропорции изображения, сжимать, растягивать под указанный размер; 1 – сохранять пропорции изображения, обрезать под указанный размер)

Если площадь изображения превышает 90 000 px (или если вы хотите получить максимально качественную картинку), необходимо загружать исходное изображение по следующей ссылке:

https://hotels.sletat.ru/i/f/{hotelId}_{imageNumber}.jpg

где hotelId – идентификатор отеля; imageNumber – номер изображения.

На всех изображениях, площадь которых превышает 40 000 пикселей (200x200px), автоматически размещается водяной знак. Если у вас активна лицензия на отельную базу, в качестве водяного знака будет размещен адрес вашего сайта (возможно размещение другой строки по согласованию с менеджером). В противном случае будет размещен водяной знак проекта Слетать.ру.

Внимание! Если вы вставляете на свой сайт теги img и указываете в атрибуте src адреса изображений, созданных по указанным выше шаблонам, вы получите на изображении корректный водяной знак с адресом вашего сайта. Если вы будете загружать изображения программным методом на свои сервера, они будут отданы с водяным знаком проекта Слетать.ру. Это сделано для того, чтобы фотографии отелей использовать только при непосредственном выводе их с сервера https://hotels.sletat.ru.

Пример SOAP-запроса информации об отеле с идентификатором 15523:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <GetHotelInformation xmlns="urn:SletatRu:Contracts:Soap11Gate:v1">
      <hotelId>15523</hotelId>
      <cssStylesheet i:nil="true" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"/>
    </GetHotelInformation>
  </s:Body>
</s:Envelope>

Пример SOAP-ответа:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <GetHotelInformationResponse xmlns="urn:SletatRu:Contracts:Soap11Gate:v1">
      <GetHotelInformationResult xmlns:a="urn:SletatRu:DataTypes:HotelInformation:v1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <a:Address i:nil="true"/>
        <a:AirportDistance>10</a:AirportDistance>
        <a:Area>Red Sea, Sinai</a:Area>
        <a:BuildingDate>1987</a:BuildingDate>
        <a:CityCenterDistance>2</a:CityCenterDistance>
        <a:CountryId>40</a:CountryId>
        <a:CountryName>Египет</a:CountryName>
        <a:Description>&lt;iframe src="https://hotels.sletat.ru/hotel_desc/?id=15523"&gt;&lt;/iframe&gt;</a:Description>
        <a:DistanceToLifts i:nil="true"/>
        <a:District>Naama Bay</a:District>
        <a:Email>ghazala@redseahotels.com</a:Email>
        <a:Fax>+20 65 346 31 05</a:Fax>
        <a:HotelFacilities xmlns:b="urn:SletatRu:DataTypes:HotelInfoFacilityGroup:v1">
          <b:HotelInfoFacilityGroup>
            <b:Facilities xmlns:c="urn:SletatRu:DataTypes:HotelInfoFacility:v1">
              <c:HotelInfoFacility>
                <c:Hit>за доп. плату</c:Hit>
                <c:Id>69</c:Id>
                <c:Name>Интернет-кафе</c:Name>
              </c:HotelInfoFacility>
              ...
            </b:Facilities>
            <b:Id>1</b:Id>
            <b:Name>Интернет</b:Name>
          </b:HotelInfoFacilityGroup>
          ...
        </a:HotelFacilities>
        <a:HotelId>15523</a:HotelId>
        <a:HotelRate>8.2</a:HotelRate>
        <a:HouseNumber i:nil="true"/>
        <a:ImageCount>16</a:ImageCount>
        <a:ImageUrls xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
          <b:string>https://hotels.sletat.ru/i/f/15523_0.jpg</b:string>
          ...
        </a:ImageUrls>
        <a:Latitude>27.9130287</a:Latitude>
        <a:Longitude>34.32538</a:Longitude>
        <a:Name>Ghazala Beach</a:Name>
        <a:NativeAddress i:nil="true"/>
        <a:OldCyrillicName i:nil="true"/>
        <a:OldLatinName i:nil="true"/>
        <a:Phone>+20 65 346 31 00</a:Phone>
        <a:PostIndex i:nil="true"/>
        <a:RatingMeal>79</a:RatingMeal>
        <a:RatingOverall>82</a:RatingOverall>
        <a:RatingPlace>83</a:RatingPlace>
        <a:RatingService>82</a:RatingService>
        <a:Region i:nil="true"/>
        <a:Renovation>2011</a:Renovation>
        <a:Resort>Sharm El Sheikh</a:Resort>
        <a:RoomsCount>256</a:RoomsCount>
        <a:Site>http://redseahotels.com/index.php?id=251</a:Site>
        <a:Square>23000</a:Square>
        <a:StarId>403</a:StarId>
        <a:StarName>4*</a:StarName>
        <a:Street i:nil="true"/>
        <a:Video i:nil="true"/>
      </GetHotelInformationResult>
    </GetHotelInformationResponse>
  </s:Body>
</s:Envelope>

GetHotelComments

Метод GetHotelComments возвращает отзывы об отеле, оставленные реальными туристами.

Внимание! Метод работает только при наличии специальной лицензии. По всем вопросам обращайтесь в Службу технической поддержки Слетать.ру по тел. 8(800)700-33-09 (звонок бесплатный для всех регионов России) или по электронной почте support@sletat.ru.

Сигнатура:

HotelCommentCollection GetHotelComments(
                              Int32 hotelId)

Параметр hotelId – идентификатор отеля. В ответ возвращается структура HotelCommentCollection – коллекция структур типа HotelComment, каждая из которых описывает отдельный отзыв. Описание структуры HotelComment:

Поле

Тип

Описание

Id

Int32

Идентификатор отзыва.

UserName

String

Имя пользователя.

Negative

String

Отрицательный отзыв.

Positive

String

Положительный отзыв.

StartRestFormatted

String

Дата заезда.

EndRestFormatted

String

Дата выезда.

CreateDateFormatted

String

Дата написания отзыва.

CityName

String

Наименование города.

WasThere

Boolean

Был ли в этом месте автор отзыва.

IsTourist

Boolean

Является ли автор отзыва туристом.

Rate

Int32

Оценка по десятибалльной шкале.

ShortComment

String

Короткий комментарий.

Внимание! Условия использования API-сервиса запрещают каким-либо образом изменять содержание полей Positive и Negative, а также размещать их данные в блоках, доступных для индексирования поисковыми системами. Все авторские права на контент, передаваемый в этом поле, принадлежат Слетать.ру. Согласно Договору, в случае нарушения этого требования все действующие лицензии будут отозваны без возврата стоимости недооказанных услуг.

Пример SOAP-запроса отзывов об отеле с идентификатором 15523:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">   <s:Body>
    <GetHotelComments xmlns="urn:SletatRu:Contracts:Soap11Gate:v1">
      <hotelId>15523</hotelId>
    </GetHotelComments>
  </s:Body>
</s:Envelope>

Пример SOAP-ответа:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <GetHotelCommentsResponse xmlns="urn:SletatRu:Contracts:Soap11Gate:v1">
      <GetHotelCommentsResult xmlns:a="urn:SletatRu:DataTypes:HotelCommentCollection:v1" xmlns:i=" http://www.w3.org/2001/XMLSchema-instance" xmlns:b="urn:SletatRu:DataTypes:HotelComment:v1">
        <a:HotelComment>
          <b:CityName i:nil="true"/>
          <b:CreateDateFormatted>25.09.2010</b:CreateDateFormatted>
          <b:EndRestFormatted>25.06.2009</b:EndRestFormatted>
          <b:Id>-1</b:Id>
          <b:IsTourist i:nil="true"/>
          <b:Negative/>
          <b:Positive>Заход в море - песок, рядом коралловый остров, рыбы плавают прямо у берега. Тихий спокойный очень зеленый отель.</b:Positive>
          <b:Rate>8</b:Rate>
          <b:ShortComment i:nil="true"/>
          <b:StartRestFormatted>15.06.2009</b:StartRestFormatted>
          <b:UserName>ryazan</b:UserName>
          <b:WasThere i:nil="true"/>
        </a:HotelComment>
        ...
      </GetHotelCommentsResult>
    </GetHotelCommentsResponse>
  </s:Body>
</s:Envelope>