API — различия между версиями

Материал из Sunduk TV
Перейти к: навигация, поиск
(vod_list)
 
(не показаны 143 промежуточные версии 5 участников)
Строка 2: Строка 2:
 
== Термины ==
 
== Термины ==
  
Контент – содержательная часть видео- или радиотрансляции в цифровом виде.
+
Контент – видео/аудио или текстовая информация.
  
- Сервис – программно-аппаратный комплекс предоставления доступа к IPTV как к услуге.
+
Сервис – программно-аппаратный комплекс предоставления доступа к IPTV как к услуге.
  
Клиент – приложение или устройство, получающее доступ к Сервису посредством учет-
+
Клиент – приложение или устройство, получающее доступ к Сервису посредством учет-
 
ной записи.
 
ной записи.
  
Абонент – физический пользователь сервиса SUNDUK.TV
+
Абонент – физический пользователь сервиса SUNDUK.TV
  
Абонемент – учетная запись клиента. Логин и пароль цифровые – для удобства набора со
+
Абонемент – учетная запись клиента. Логин и пароль цифровые – для удобства набора со
 
стандартного пульта управления устройства (settopbox).
 
стандартного пульта управления устройства (settopbox).
  
Сервер вещания – streamserver – программно-аппаратный комплекс для организации
+
Сервер вещания – программно-аппаратный комплекс для организации
 
трансляции потокового видео и радиосигнала.
 
трансляции потокового видео и радиосигнала.
  
- Ссылка вещания – URL, по адресу которого сервер вещания транслирует контент.
+
Ссылка вещания – URL, по адресу которого сервер вещания транслирует контент.
  
Middleware – комплекс сервисов авторизации и управления абонементами, потоками вещания, персональными настройками.
+
Middleware – комплекс технологического программного обеспечения для авторизации и обеспечения взаимодействия между различными приложениями, системами, компонентами.
  
API – интерфейс Middleware для программного взаимодействия с клиентом.
+
API – интерфейс Middleware для программного взаимодействия с клиентом.
  
== Принцип работы ==
+
== Описание принципов работы с API ==
  
Провайдер транслирует видеопотоки телевизионных и радио каналов в сети Интернет. Видеокон- тент предоставляется посредством транспортного потока HTTP/TS с распределенных серверов провайдера. Контент закодирован видеокодеком H.264 и аудиокодеком AAC (подробные техни- ческие характеристики потока представлены в справочном разделе настоящего руководства).
+
Провайдер транслирует видеопотоки телевизионных и радио каналов в сети Интернет через сеть своих серверов по протоколу HLS. Видео в формате H.264 и звук AAC/AC3
Сервис предоставляется на платной основе, в виду чего становится невозможным предоставлять доступ к вещанию обычными средствами. В отличие от ссылок типовых списков воспроизведения (playlists), ссылки вещания не могут быть постоянными, поэтому они динамически генерируются на время сессии работы клиента.
+
URL являются динамическими привязанными к конкретной сессии, с ограниченным сроком жизни (устаревающие).
Для генерации уникальной ссылки необходимо реализовать методы работы с сессией клиента. При первом обращении к системе необходимо авторизоваться и инициировать сессию. Ответ сервера включает в себя ключ сессии, который необходимо передавать при каждом обращении. Для удобства реализации сервер принимает ключ сессии как в виде параметра URL, так и в виде COOKIES.
+
Для начала работы с сервисом необходима авторизация, при успехе которой, сервер выдаст ключ к сессии, ЭТОТ КЛЮЧ НЕОБХОДИМО УКАЗЫВАТЬ ПРИ КАЖДОМ ОБРАЩЕНИИ К СЕРВЕРУ. Указать ключ можно двумя способами - через cookies или URL
 +
Схема работы приложения:
  
Общий алгоритм приложения можно представить следующим образом:
+
1. Авторизация на сервере и скачивание настроек клиента /login
  
1. авторизация /login и получение списка настроек клиента
+
2. Получение программы передач (EPG),  список каналов и группы каналов /channel_list
  
2. получение списка каналов, групп каналов, текущего EPG на каждый канал. /channel_list
+
3. Когда абонент выбирает канал, нужно получить  ссылку вещания для этого канала /get_url
  
3. при выборе абонентом канала необходимо получить ссылку вещания для этого канала
+
4. Проигрывание полученного URL
/get_url
+
  
4. проигрывание полученной ссылки воспроизведения
+
5. По окончании передачи необходимо загрузить следующий EPG элемент  /epg_current
  
5. подгрузка следующего фрагмента EPG при окончании телепередачи /epg_current
+
6. Также можно загрузить EPG за весь день при просмотре программы за данный день, а также при выборе передачи из архива
  
6. загрузка EPG на весь день при просмотре программы телепередач за этот день и при вы-
+
== Как использовать этот API ==
боре телепередачи из архива.
+
  
== Использование API ==
+
Вы можете использовать любой язык программирования при работе с данным API. Работа с API осуществляется по протоколу HTTP,  
 
+
обмен данными происходит в формате XML или JSON, Вам понадобятся эти библиотеки.  
Работа с API подразумевает работу с сетью и не накладывает на приложение клиента никаких ограничений по выбору средств реализации. Другими словами – программная часть клиента мо- жет быть реализована на любом языке программирования, который может использовать библио- теки работы с сетью и протокол HTTP. Поскольку типы ответов могут быть как в формате XML, так и в формате JSON, рекомендуется использовать готовые библиотеки для работы с этими форматами данных. Мы рекомендуем использовать формат JSON как наиболее удачный формат для работы с ассоциативными (хэш) массивами. Также рекомендуется использовать автономное хранилище для хранения промежуточных данных (ключ сессии, настройки клиента, всевозможные списки и т.п.)
+
В формате JSON удобнее работать с HASH массивами и мы рекомендуем этот формат.  
Все запросы к API отправляются по протоколу HTTP, формируются по специально сформирован- ному URL и имеют следующий вид:
+
Запросив один раз, старайтесь кешировать у себя данные HASH, URL или EPG, пока они не устареют.
 +
Этим вы ускорите работу клиента, и не создадите лишнюю нагрузку на сервера
 +
 +
Все запросы к API происходят по протоколу http, и имеют следующий вид:  
  
 
httр://iptv.sunduk.tv/api/<тип ответа>/<имя функции>?param1=value&param2=value...
 
httр://iptv.sunduk.tv/api/<тип ответа>/<имя функции>?param1=value&param2=value...
Строка 71: Строка 73:
 
     <message>ERROR_MESSAGE</message>
 
     <message>ERROR_MESSAGE</message>
 
     <code>ERROR_CODE</code>
 
     <code>ERROR_CODE</code>
</error>
+
  </error>
 
   <servertime>SERVER_TIME</servertime>
 
   <servertime>SERVER_TIME</servertime>
 
</response></pre>
 
</response></pre>
Строка 87: Строка 89:
 
== Cookie ==
 
== Cookie ==
  
Для идентификации и создания сессии используется стандартный механизм HTTP-сессий с под- держкой COOKIE.
+
Для идентификации и создания сессии используется стандартный механизм HTTP/COOKIE.
 
При первом входе необходимо выполнение login. При корректном входе возвращается парамет- ры состояния, данные по клиенту и COOKIE, которые необходимо передавать при последующих запросах. В COOKIE хранится идентификатор сессии. Если запрос не содержит COOKIE, то это вызо- вет ошибку. Для корректного завершения сессии необходимо вызвать метод logout. COOKIE уста- навливается стандартным HTTP ответом, поэтому если клиент использует браузер или фреймворк, то COOKIE будут передаваться автоматически, в противном случае клиент должен позаботиться об сохранении ключа сессии.
 
При первом входе необходимо выполнение login. При корректном входе возвращается парамет- ры состояния, данные по клиенту и COOKIE, которые необходимо передавать при последующих запросах. В COOKIE хранится идентификатор сессии. Если запрос не содержит COOKIE, то это вызо- вет ошибку. Для корректного завершения сессии необходимо вызвать метод logout. COOKIE уста- навливается стандартным HTTP ответом, поэтому если клиент использует браузер или фреймворк, то COOKIE будут передаваться автоматически, в противном случае клиент должен позаботиться об сохранении ключа сессии.
 
Также возможна передача параметров &<имя сессии>=<ключ сессии> через url. <Имя сессии> при этом необходимо брать из ответа пакета функции /login. Подобный метод из соображений без- опасности является не желательным, ровно как и передача login методом GET. Рекомендуем ис- пользовать HTTPS (безопасное шифрованное соединение через SSL) для авторизации.
 
Также возможна передача параметров &<имя сессии>=<ключ сессии> через url. <Имя сессии> при этом необходимо брать из ответа пакета функции /login. Подобный метод из соображений без- опасности является не желательным, ровно как и передача login методом GET. Рекомендуем ис- пользовать HTTPS (безопасное шифрованное соединение через SSL) для авторизации.
Строка 93: Строка 95:
 
== Функции API ==
 
== Функции API ==
  
=== Функция login ===
+
=== login ===
  
Описание функции: функция выполняет логин клиента.
+
Функция выполняет авторизацию клиента.
  
 
Вызов:  
 
Вызов:  
/login?login=<login>&pass=<password>&device=<apple|default:all>&settings=all
 
  
Входные параметры для функции:
+
'''/login?login=<login>&pass=<password>[&device=<device_name>[&device_id=<device_id>]]'''
  
''login'' - номер абонемента, выданный клиенту
+
Входные параметры:
  
''pass'' - пароль абонемента
+
'''''login'''''      - номер абонемента, выданный абоненту
  
''device'' - Параметр, указывающий на тип устройства, работающего с API. Генерируют- ся соответствующие потоки и ссылки вещания. Влияет на списки возможных для устройства каналов, ссылки вещания и т.п. На данный момент работает с двумя параметрами: apple и all. По умолчанию установлен в all и генери- рует ссылки для vlc. (поток TS)
+
'''''pass'''''        - пароль абонемента
  
''setting=al''l - Выводит значения всех текущих настроек клиента. Рекомендуется для использования предварительной загрузки всех настроек клиента.
+
'''''device'''''      - Задает группу устройств при работе с настройками. Принимает значение, заданное для данного устройства по договоренности (например: mag, dunehd, lg_smart_tv)
  
Пример ответа по запросу /login?login=1234567&pass=1234567&device=all&settings=all
+
'''''device_id'''''  - Задает конкретное устройство из указанной группы при работе с настройками. Принимает значение, уникальное для устройства из данной группы (например: мак-адрес, серийный номер, ключ HDCP)
  
<?xml version="1.0" encoding="UTF-8"?>
+
Пример ответа по запросу /login?login=1234567&pass=1234567&device=dunehd&device_id=f21g3b17a3:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 
<response>
 
<response>
<sid>3basjk82caac5cbklcqgqac3h2</sid>
+
    <sid>1875BCF912FE8ABF89ABF2E4FE</sid>
<sid_name>MWARE_SSID</sid_name>
+
    <sid_name>TVAPI_SID</sid_name>
<account>
+
    <account>
  <login>1234567</login>
+
        <login>000000</login>
  <packet_name>Test packet</packet_name>
+
        <packet_name>Sunduk.tv</packet_name>
  <packet_expire>1586410112</packet_expire>
+
        <packet_expire>1514584800</packet_expire>
</account>
+
    </account>
<services>
+
    <services>
  <vod>1</vod>
+
        <vod>1</vod>
  <archive>1</archive>
+
        <archive>1</archive>
</services>
+
    </services>
<settings>
+
    <settings>
  <timeshift>
+
        <http_caching>
    <value>0</value>
+
            <name>http_caching</name>
    <list>
+
            <value>4000</value>
      <item>0</item>
+
            <list>
      <item>1</item>
+
                <item>1500</item>
      <item>2</item>
+
                <item>3000</item>
      <item>3</item>
+
                <item>5000</item>
      <item>4</item>
+
                <item>8000</item>
      <item>7</item>
+
                <item>150000</item>
      <item>8</item>
+
            </list>
      <item>9</item>
+
        </http_caching>
      <item>10</item>
+
        <stream_server>
      <item>11</item>
+
            <name>stream_server</name>
      <item>12</item>
+
            <value>usatv1.sunduk.tv</value>
    </list>
+
            <list>
  </timeshift>
+
                <item>
  <timezone>
+
                    <ip>tv1.sunduk.tv</ip>
    <value>0</value>
+
                    <descr>Europe 1</descr>
  </timezone>
+
                </item>
  <http_caching>
+
                <item>
    <value>3000</value>
+
                    <ip>usatv1.sunduk.tv</ip>
    <item>
+
                    <descr>USA 1</descr>
      <item>1500</item>
+
                </item>
      <item>3000</item>
+
            </list>
      <item>5000</item>
+
        </stream_server>
      <item>8000</item>
+
        <timeshift>
      <item>15000</item>
+
            <name>timeshift</name>
    </item>
+
            <value>0</value>
  </http_caching>
+
            <list>
  <stream_server>
+
                <item>0</item>
    <value>91.224.187.34</value>
+
                <item>1</item>
    <list>
+
                <item>2</item>
<item>
+
                <item>3</item>
<ip>91.224.187.34</ip>
+
                <item>4</item>
        <descr>Europe South</descr>
+
                <item>5</item>
      </item>
+
                <item>6</item>
      <item>
+
                <item>7</item>
         <ip>91.224.186.2</ip>
+
                <item>8</item>
         <descr>Europe North</descr>
+
                <item>9</item>
      </item>
+
                <item>10</item>
      <item>
+
                <item>11</item>
         <ip>217.19.223.2</ip>
+
                <item>12</item>
        <descr>USA East Coast</descr>
+
            </list>
      </item>
+
         </timeshift>
      <item>
+
         <timezone>
        <ip>217.19.219.34</ip>
+
            <name>timezone</name>
        <descr>USA West Coast</descr>
+
            <value>+2</value>
      </item>
+
        </timezone>
      <item>
+
         <bitrate>
         <ip>217.19.220.2</ip>
+
            <name>bitrate</name>
        <descr>Middle East</descr>
+
            <value>Economy</value>
      </item>
+
            <list>
      <item>
+
                <item>Automatic</item>
        <ip>103.246.216.34</ip>
+
                <item>Standart</item>
        <descr>Asia</descr>
+
                <item>Economy</item>
      </item>
+
            </list>
    </list>
+
        </bitrate>
  </stream_server>
+
         <bitratehd>
  <bitrate>
+
            <name>bitratehd</name>
    <value>1500</value>
+
            <value>Automatic</value>
    <list>
+
            <list>
      <item>2500</item>
+
                <item>Automatic</item>
      <item>1500</item>
+
                <item>Standart</item>
      <item>900</item>
+
                <item>Economy</item>
      <item>320</item>
+
            </list>
    </list>
+
        </bitratehd>
  </bitrate>
+
        <archivebitratesd>
</settings>
+
            <name>archivebitratesd</name>
<servertime>1334861376</servertime>
+
            <value>Standart</value>
</response>
+
            <list>
 +
                <item>Standart</item>
 +
                <item>Economy</item>
 +
            </list>
 +
        </archivebitratesd>
 +
        <archivebitratehd>
 +
            <name>archivebitratehd</name>
 +
            <value>Standart</value>
 +
            <list>
 +
                <item>Standart</item>
 +
                <item>Economy</item>
 +
            </list>
 +
        </archivebitratehd>
 +
    </settings>
 +
    <servertime>1423845147</servertime>
 +
</response></pre>
 +
 
 +
Описание параметров из ответа:
  
 
''sid'' - Идентификатор сессии
 
''sid'' - Идентификатор сессии
Строка 211: Строка 231:
 
''services'' - Блок флагов сервисов
 
''services'' - Блок флагов сервисов
  
''vod'' - Флаг видеотеки. При установленном значении 1 абонементу доступна услуга «ви- деотека»
+
''vod'' - Флаг видеотеки. При установленном значении 1 абонементу доступна услуга «видеотека»
  
 
''archive'' - Флаг архива. При установленном значении 1 абонементу доступна услуга «архив»
 
''archive'' - Флаг архива. При установленном значении 1 абонементу доступна услуга «архив»
  
=== Функция account ===
+
=== logout ===
 
+
Описание функции: возвращает информацию об аккаунте, аналогично функции login.
+
 
+
Вызов:
+
 
+
/account
+
 
+
=== Функция logout ===
+
  
 
Описание функции: выполняет отключение клиента от сервиса.  
 
Описание функции: выполняет отключение клиента от сервиса.  
Строка 229: Строка 241:
 
Вызов без параметров
 
Вызов без параметров
  
/logout
+
'''/logout'''
  
 
Возвращает ответ вида:
 
Возвращает ответ вида:
  
<?xml version="1.0" encoding="UTF-8"?>
+
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 
<response>
 
<response>
 
   <message>M_LOGOUT_OK</message>
 
   <message>M_LOGOUT_OK</message>
   <servertime>1277807573</servertime>
+
   <servertime>1407232800</servertime>
</response>
+
</response></pre>
 +
 
 +
Описание параметров из ответа:
  
 
''message'' - Сообщение об логауте
 
''message'' - Сообщение об логауте
Строка 243: Строка 257:
 
''servertime'' - Время на сервере (в формате unixtime)
 
''servertime'' - Время на сервере (в формате unixtime)
  
=== Функция channel_list ===
+
=== channel_list ===
  
Описание функции: получение списка каналов.
+
Получение списка каналов.
  
Для вывода информации о скрытых каналах следует использовать /channel_list?show=all&protect_code=<пароль закрытых каналов> В этом случае будет показан спи- сок всех каналов с дополнительным тегом <hide>0</hide>, который указывает скрыт ли канал в обычном режиме.
+
Вызов:
  
В списке для каждого канала также имеется «таблица» возможных сочетаний bitrate и timeshift. Может сложиться ситуация, когда установленный системный bitrate в сочетании с timeshift не за- дан для некоторых каналов. В этом случае каналы не попадают в список /channel_list. Информа- ция доступна в теге <stream_params>
+
'''/channel_list[?show=<base|all>[&protect_code=<пароль закрытых каналов>]]'''
  
''show'' - Режим отображения списка каналов. all = показ всех каналов в т.ч. скрытых; любое другое значение, в т.ч. отсутствие параметра устанавли- вает обычный режим отображения каналов.
+
В этом случае будет показан список всех каналов с дополнительным тегом <hide>0</hide>, который указывает скрыт ли канал в обычном режиме.
 +
В списке для каждого канала также имеется «таблица» возможных сочетаний bitrate и timeshift. Может сложиться ситуация, когда установленный системный bitrate в сочетании с timeshift не задан для некоторых каналов. В этом случае каналы не попадают в список /channel_list. Информация доступна в теге <stream_params>
  
''protect_code'' - цифровой пароль для закрытых каналов. Обязательный параметр при show=all
+
Входные параметры:
 +
 
 +
'''''show''''' - (По умолчанию: base) Режим отображения списка каналов. all = показ всех каналов в т.ч. скрытых.
 +
 
 +
'''''protect_code''''' - Цифровой пароль для закрытых каналов. Обязательный параметр при show=all
  
 
Функция возвращает ответ вида:
 
Функция возвращает ответ вида:
  
<?xml version="1.0" encoding="UTF-8"?>
+
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 
<response>
 
<response>
 
   <groups>
 
   <groups>
Строка 275: Строка 294:
 
           </stream_params>
 
           </stream_params>
 
           <is_video>IS_VIDEO</is_video>
 
           <is_video>IS_VIDEO</is_video>
          <need_bandwidth>NEED_BANDWIDTH<need_bandwidth>
 
 
           <protected>PROTECTED</protected>
 
           <protected>PROTECTED</protected>
 
           <have_archive>HAVE_ARCHIVE</have_archive>
 
           <have_archive>HAVE_ARCHIVE</have_archive>
Строка 282: Строка 300:
 
           <epg_start>EPG_START</epg_start>
 
           <epg_start>EPG_START</epg_start>
 
           <epg_end>EPG_STOP</epg_end>
 
           <epg_end>EPG_STOP</epg_end>
 +
          <ac3_audio>Bollean</ac3_audio>
 
</item>
 
</item>
 
         ...
 
         ...
Строка 287: Строка 306:
 
     </item>
 
     </item>
 
   </groups>
 
   </groups>
   <servertime>1277807687</servertime>
+
   <servertime>1407232800</servertime>
</response>
+
</response></pre>
 +
 
 +
Описание параметров из ответа:
  
 
''groups/item/id'' - идентификатор группы
 
''groups/item/id'' - идентификатор группы
Строка 304: Строка 325:
 
''groups/item/channels/item/stream_params/item/rate'' - возможный битрейт канала. Устанавливается в настройках переменной bitrate
 
''groups/item/channels/item/stream_params/item/rate'' - возможный битрейт канала. Устанавливается в настройках переменной bitrate
  
''groups/item/channels/item/stream_params/ item/ts'' - таймшифт в часах. Например: значение 2 - за- держка вещания на 2 часа. Получить url вещания возможно установив в настройках переменную timeshift
+
''groups/item/channels/item/stream_params/ item/ts'' - таймшифт в часах. Например: значение 2 - задержка вещания на 2 часа. Получить url вещания возможно установив в настройках переменную timeshift
  
 
''groups/item/channels/item/is_video'' -  флаг потокового видео 0/1 1-видео, 0-радио
 
''groups/item/channels/item/is_video'' -  флаг потокового видео 0/1 1-видео, 0-радио
Строка 321: Строка 342:
  
 
''groups/item/channels/item/epg_stop'' - дата и время окончания текущей передачи
 
''groups/item/channels/item/epg_stop'' - дата и время окончания текущей передачи
 +
 +
''groups/item/channels/item/ac3_audio'' - Если канал транслируется с 5.1 звуком  AC3 параметр true
  
 
Пример ответа по запросу /api/xml/channel_list
 
Пример ответа по запросу /api/xml/channel_list
  
<?xml version="1.0" encoding="UTF-8"?>
+
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 
<response>
 
<response>
  <groups>
+
    <groups>
    <item>
+
      <id>1</id>
+
      <name>test1</name>
+
      <color>CSS_CODE</color>
+
      <channels>
+
 
         <item>
 
         <item>
          <id>3</id>
+
            <id>7</id>
          <name>Pоссия</name>
+
            <name>Общие</name>
          <stream_params>
+
            <color>#ff2200</color>
            <item>
+
            <channels>
                <rate>1500</rate>
+
                <item>
                <ts>0</ts>
+
                    <id>71</id>
            </item>
+
                    <name>Первый</name>
            <item>
+
                    <stream_params>
                <rate>900</rate>
+
                        <item>
                <ts>0</ts>
+
                            <rate>Automatic</rate>
            </item>
+
                            <ts>0</ts>
            <item>
+
                        </item>
                <rate>1500</rate>
+
                        <item>
                <ts>1</ts>
+
                            <rate>Standart</rate>
            </item>
+
                            <ts>0</ts>
            <item>
+
                        </item>
                <rate>1500</rate>
+
                        <item>
                <ts>2</ts>
+
                            <rate>Economy</rate>
            </item>
+
                            <ts>0</ts>
            <item>
+
                        </item>
                <rate>1500</rate>
+
                    </stream_params>
                <ts>3</ts>
+
                    <is_video>1</is_video>
            </item>
+
                    <need_bandwidth>2500</need_bandwidth>
            <item>
+
                    <protected>0</protected>
                <rate>1500</rate>
+
                    <have_archive>1</have_archive>
                <ts>4</ts>
+
                    <icon>/uploads/vddd2zziip.jpg</icon>
            </item>
+
                    <epg_progname>"Человек и закон" с Алексеем Пимановым (12+)</epg_progname>
            <item>
+
                    <epg_start>1423842300</epg_start>
                <rate>1500</rate>
+
                    <epg_end>1423846200</epg_end>
                <ts>8</ts>
+
                    <hide>0</hide>
            </item>
+
                    <ac3_audio>0</ac3_audio>
            <item>
+
                </item>
                <rate>1500</rate>
+
                <item>
                <ts>9</ts>
+
                    <id>112</id>
            </item>
+
                    <name>Первый HD</name>
            <item>
+
                    <stream_params>
                <rate>1500</rate>
+
                        <item>
                <ts>10</ts>
+
                            <rate>Automatic</rate>
            </item>
+
                            <ts>0</ts>
            <item>
+
                        </item>
                <rate>1500</rate>
+
                        <item>
                <ts>11</ts>
+
                            <rate>Standart</rate>
            </item>
+
                            <ts>0</ts>
          </stream_params>
+
                        </item>
          <is_video>1</is_video>
+
                        <item>
          <protected>0</protected>
+
                            <rate>Economy</rate>
          <have_archive>1</have_archive>
+
                            <ts>0</ts>
          <icon>/img/ico/3.gif</icon>
+
                        </item>
          <epg_progname>ВЕСТИ-МОСКВА</epg_progname>
+
                    </stream_params>
          <epg_start>1277807400</epg_start>
+
                    <is_video>1</is_video>
          <epg_end>1277808600</epg_end>
+
                    <need_bandwidth>2500</need_bandwidth>
          <hide>1</hide>
+
                    <protected>0</protected>
</item>
+
                    <have_archive>1</have_archive>
        ...
+
                    <icon>/uploads/ept2dfsoxd.jpg</icon>
      </channels>
+
                    <epg_progname>"Человек и закон" с Алексеем Пимановым (12+)</epg_progname>
    </item>
+
                    <epg_start>1423842300</epg_start>
     <item>
+
                    <epg_end>1423846200</epg_end>
      <id>2</id>
+
                    <hide>0</hide>
      <name>Новости</name>
+
                    <ac3_audio>0</ac3_audio>
      <color>#ef0000</color>
+
                </item>
      <channels>
+
         
        <item>
+
            </channels>
          <id>6</id>
+
        </item>
          <name>РТР Вести</name>
+
     </groups>
          <is_video>1</is_video>
+
    <servertime>1423845361</servertime>
          <protected>0</protected>
+
</response></pre>
          <icon>/img/ico/6.gif</icon>
+
 
          <epg_progname>"Вести. Сейчас. Главные события".</epg_progname>
+
=== channel_last ===
          <epg_start>1277807400</epg_start>
+
 
          <epg_end>1277807700</epg_end>
+
Получение id последнего просматриваемого канала, если последний канал не найдет отдается значение 0.
</item>
+
 
        ...
+
Вызов:
      </channels>
+
 
     </item>
+
'''/channel_last'''
  </groups>
+
 
  <servertime>1277807687</servertime>
+
Возвращает ответ вида:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
    <channel>
 +
        <id>71</id>
 +
     </channel>
 +
    <servertime>1425410393</servertime>
 
</response>
 
</response>
  
=== Функция /get_url ===
+
</response></pre>
  
Описание функции: получение ссылки вещания на заданный канал.
+
=== get_url ===
  
Вызов: /get_url?cid=<ИД канала>&gmt=<дата время позиции архива>&protect_code=<пароль для закрытых каналов>
+
Получение ссылки вещания на заданный канал.
  
Архив. Сервисом организована запись некоторых телеканалов сроком до 14 дней для последую- щего вещания по требованию. Каналы имеющие архивную запись помечены флагом have_archive в списке каналов. Доступ к записанным данным возможен через указание параметра gmt для функции get_url, где указано время в формате unixtime. Архив доступен по истечении 30 минут после прямого эфира. Рекомендовано на стороне клиента ограничить доступ к несуществующему в архиве промежутку времени во избежание недоразумений. При попытки воспроизвести еще не записанный фрагмент будет воспроизведен ближайший доступный в архиве фрагмент.
+
Вызов:
  
Параметр URL специально сгенерирован для проигрывания через VLC с соответствующими опти- мизированными параметрами. URL генерируется только один раз. Для повторного просмотра ка- нала необходимо получить заново сгенерированный URL. При попытке трансляции канала не- сколькими сгенерированными URL одновременно, будет транслироваться только URL, получен- ный последним. Таким образом, возможна трансляция только одного потока для одной сессии.
+
'''/get_url?cid=<ИД канала>[&gmt=<дата время позиции архива>][&stream_protocol=<hls|hds|mpegts|embeded|rtsp>][&protect_code=<пароль для закрытых каналов>]'''
  
=== Фильтрация каналов ===
+
Входные параметры:
  
В некоторых случаях возникает необходимость фильтра каналов. По разным причинам абоненты не всегда желают видеть в списках некоторые каналы. Был разработан механизм скрытия кана- лов. Для абонента это выглядит как закрытая по паролю область со списком каналов, где можно включить/выключить каналы.
+
'''''cid''''' - Идентификатор канала, полученный из функции [[#channel_list|channel_list]]
  
=== Функция /rule ===
+
'''''gmt''''' - Используется в качестве начального момента для получения потока из архива. В формате unixtime
  
Описание функции: работа с правилами.
+
'''''stream_protocol''''' - (По умолчанию: hls) В каком протоколе вещания вы хотите получить  ссылку. Возможные протоколы: hls, hds, mpegts, embeded, rtsp
  
/rule?cmd=<hide_channel|show_channel|get_list|reset_channels>&cid=<id_канала>&protect_code=< protect_code>
+
'''''protect_code''''' - Цифровой пароль для закрытых каналов. Если канал закрыт, а пароль не передан, либо передан неверный пароль, то в тэге <url> возвращается слово "protected".
  
Ответ команды cmd=<hide_channel show_channel reset_channels>
+
Архив. Сервисом организована запись некоторых телеканалов сроком до 14 дней для дальнейшего вещания по требованию. Каналы имеющие архивную запись помечены флагом have_archive в списке каналов. Доступ к записанным данным возможен через указание параметра gmt для функции get_url, где указано время в формате unixtime.
  
 +
Возвращает ответ вида:
  
Ответ при cmd= show_channel
+
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
    <url>http://usatv1.sunduk.tv:8080/C515/index.m3u8?token=83f801c99e7e5a79e020742b :http-caching=8000 :no-http-reconnect
 +
    </url>
 +
    <servertime>1423845671</servertime>
 +
</response></pre>
  
Есть возможность получить весь список каналов с флагом скрытый <hide>1</hide> путем парамет- ра show=all и protect_code=<пароль> функции /channel_list
+
URL специально сгенерирован с соответствующими оптимизированными параметрами. URL генерируется только один раз. Для повторного просмотра канала необходимо получить заново сгенерированный URL.
  
 
== Набор функций для работы с EPG ==
 
== Набор функций для работы с EPG ==
Строка 443: Строка 474:
 
Просьба обратить внимание на тот факт, что многие пользователи привыкли к так называемому сёрфингу каналов – простое перелистывание с канала на канал не особо вчитываясь в содержимое EPG. Или же путем «пробежки» по каналам выбирать нужный им канал. В этом случае не стоит немедленно подгружать EPG по событию перехода на канал, а выдержать паузу 0.6 секунды (значение было выявлено эмпирически).
 
Просьба обратить внимание на тот факт, что многие пользователи привыкли к так называемому сёрфингу каналов – простое перелистывание с канала на канал не особо вчитываясь в содержимое EPG. Или же путем «пробежки» по каналам выбирать нужный им канал. В этом случае не стоит немедленно подгружать EPG по событию перехода на канал, а выдержать паузу 0.6 секунды (значение было выявлено эмпирически).
  
=== Функция epg ===
+
=== epg ===
Описание функции: получение программы передач для заданного канала на заданную дату.  
+
Получение программы передач для заданного канала на период времени с gmt по.  
  
 
Вызов:
 
Вызов:
  
/epg?cid=<идентификатор канала>&day=<дата формата DDMMYY>
+
'''/epg?cid=<идентификатор канала>&day=<дата формата DDMMYY>'''
  
=== Функция epg3 ===
+
Входные параметры для функции:
  
Описание функции: получение программы телепередач доступных каналов со времени, указанного в dtime на следующие period часов.
+
'''''cid''''' - Идентификатор канала, полученный из функции [[#channel_list|channel_list]]
  
Вызов:
+
'''''day''''' - Дата формата DDMMYY. День за который будет возвращена телепрограмма
  
/epg3?dtime=<Дата и время старта EPG>&period=<на сколько часов вперед>
+
'''''gmt''''' - Время unixtime. Начало периода длительностью в одни сутки, для которого будет возвращена телепрограмма. (В дальнейшем будет использоваться вместо параметра day. На данный момент не реализовано на стороне API, но требуется реализация на стороне клиента)
  
Необходима для организации функционала "сетки вещания", как на http://tvschedule.zap2it.com/tvlistings/ . Программа генерируется с учетом timeshift переменной, выставленной пользователем в настройках.
 
  
=== Функция epg_next ===
+
Возвращает ответ вида:
  
Описание функции: возвращает EPG на текущее время и на 3 последующих телепередачи канала с заданным ID.
+
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
<epg> <item>
 +
      <ut_start>UT_START</ut_start>
 +
      <progname>PROG_NAME</progname>
 +
    </item>
 +
... </epg>
 +
  <servertime>SERVER_TIME</servertime>
 +
</response></pre>
 +
 
 +
Описание параметров ответа:
 +
 
 +
''ut_start'' - Дата и время начала передачи в формате unixtime
 +
 
 +
''progname'' - Название передачи
 +
 
 +
Пример ответа:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
    <epg>
 +
        <item>
 +
            <ut_start>1420065300</ut_start>
 +
            <progname>В дебрях Африки (Сахара) (12+)</progname>
 +
            <pdescr/>
 +
        </item>
 +
        <item>
 +
            <ut_start>1420068300</ut_start>
 +
            <progname>Живая природа (Слониха по имени Эхо - заключительная глава) (12+)</progname>
 +
            <pdescr/>
 +
        </item>
 +
</epg>
 +
    <servertime>1423846518</servertime>
 +
</response></pre>
 +
 
 +
=== epg_next - depricated ===
 +
 
 +
Возвращает EPG на текущее время и на 3 последующих телепередачи канала с заданным ID.
  
 
Вызов:
 
Вызов:
  
/epg_next?cid=<id канала>
+
'''/epg_next?cid=<id канала>'''
 +
 
 +
Входные параметры:
 +
 
 +
'''cid''' - Идентификатор канала, полученный из функции [[#channel_list|channel_list]]
 +
 
 +
Возвращает ответ вида:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
<epg>
 +
  <item>
 +
    <ts>TS</ts>
 +
    <progname>PROGNAME </progname>
 +
</item>
 +
  </epg>
 +
<servertime>SERVERTIME</servertime>
 +
</response></pre>
 +
 
 +
Описание параметров ответа:
 +
 
 +
''ts'' - Дата и время начала передачи в формате Unixtime
 +
 
 +
''progname'' - Название передачи
 +
 
 +
Пример ответа:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
    <epg>
 +
        <item>
 +
            <ts>1423847100</ts>
 +
            <progname>Дома на деревьях (Вид с высоты - 2) (12+)</progname>
 +
            <pdescr/>
 +
        </item>
 +
        <item>
 +
            <ts>1423850400</ts>
 +
            <progname>Доминик Монаган и дикие существа (Серия 6) (12+)</progname>
 +
            <pdescr/>
 +
        </item>
 +
        <item>
 +
            <ts>1423853700</ts>
 +
            <progname>Укротители аллигаторов (Аллигаторы обезумели) (12+)</progname>
 +
            <pdescr/>
 +
        </item>
 +
    </epg>
 +
    <servertime>1423846756</servertime>
 +
</response></pre>
  
=== Функция epg_current ===
+
=== epg_current ===
  
Описание функции: для вывода данных об текущем EPG нескольких каналов. Реализована для ди- намичной подрузки данных EPG. Содержит время начала и конца передачи. При установленном epg=3 Возвращает данные о трех следующих передачах начиная с текущей.
+
Для вывода данных о текущем EPG нескольких каналов. Реализована для динамичной подгрузки данных EPG. Содержит время начала и конца передачи
  
 
Вызов:  
 
Вызов:  
/epg_current?cids=<id1,id3,id3>&epg=3
 
  
'''ВНИМАНИЕ!''' Идентификаторы каналов должны быть переданы через запятую.
+
'''/epg_current?cids=<id1>[,<id3>[,<id3>[,...]]][&epg=<length>]'''
 +
 
 +
Входные параметры:
 +
 
 +
'''cids''' - Идентификатор канала(-ов), полученный из функции [[#channel_list|channel_list]]
 +
 
 +
'''epg''' - Количество передач, которые будут возвращены для указанных каналов, начиная с текущей
 +
 
 +
Ответ функции:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
<epg>
 +
  <item>
 +
    <cid>CID</cid>
 +
    <epg>
 +
      <epg_progname>EPG_PROGRAM </epg_progname>
 +
      <epg_start>EPG_START</epg_start>
 +
      <epg_end>EPG_STOP</epg_end>
 +
    </epg>
 +
  </item>
 +
</epg>
 +
<servertime>SERVERTIME</servertime>
 +
</response></pre>
 +
 
 +
Описание параметров вответа
 +
 
 +
''cid'' - Идентификатор канала
 +
 
 +
''epg_progname'' - Название передачи
 +
 
 +
''epg_start'' -  Дата и время начала передачи в формате unixtime
 +
 
 +
''epg_end'' - Время окончания передачи в формате unixtime
  
 
Пример вызова: /epg_current?cids=2,5,7
 
Пример вызова: /epg_current?cids=2,5,7
 +
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
    <epg>
 +
        <item>
 +
            <cid>155</cid>
 +
            <epg>
 +
                <epg_progname>Гангстеры дикой природы (Буйволы) (12+)</epg_progname>
 +
                <epg_start>1423843800</epg_start>
 +
                <epg_end>1423847100</epg_end>
 +
            </epg>
 +
        </item>
 +
    </epg>
 +
    <servertime>1423846855</servertime>
 +
</response></pre>
 +
  
 
При установленном параметре epg=3
 
При установленном параметре epg=3
 +
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
    <epg>
 +
        <item>
 +
            <cid>155</cid>
 +
            <epg>
 +
                <epg_progname>Гангстеры дикой природы (Буйволы) (12+)</epg_progname>
 +
                <epg_start>1423843800</epg_start>
 +
                <epg_end>1423847100</epg_end>
 +
            </epg>
 +
            <epg>
 +
                <epg_progname>Дома на деревьях (Вид с высоты - 2) (12+)</epg_progname>
 +
                <epg_start>1423847100</epg_start>
 +
                <epg_end>1423850400</epg_end>
 +
            </epg>
 +
            <epg>
 +
                <epg_progname>Доминик Монаган и дикие существа (Серия 6) (12+)</epg_progname>
 +
                <epg_start>1423850400</epg_start>
 +
                <epg_end>1423853700</epg_end>
 +
            </epg>
 +
        </item>
 +
    </epg>
 +
    <servertime>1423846916</servertime>
 +
</response></pre>
  
 
== Работа с "Любимыми каналами" ==
 
== Работа с "Любимыми каналами" ==
Строка 485: Строка 672:
 
Набор функций был введен для совместимости со старым механизмом «любымих каналов». Идея состояла в том, что клиент мог бы запрограммировать свой пульт на 12 горячих кнопок для быст- рого доступа к любимым каналам. Как показала практика, идея себя не оправдала, поскольку ее реализация относится в большей мере к клиентской части и информация об выбранных клиентом каналах должна храниться на клиентском оборудовании.
 
Набор функций был введен для совместимости со старым механизмом «любымих каналов». Идея состояла в том, что клиент мог бы запрограммировать свой пульт на 12 горячих кнопок для быст- рого доступа к любимым каналам. Как показала практика, идея себя не оправдала, поскольку ее реализация относится в большей мере к клиентской части и информация об выбранных клиентом каналах должна храниться на клиентском оборудовании.
  
=== Функция favorites ===
+
=== favorites - deprecated ===
  
 +
(Функция не обрабатывается на стороне API. Данный функционал должен быть на стороне клиента.)
  
Описание функции: вызов любимых каналов. Организовано хранение 12 любимых каналов. Каждая ячейка именуется индексом place. В ней содержится идентификатор канала.
+
Вызов любимых каналов. Организовано хранение 12 любимых каналов. Каждая ячейка именуется индексом place. В ней содержится идентификатор канала.
  
Вызов без входных параметров возвращает список заданных «любимых» каналов:
+
Вызов:
/favorites
+
  
=== Функция favorites_set ===
+
'''/favorites'''
  
 +
Возвращает ответ вида:
  
Описание функции: устанавливает в заданную ячейку любимый канал. Если установить cid=0, то канал удалится из списка любимых.
+
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
<favorites>
 +
  <item>
 +
      <place>PLACE</place>
 +
      <channel_id>CHANNEL_ID</channel_id>
 +
</item>
 +
  </favorites>
 +
<servertime>SERVERTIME</servertime>
 +
</response></pre>
 +
 
 +
Описание параметров ответа:
 +
 
 +
''place'' - Номер ячейки
 +
 
 +
''channel_id'' - Идентификатор канала
 +
 
 +
''servertime'' - Время на сервере в формате unixtime
 +
 
 +
Пример:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
<favorites>
 +
  <item>
 +
      <place>2</place>
 +
      <channel_id>2</channel_id>
 +
  </item>
 +
  <item>
 +
      <place>8</place>
 +
      <channel_id>3</channel_id>
 +
  </item>
 +
</favorites>
 +
<servertime>1278944963</servertime>
 +
</response></pre>
 +
 
 +
=== favorites_set - deprecated ===
 +
 
 +
(Функция не обрабатывается на стороне API. Данный функционал должен быть на стороне клиента.)
 +
 
 +
Устанавливает в заданную ячейку любимый канал. Если установить cid=0, то канал удалится из списка любимых.
  
 
Вызов:
 
Вызов:
  
/favorites_set?place=<номер ячейки для хранения>&cid=<идентификатор канала>
+
'''/favorites_set?place=<номер ячейки для хранения>&cid=<идентификатор канала>'''
  
=== Функция settings ===
+
Входные параметры:
  
 +
'''''place''''' - Номер ячейки для хранения любимого канала
  
Описание функции: получение значения переменной настройки.
+
'''''cid''''' - Идентификатор канала, полученный из функции [[#channel_list|channel_list]]
  
Вызов:
 
  
/settings?var=<http_caching|stream_server|timeshift|timezone|bitrate>
+
Возвращает ответ вида:
 +
 
 +
(пакет сообщение об успешном выполнении либо пакет ошибки)
 +
 
 +
=== settings ===
 +
 
 +
 
 +
Получение значения переменной настройки.
 +
 
 +
Вызов:
 +
 
 +
'''/settings?var=<http_caching|stream_server|timeshift|timezone|bitrate|bitratehd|archivebitratesd|archivebitratehd>'''
  
 
Если у переменной настройки есть список возможных значений, то они передаются в массиве с параметром list.
 
Если у переменной настройки есть список возможных значений, то они передаются в массиве с параметром list.
  
=== Функция settings_set ===
+
Входные параметры для функции:
  
Описание функции: установка значения переменной настройки.
+
'''''var''''' - ожидает передачи одного или нескольких параметров:  
 +
<pre>
 +
    http_caching    - время буферизации потока в миллисекундах
 +
 
 +
    stream_server    - IP сервера трансляции. Возможные значения передаются в массиве List
 +
 
 +
    timeshift        - смещение по времени. Возможные значения передаются в массиве List
 +
 
 +
    timezone        - часовой пояс. Возможные значения от -12 до +12
 +
 
 +
    bitrate          - Битрэйт для SD каналов
 +
 
 +
    bitratehd        - Битрэйт для HD каналов
 +
 
 +
    archivebitratesd - Битрэйт архива (VOD) SD каналов
 +
 
 +
    archivebitratehd - Битрэйт архива (VOD) HD каналов
 +
    vod_bitrate - Битрэйт Видеотеки
 +
</pre>
 +
Возвращает ответ вида:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
    <settings>
 +
        <name>bitrate</name>
 +
        <value>Economy</value>
 +
        <list>
 +
            <item>Automatic</item>
 +
            <item>Standart</item>
 +
            <item>Economy</item>
 +
        </list>
 +
    </settings>
 +
    <servertime>1423851019</servertime>
 +
</response></pre>
 +
 
 +
Если у переменной настройки есть список возможных значений, то они передаются в массиве с параметром list.
 +
 
 +
=== settings_set ===
 +
 
 +
Установка значения переменной настройки.
  
 
Вызов:  
 
Вызов:  
  
/settings_set?var=<pcode|http_caching|stream_server|timeshift|timezone|bitrate>&val=<значение>
+
'''/settings_set?var=<pcode|http_caching|stream_server|timeshift|timezone|bitrate>&val=<значение>'''
 +
 
 +
Входные параметры:
 +
 
 +
'''''var''''' ожидает передачи одного или нескольких параметров.
 +
 
 +
<pre>
 +
    http_caching    - время буферизации потока в миллисекундах
 +
</pre>
 +
<pre>
 +
    stream_server    - IP сервера трансляции. Возможные значения передаются в массиве List
 +
</pre>
 +
<pre>
 +
    timeshift        - смещение по времени. Возможные значения передаются в массиве List
 +
</pre>
 +
<pre>
 +
    timezone        - часовой пояс. Возможные значения от -12 до +12
 +
</pre>
 +
<pre>
 +
    bitrate          - Битрэйт для SD каналов
 +
</pre>
 +
<pre>
 +
    bitratehd        - Битрэйт для HD каналов
 +
</pre>
 +
<pre>
 +
    archivebitratesd - Битрэйт архива (DVR) SD каналов
 +
</pre>
 +
<pre>
 +
    archivebitratehd - Битрэйт архива (DVR) HD каналов 
 +
</pre>
 +
<pre>
 +
    vod_bitrate  - Битрэйт для объектов видеотеки
 +
</pre>
 +
<pre>
 +
    pcode  - Смена кода родительского контроля Для изменения вместо параметра val необходимо передать следующий параметры:  old_code , new_code , confirm_code
 +
</pre>
  
 
== Видеотека ==
 
== Видеотека ==
Строка 525: Строка 838:
 
«Видео по требованию» Video-on-demand (VOD). Возможность просмотра файлов в режиме online из каталога. Отдельный раздел для абонента, где представлен набор фильмов, разделенный по категориям, жанрам, рейтингам и т.п.
 
«Видео по требованию» Video-on-demand (VOD). Возможность просмотра файлов в режиме online из каталога. Отдельный раздел для абонента, где представлен набор фильмов, разделенный по категориям, жанрам, рейтингам и т.п.
  
=== Функция vod_list ===
+
=== vod_types ===
  
Описание функции: получение списка фильмов из базы видеотеки. Фильмы выводятся в порядке, заданном параметром type, списками по 20 фильмов.
+
Получение списка типов видео-обьектов для фильтрации.
  
 
Вызов:  
 
Вызов:  
  
/vod_list?type=<best|last|text>&page=<N>&query=<запрос>&genre=<id_жанра>&nums=<NN>
+
'''/vod_types'''
  
=== Функция vod_info ===
+
Пример ответа:
  
Описание функции: получение полной информации о фильме.  
+
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
    <types>
 +
        <id>2</id>
 +
        <name>Фильмы</name>
 +
    </types>
 +
    <types>
 +
        <id>tvseries</id>
 +
        <name>Сериалы</name>
 +
    </types>
 +
    <servertime>1425402443</servertime>
 +
</response>
 +
</pre>
  
Вызов:
+
=== vod_years ===
  
/vod_info?id=<id фильма>&protect_code=<родительский пароль>
+
Получение списка доступных значений фильтрации по годам.
  
=== Функция vod_geturl ===
+
Вызов:
  
Описание функции: получение ссылки для вещания потока видео.
+
'''/vod_years'''
 +
 
 +
Пример ответа:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
  <years>
 +
    <id>2018</id>
 +
    <name>2018</name>
 +
  </years>
 +
  <years>
 +
    <id>2017</id>
 +
    <name>2017</name>
 +
  </years>
 +
.......
 +
  <years>
 +
    <id>1940</id>
 +
    <name>1940</name>
 +
  </years>
 +
  <years>
 +
    <id>1939</id>
 +
    <name>1939</name>
 +
  </years>
 +
  <servertime>1525693369</servertime>
 +
</response>
 +
</pre>
 +
 
 +
 
 +
=== vod_kinopoisk ===
 +
 
 +
Получение списка доступных значений фильтрации по рейтингу  Kinopoisk.
  
 
Вызов:  
 
Вызов:  
  
/vod_geturl?fileid=<ид файла>&protect_code=<родительский пароль>
+
'''/vod_kinopoisk'''
  
=== Функция vod_genres ===
+
Пример ответа:
  
Описание функции: возвращает список жанров.  
+
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
  <kinopoisk>
 +
    <id>9-10</id>
 +
    <name>9-10</name>
 +
  </kinopoisk>
 +
  <kinopoisk>
 +
    <id>8-9</id>
 +
    <name>8-9</name>
 +
  </kinopoisk>
 +
.....
 +
  <kinopoisk>
 +
    <id>1-2</id>
 +
    <name>1-2</name>
 +
  </kinopoisk>
 +
  <kinopoisk>
 +
    <id>0-1</id>
 +
    <name>0-1</name>
 +
  </kinopoisk>
 +
  <servertime>1525693688</servertime>
 +
</response>
 +
</pre>
  
Вызов без параметров:
+
=== vod_imdb ===
  
/vod_genres
+
Получение списка доступных значений фильтрации по рейтингу  IMDB.
  
Внимание! Не рекомендуется делать статичную копию справочника, поскольку жанры могут изменяться и появляться по мере поступления новых фильмов.
+
Вызов:
  
=== Функция vod_favlist ===
+
'''/vod_imdb'''
  
Описание функции: выводит список отобранных любимых фильмов
+
Пример ответа:
  
Вызов без параметров:
+
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
  <imdb>
 +
    <id>9-10</id>
 +
    <name>9-10</name>
 +
  </imdb>
 +
.....
 +
  <imdb>
 +
    <id>1-2</id>
 +
    <name>1-2</name>
 +
  </imdb>
 +
  <imdb>
 +
    <id>0-1</id>
 +
    <name>0-1</name>
 +
  </imdb>
 +
  <servertime>1525693768</servertime>
 +
</response>
 +
</pre>
  
/vod_favlist
+
=== vod_list ===
  
Формат ответа идентичен формату списка /vod_list
+
Получение списка фильмов из базы видеотеки. Фильмы выводятся в порядке, заданном параметром type.
  
=== Функция vod_favadd ===
+
Вызов:
 +
 
 +
'''/vod_list?[type=<best|last|text>[&query=<запрос>]][&page=<N>][&genre=<id_жанра>][&nums=<NN>][&vod_type=all|...>][&year[]=<Год>][&kinopoisk[]=<Оценка>][&imdb[]=<Оценка>]'''
 +
 
 +
Входные параметры для функции:
 +
 
 +
'''''type''''' - best - лучшие фильмы согласно рейтинга по просмотрам; last - тот же список фильмов но отсортирован по дате добавления в обратном порядке; text - поиск в базе по названию фильма. Строка для поиска в query
 +
 
 +
'''''query''''' - Строка для поиска. Работает, если установлен параметр type=text
 +
 
 +
'''''page''''' - Номер страницы списка. По умолчанию установлен 1-й номер страницы.
 +
 
 +
'''''genre''''' - id - фильтр по жанрам. Показывает фильмы только указанного жанра. Возможно перечисление выводимых жанров через знак `|`. Например:
 +
genre=205|206|215
 +
 
 +
'''genres_light''''' - id - фильтр по жанрам. Показывает фильмы только указанного жанра из списка функции  genre_ligth. Возможно перечисление выводимых жанров через знак `|`. Например:
 +
genres_light =205|206|215
 +
 
 +
'''''nums''''' -  Количество фильмов на страницу. По умолчанию: 20
 +
 
 +
'''''vod_type''''' - Тип видео записей для вывода all - все (значение по умолчанию all), остальные параметры фильтрации выбираются из функции [[#vod_types|vod_types]]
 +
 
 +
'''''year[]''''' -  Массив в который передаются значения фильтрации по годам (может содержать несколько значений)
 +
 
 +
'''''kinopoisk[]''''' -  Массив в который передаются значения фильтрации по оценкам Kinopoisk (может содержать несколько значений)
 +
 
 +
'''''imdb[]''''' -  Массив в который передаются значения фильтрации по оценкам IMDB (может содержать несколько значений)
 +
 
 +
Возвращает ответ вида:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
<type>TYPE</type>
 +
<total>TOTAL</total>
 +
<count>COUNT</count>
 +
<page>PAGE</page>
 +
<rows>
 +
  <item>
 +
      <id>ID</id>
 +
      <dt_modify>DT_MODIFY</dt_modify>
 +
      <name>NAME </name>
 +
      <name_orig>NAME_ORIG</name_orig>
 +
      <description>DESCRIPTION</description>
 +
      <poster>POSTER</poster>
 +
      <year>YEAR</year>
 +
      <rate_imdb>RATE_IMDB</rate_imdb>
 +
      <rate_kinopoisk>RATE_KINOPOISK</rate_kinopoisk>
 +
      <rate_mpaa>RATE_MPAA</rate_mpaa>
 +
      <country>COUNTRY</country>
 +
      <genre_str>детектив</genre_str>
 +
</item> ...
 +
<rows>
 +
</response></pre>
 +
 
 +
Описание параметров ответа:
 +
 
 +
''type'' - текущий тип запроса
 +
 
 +
''total'' - всего записей, удовлетворяющих запросу
 +
 
 +
''count'' -  количество на текущей странице
 +
 
 +
''page'' - номер страницы
 +
 
 +
''id'' -  идентификатор фильма (не файла для вещания!)
 +
 
 +
''dt_modify'' - дата последней модификации (YYYY-MM-DD HH:MM:SS)
 +
 
 +
''name'' -  название фильма
 +
 
 +
''name_orig'' - оригинальное название фильма (если др.язык)
 +
 
 +
''description'' -  описание фильма
 +
 
 +
''poster'' - относительная ссылка на картинку постера. Относительно http://iptv.sunduk.tv/
 +
 
 +
''year'' -   год выпуска фильма
 +
 
 +
''rate_imdb'' - значение рейтинга IMDB
 +
 
 +
''rate_kinopoisk'' -  значение рейтинга kinopoisk.ru
 +
 
 +
''rate_mpaa'' - значение рейтинга MPAA
 +
 
 +
''country'' -  страна производства
 +
 
 +
''genre_str'' - строка жанров (список жанров фильма собранный в строку и разделенные запятыми)
 +
 
 +
 
 +
Пример ответа:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
    <type>best</type>
 +
    <total>17</total>
 +
    <count>17</count>
 +
    <page>1</page>
 +
    <rows>
 +
        <id>32</id>
 +
        <dt_modify>2014-11-25 09:41:05</dt_modify>
 +
        <dt_create>2014-11-25 09:41:15</dt_create>
 +
        <name>Укрощение строптивого</name>
 +
        <name_orig>Il Bisbetico Domato (The Taming of the Scoundrel)</name_orig>
 +
        <description>
 +
            <p>Категорически не приемлющий женское общество грубоватый фермер (Адриано Челентано) вполне счастлив и
 +
                доволен своей холостяцкой жизнью. Но неожиданно появившаяся в его жизни героиня (Орнелла Мути) пытается
 +
                изменить его взгляды на жизнь и очаровать его. Что же из этого получится &hellip; Картина с успехом
 +
                прошла в прокате и по сей день пользуется заслуженной любовью зрителей.
 +
            </p>
 +
        </description>
 +
        <poster>/uploads/d2d0f77ff2fdfedeff07cd2cb963eca0.jpg</poster>
 +
        <year>1980</year>
 +
        <rate_imdb>7.5</rate_imdb>
 +
        <rate_kinopoisk>8.339</rate_kinopoisk>
 +
        <country>Италия</country>
 +
        <vis>on</vis>
 +
        <video_data>
 +
            <items>
 +
                <format>tv</format>
 +
                <nums>1</nums>
 +
            </items>
 +
            <items>
 +
                <format>dvd</format>
 +
                <nums>1</nums>
 +
            </items>
 +
            <items>
 +
                <format>fullhd</format>
 +
                <nums>1</nums>
 +
            </items>
 +
        </video_data>
 +
        <genre_str>комедия</genre_str>
 +
        <pass_protect/>
 +
    </rows>
 +
    <rows>
 +
        <id>3</id>
 +
        <dt_modify>2014-11-25 09:41:05</dt_modify>
 +
        <dt_create>2014-11-25 09:41:15</dt_create>
 +
        <name>Амазония</name>
 +
        <name_orig>Amazonia</name_orig>
 +
        <description>
 +
            <p>Невероятно увлекательное путешествие по диким тропическим джунглям Амазонии вместе с капуцином Саи. Выжив
 +
                в авиакатастрофе, маленькая обезьянка попадает в необычную среду и теперь должна сама заботиться о себе.
 +
                Ведь новый мир дикой природы полон опасностей и ловушек. Что ее ждет и как она приспособится к жизни в
 +
                дикой Амазонии?
 +
            </p>
 +
        </description>
 +
        <poster>/uploads/ec4d3bc6a57395f37fd8e5e16f82f20a.jpg</poster>
 +
        <year>2013</year>
 +
        <rate_imdb>6.714</rate_imdb>
 +
        <rate_kinopoisk>10</rate_kinopoisk>
 +
        <country>Франция</country>
 +
        <vis>on</vis>
 +
        <video_data>
 +
            <items>
 +
                <format>tv</format>
 +
                <nums>1</nums>
 +
            </items>
 +
            <items>
 +
                <format>dvd</format>
 +
                <nums>1</nums>
 +
            </items>
 +
            <items>
 +
                <format>fullhd</format>
 +
                <nums>1</nums>
 +
            </items>
 +
        </video_data>
 +
        <genre_str>документальный, приключения</genre_str>
 +
        <pass_protect/>
 +
    </rows>
 +
    <servertime>1423853587</servertime>
 +
</response>
 +
</pre>
 +
 
 +
=== vod_list_kinopoisk ===
 +
 
 +
Получение списка фильмов из базы видеотеки. Фильмы выводятся в порядке, заданном параметром type.
 +
 
 +
Вызов:
 +
 
 +
'''/vod_list_kinopoisk?[type=<best|last|text>[&query=<запрос>]][&page=<N>][&genre=<id_жанра>][&nums=<NN>][&vod_type=all|...>][&year[]=<Год>][&kinopoisk[]=<Оценка>][&imdb[]=<Оценка>]'''
 +
 
 +
Входные параметры для функции:
 +
 
 +
'''''type''''' - best - лучшие фильмы согласно рейтинга по просмотрам; last - тот же список фильмов но отсортирован по дате добавления в обратном порядке; text - поиск в базе по названию фильма. Строка для поиска в query
 +
 
 +
'''''query''''' - Строка для поиска. Работает, если установлен параметр type=text
 +
 
 +
'''''page''''' - Номер страницы списка. По умолчанию установлен 1-й номер страницы.
 +
 
 +
'''''genre''''' - id - фильтр по жанрам. Показывает фильмы только указанного жанра. Возможно перечисление выводимых жанров через знак `|`. Например:
 +
genre=205|206|215
 +
 
 +
'''''nums''''' -  Количество фильмов на страницу. По умолчанию: 20
 +
 
 +
'''''vod_type''''' - Тип видео записей для вывода all - все (значение по умолчанию all), остальные параметры фильтрации выбираются из функции [[#vod_types|vod_types]]
 +
 
 +
'''''year[]''''' -  Массив в который передаются значения фильтрации по годам (может содержать несколько значений)
 +
 
 +
'''''kinopoisk[]''''' -  Массив в который передаются значения фильтрации по оценкам Kinopoisk (может содержать несколько значений)
 +
 
 +
'''''imdb[]''''' -  Массив в который передаются значения фильтрации по оценкам IMDB (может содержать несколько значений)
 +
 
 +
Возвращает ответ вида:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
<type>TYPE</type>
 +
<total>TOTAL</total>
 +
<count>COUNT</count>
 +
<page>PAGE</page>
 +
<rows>
 +
  <item>
 +
      <id>ID</id>
 +
      <dt_modify>DT_MODIFY</dt_modify>
 +
      <name>NAME </name>
 +
      <name_orig>NAME_ORIG</name_orig>
 +
      <description>DESCRIPTION</description>
 +
      <poster>POSTER</poster>
 +
      <year>YEAR</year>
 +
      <rate_imdb>RATE_IMDB</rate_imdb>
 +
      <rate_kinopoisk>RATE_KINOPOISK</rate_kinopoisk>
 +
      <rate_mpaa>RATE_MPAA</rate_mpaa>
 +
      <country>COUNTRY</country>
 +
      <genre_str>детектив</genre_str>
 +
</item> ...
 +
<rows>
 +
</response></pre>
 +
 
 +
Описание параметров ответа:
 +
 
 +
''type'' - текущий тип запроса
 +
 
 +
''total'' - всего записей, удовлетворяющих запросу
 +
 
 +
''count'' -  количество на текущей странице
 +
 
 +
''page'' - номер страницы
 +
 
 +
''id'' -  идентификатор фильма (не файла для вещания!)
 +
 
 +
''dt_modify'' - дата последней модификации (YYYY-MM-DD HH:MM:SS)
 +
 
 +
''name'' -  название фильма
 +
 
 +
''name_orig'' - оригинальное название фильма (если др.язык)
 +
 
 +
''description'' -  описание фильма
 +
 
 +
''poster'' - относительная ссылка на картинку постера. Относительно http://iptv.sunduk.tv/
 +
 
 +
''year'' -   год выпуска фильма
 +
 
 +
''rate_imdb'' - значение рейтинга IMDB
 +
 
 +
''rate_kinopoisk'' -  значение рейтинга kinopoisk.ru
 +
 
 +
''rate_mpaa'' - значение рейтинга MPAA
 +
 
 +
''country'' -  страна производства
 +
 
 +
''genre_str'' - строка жанров (список жанров фильма собранный в строку и разделенные запятыми)
 +
 
 +
 
 +
Пример ответа:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
    <type>best</type>
 +
    <total>17</total>
 +
    <count>17</count>
 +
    <page>1</page>
 +
    <rows>
 +
        <id>32</id>
 +
        <dt_modify>2014-11-25 09:41:05</dt_modify>
 +
        <dt_create>2014-11-25 09:41:15</dt_create>
 +
        <name>Укрощение строптивого</name>
 +
        <name_orig>Il Bisbetico Domato (The Taming of the Scoundrel)</name_orig>
 +
        <description>
 +
            <p>Категорически не приемлющий женское общество грубоватый фермер (Адриано Челентано) вполне счастлив и
 +
                доволен своей холостяцкой жизнью. Но неожиданно появившаяся в его жизни героиня (Орнелла Мути) пытается
 +
                изменить его взгляды на жизнь и очаровать его. Что же из этого получится &hellip; Картина с успехом
 +
                прошла в прокате и по сей день пользуется заслуженной любовью зрителей.
 +
            </p>
 +
        </description>
 +
        <poster>/uploads/d2d0f77ff2fdfedeff07cd2cb963eca0.jpg</poster>
 +
        <year>1980</year>
 +
        <rate_imdb>7.5</rate_imdb>
 +
        <rate_kinopoisk>8.339</rate_kinopoisk>
 +
        <country>Италия</country>
 +
        <vis>on</vis>
 +
        <video_data>
 +
            <items>
 +
                <format>tv</format>
 +
                <nums>1</nums>
 +
            </items>
 +
            <items>
 +
                <format>dvd</format>
 +
                <nums>1</nums>
 +
            </items>
 +
            <items>
 +
                <format>fullhd</format>
 +
                <nums>1</nums>
 +
            </items>
 +
        </video_data>
 +
        <genre_str>комедия</genre_str>
 +
        <pass_protect/>
 +
    </rows>
 +
    <rows>
 +
        <id>3</id>
 +
        <dt_modify>2014-11-25 09:41:05</dt_modify>
 +
        <dt_create>2014-11-25 09:41:15</dt_create>
 +
        <name>Амазония</name>
 +
        <name_orig>Amazonia</name_orig>
 +
        <description>
 +
            <p>Невероятно увлекательное путешествие по диким тропическим джунглям Амазонии вместе с капуцином Саи. Выжив
 +
                в авиакатастрофе, маленькая обезьянка попадает в необычную среду и теперь должна сама заботиться о себе.
 +
                Ведь новый мир дикой природы полон опасностей и ловушек. Что ее ждет и как она приспособится к жизни в
 +
                дикой Амазонии?
 +
            </p>
 +
        </description>
 +
        <poster>/uploads/ec4d3bc6a57395f37fd8e5e16f82f20a.jpg</poster>
 +
        <year>2013</year>
 +
        <rate_imdb>6.714</rate_imdb>
 +
        <rate_kinopoisk>10</rate_kinopoisk>
 +
        <country>Франция</country>
 +
        <vis>on</vis>
 +
        <video_data>
 +
            <items>
 +
                <format>tv</format>
 +
                <nums>1</nums>
 +
            </items>
 +
            <items>
 +
                <format>dvd</format>
 +
                <nums>1</nums>
 +
            </items>
 +
            <items>
 +
                <format>fullhd</format>
 +
                <nums>1</nums>
 +
            </items>
 +
        </video_data>
 +
        <genre_str>документальный, приключения</genre_str>
 +
        <pass_protect/>
 +
    </rows>
 +
    <servertime>1423853587</servertime>
 +
</response>
 +
</pre>
 +
 
 +
=== vod_info ===
  
Описание функции: добавление фильма с идентификатором id в список любимых фильмов.  
+
Получение полной информации о фильме.  
  
 
Вызов:
 
Вызов:
  
/vod_favadd?id=<ID фильма>
+
'''/vod_info?id=<id фильма>[&protect_code=<родительский пароль>]'''
  
=== Функция vod_favsub ===
+
Входные параметры для функции:
 +
 
 +
'''''id''''' - идентификатор фильма, полученный из функции vod_list
 +
 
 +
'''''protect_code''''' - родительский пароль, если фильм защищен протекцией от детей
 +
 
 +
Возвращает ответ вида:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
<film>
 +
  <id>ID</id>
 +
  <name>NAME</name>
 +
  <name_orig>NAME_ORIG</name_orig>
 +
  <description>DESCRIPTION</description>
 +
  <poster>POSTER</poster>
 +
  <length>LENGTH</length>
 +
  <genre_str>GENRE_STR</genre_str>
 +
  <year>YEAR</year>
 +
  <director>DIRECTOR</director>
 +
  <scenario>SCENARIO</scenario>
 +
  <actors>ACTORS</actors>
 +
<rate_imdb>RATE_IMDB</rate_imdb>
 +
<rate_kinopoisk>RATE_KINOPOISK</rate_kinopoisk>
 +
<rate_mpaa>RATE_MPAA</rate_mpaa>
 +
<country>COUNTRY</country>
 +
<studio>STUDIO</studio>
 +
<awards>AWARDS</awards>
 +
<budget>BUDGET</budget>
 +
<images>IMAGES</images>
 +
<videos>
 +
      <item>
 +
        <id>ID</id>
 +
        <title>TITLE</title>
 +
        <format>fullhd</format>
 +
        <url>URL</url>
 +
        <size>SIZE</size>
 +
        <length>LENGTH</length>
 +
        <codec>CODEC</codec>
 +
        <width>WIDTH</width>
 +
        <height>HEIGTH</height>
 +
        <track1_codec>TRACK1_CODEC</track1_codec>
 +
        <track1_lang>TRACK1_LANG</track1_lang>
 +
        <track2_codec>TRACK2_CODEC</track2_codec>
 +
        <track2_lang>TRACK2_LANG</track2_lang>
 +
        <track3_codec>TRACK3_CODEC</track3_codec>
 +
        <track4_lang>TRACK3_LANG</track3_lang>
 +
      </item>
 +
  </videos>
 +
  <genres>
 +
      <item>
 +
<id>ID</id>
 +
        <name>NAME</name>
 +
      </item>
 +
  </genres>
 +
</film>
 +
<servertime>SERVERTIME</servertime>
 +
</response></pre>
 +
 
 +
Описание параметров ответа:
 +
 
 +
''id'' - идентификатор фильма, полученный из функции vod_list
 +
 
 +
''name'' -  название фильма
 +
 
 +
''name_orig'' - оригинальное название фильма (если др.язык)
 +
 
 +
''description'' -  описание фильма
 +
 
 +
''poster'' - относительная ссылка на картинку постера. Относительно http://iptv.sunduk.tv/
 +
 
 +
''length'' - длина фильма в минутах
 +
 
 +
''genre_str'' -  жанры фильма, разделенные запятыми
 +
 
 +
''year'' - год выпуска
 +
 
 +
''director'' - режиссер
 +
 
 +
''scenario'' - сценарист
 +
 
 +
''actors'' -   в ролях
 +
 
 +
''rate_imdb'' - значение рейтинга IMDB
 +
 
 +
''rate_kinopoisk'' -  значение рейтинга kinopoisk.ru
 +
 
 +
''rate_mpaa'' - значение рейтинга MPAA
 +
 
 +
''country'' -  страна производства
 +
 
 +
''studio'' - студия
 +
 
 +
''awards'' -  награды
 +
 
 +
''budget'' - бюджет
 +
 
 +
''images'' -  скриншоты (если есть)
 +
 
 +
''password_protect'' - 1 или 0 закрыт или открыт контет по родительскому паролю. Устанавливается функцией /vod_manage
 +
 
 +
''videos'' -  файлы фильма (серии)
 +
 
 +
''videos/item/id'' - идентификатор файла
 +
 
 +
''title''  -  название серии. Если фильм односерийный, поле может быть не задано
 +
 
 +
''format'' - качество. economy|standart|hd|fullhd|3d (может быть перечислено несколько доступных форматов этого видео через запятую
 +
 
 +
''url'' -  имя файла (справочное, не используется.)
 +
 
 +
''size'' - размер файла
 +
 
 +
''codec'' - кодек
 +
 
 +
''width''  -   ширина картинки
 +
 
 +
''height'' - высота картинки
 +
 
 +
''track1_codec'' - аудио кодек дорожки 1
 +
 
 +
''track1_lang'' - язык звукового трека 1
 +
 
 +
''track2_codec'' -  аудио кодек дорожки 2
 +
 
 +
''track2_lang'' - язык звукового трека 2
 +
 
 +
''track3_codec'' -  аудио кодек дорожки 3
 +
 
 +
''track4_lang'' - язык звукового трека 3
 +
 
 +
''genres'' -   массив жанров фильма
 +
 
 +
''genres/id'' - идентификатор жанра
 +
 
 +
''genres/name'' - наименование жанра
 +
 
 +
 
 +
Пример ответа:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
    <film>
 +
        <id>3</id>
 +
        <name>Амазония</name>
 +
        <name_orig>Amazonia</name_orig>
 +
        <description>
 +
            <p>Невероятно увлекательное путешествие по диким тропическим джунглям Амазонии вместе с капуцином Саи. Выжив
 +
                в авиакатастрофе, маленькая обезьянка попадает в необычную среду и теперь должна сама заботиться о себе.
 +
                Ведь новый мир дикой природы полон опасностей и ловушек. Что ее ждет и как она приспособится к жизни в
 +
                дикой Амазонии?
 +
            </p>
 +
        </description>
 +
        <poster>uploads/ec4d3bc6a57395f37fd8e5e16f82f20a.jpg</poster>
 +
        <lenght>82.533833333333</lenght>
 +
        <genre_str>документальный, приключения</genre_str>
 +
        <year>2013</year>
 +
        <director>Тьерри Рагоберт</director>
 +
        <scenario/>
 +
        <actors></actors>
 +
        <rate_imdb>6.714</rate_imdb>
 +
        <rate_kinopoisk>10</rate_kinopoisk>
 +
        <rate_mpaa/>
 +
        <country>Франция</country>
 +
        <studio/>
 +
        <awards/>
 +
        <budget/>
 +
        <images/>
 +
        <videos>
 +
          <item>
 +
            <id>2</id>
 +
            <title>fullhd</title>
 +
            <format>fullhd</format>
 +
            <url>http://tv1.sunduk.tv:1935/vod/vod/vod/00/00/00/00/02.mp4/playlist.m3u8</url>
 +
            <size>3763174739</size>
 +
            <lenght>82.533833333333</lenght>
 +
            <codec>h264, ac3</codec>
 +
            <width>1920</width>
 +
            <height>1080</height>
 +
            <track1_codec>aac</track1_codec>
 +
          </item>
 +
        </videos>
 +
        <genres>
 +
            <id>8</id>
 +
            <name>документальный</name>
 +
        </genres>
 +
        <genres>
 +
            <id>18</id>
 +
            <name>приключения</name>
 +
        </genres>
 +
    </film>
 +
    <servertime>1423854433</servertime>
 +
</response></pre>
 +
 
 +
=== vod_geturl ===
  
Описание функции: удаление фильма с идентификатором id из списка любимых фильмов.  
+
Получение ссылки для вещания потока видео.
  
 
Вызов:
 
Вызов:
  
/vod_favsub?id=<ID фильма>
+
'''/vod_geturl?fileid=<идентификатор файла>[&format=<vod_format>][&protect_code=<родительский пароль>]'''
  
=== Режимы видеотеки ===
+
Входные параметры:
  
Часть клиентов хотят закрывать просмотр некоторых фильмовых жанров. Мы отобрали несколько таких типов и даем возможность клиенту самостоятельно устанавливать режим просмотра фильмов. На момент написания настоящей документации было выделено 4 основных рейтинга, по которым возможна фильтрация контента.
+
'''''fileid''''' - идентификатор файла, полученный из функции [[#vod_info|vod_info]]
  
 +
'''''protect_code''''' - родительский пароль. Используется только для контента с пометкой <password_protect>
  
Каждый из рейтингов для каждого абонента может быть состояниях: доступным (show), скрытом (hide), доступным по паролю (pass).
+
'''''format''''' - Качество которое должно быть передано если значение не передано то используется наилучшее качество. Варианты формата видео использовать из функции [[#vod_info|vod_info]]
  
По умолчанию установлены следующие параметры рейтинга: blood=show, violence=show, obscene=show, porn=hide, horror=hide.
 
  
=== Функция vod_manage ===
+
Возвращает ответ вида:
  
Описание функции: родительский контроль над категориями фильмов.
+
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
    <url>http://tv1.sunduk.tv:1935/vod/vod/vod/00/00/00/00/03.mp4/playlist.m3u8</url>
 +
    <servertime>1423854863</servertime>
 +
</response></pre>
 +
 
 +
=== vod_genres ===
 +
 
 +
Возвращает список жанров.  
  
 
Вызов:
 
Вызов:
  
/vod_manage?cmd=<get_rates|set_user_rates>&protect_code=<родительский пароль>
+
'''/vod_genres[?vod_type=<vod_type>]'''
 +
 
 +
Входные параметры:
 +
 
 +
'''''vod_type''''' -  Тип видео записей для вывода all - все (значение по умолчанию all), остальные параметры фильтрации выбираются из функции [[#vod_types|vod_types]]
 +
 
 +
'''Внимание!''' Не рекомендуется делать статичную копию справочника, поскольку жанры могут изменяться и появляться по мере поступления новых фильмов.
 +
 
 +
Возвращает ответ вида:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
<genres>
 +
      <id>ID</id>
 +
      <name>NAME</name>
 +
      ...
 +
      <id>ID</id>
 +
      <name>NAME</name>
 +
</genres>
 +
<servertime>SERVERTIME</servertime>
 +
</response></pre>
 +
 
 +
Описание параметров ответа:
 +
 
 +
''id'' - id жанра
 +
 
 +
''name'' - наименование жанра
 +
 
 +
 
 +
Пример:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
    <genres>
 +
        <id>3</id>
 +
        <name>боевик</name>
 +
    </genres>
 +
    <genres>
 +
        <id>6</id>
 +
        <name>детектив</name>
 +
    </genres>
 +
    <genres>
 +
        <id>8</id>
 +
        <name>документальный</name>
 +
    </genres>
 +
 
 +
    <servertime>1423855163</servertime>
 +
</response></pre>
 +
 
 +
=== vod_genres_lite ===
 +
 
 +
Возвращает список жанров в более сжатом виде.
 +
Ответ отличается только содержимым жанров
 +
 
 +
Вызов:
 +
 
 +
'''/vod_genres_lite[?vod_type=<vod_type>]'''
 +
 
 +
Входные параметры:
 +
 
 +
'''''vod_type''''' -  Тип видео записей для вывода all - все (значение по умолчанию all), остальные параметры фильтрации выбираются из функции [[#vod_types|vod_types]]
 +
 
 +
'''Внимание!''' Не рекомендуется делать статичную копию справочника, поскольку жанры могут изменяться и появляться по мере поступления новых фильмов.
 +
 
 +
Возвращает ответ вида:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
<genres>
 +
      <id>ID</id>
 +
      <name>NAME</name>
 +
      ...
 +
      <id>ID</id>
 +
      <name>NAME</name>
 +
</genres>
 +
<servertime>SERVERTIME</servertime>
 +
</response></pre>
 +
 
 +
Описание параметров ответа:
 +
 
 +
''id'' - id жанра
 +
 
 +
''name'' - наименование жанра
 +
 
 +
 
 +
Пример:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
    <genres>
 +
        <id>3</id>
 +
        <name>боевик</name>
 +
    </genres>
 +
    <genres>
 +
        <id>6</id>
 +
        <name>детектив</name>
 +
    </genres>
 +
    <genres>
 +
        <id>8</id>
 +
        <name>документальный</name>
 +
    </genres>
 +
 
 +
    <servertime>1423855163</servertime>
 +
</response></pre>
 +
 
 +
=== vod_genres_kinopoisk ===
 +
 
 +
Возвращает список жанров.
 +
 
 +
Вызов:
 +
 
 +
'''/vod_genres_kinopoisk[?vod_type=<vod_type>]'''
 +
 
 +
Входные параметры:
 +
 
 +
'''''vod_type''''' -  Тип видео записей для вывода all - все (значение по умолчанию all), остальные параметры фильтрации выбираются из функции [[#vod_types|vod_types]]
 +
 
 +
'''Внимание!''' Не рекомендуется делать статичную копию справочника, поскольку жанры могут изменяться и появляться по мере поступления новых фильмов.
 +
 
 +
Возвращает ответ вида:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
<genres>
 +
      <id>ID</id>
 +
      <name>NAME</name>
 +
      ...
 +
      <id>ID</id>
 +
      <name>NAME</name>
 +
</genres>
 +
<servertime>SERVERTIME</servertime>
 +
</response></pre>
 +
 
 +
Описание параметров ответа:
 +
 
 +
''id'' - id жанра
 +
 
 +
''name'' - наименование жанра
 +
 
 +
 
 +
Пример:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
    <genres>
 +
        <id>3</id>
 +
        <name>боевик</name>
 +
    </genres>
 +
    <genres>
 +
        <id>6</id>
 +
        <name>детектив</name>
 +
    </genres>
 +
    <genres>
 +
        <id>8</id>
 +
        <name>документальный</name>
 +
    </genres>
 +
 
 +
    <servertime>1423855163</servertime>
 +
</response></pre>
 +
 
 +
=== vod_favlist ===
 +
 
 +
Выводит список отобранных любимых фильмов
 +
 
 +
Вызов:
 +
 
 +
'''/vod_favlist'''
 +
 
 +
Формат ответа идентичен формату списка [[#vod_list|vod_list]]
 +
 
 +
=== vod_favadd ===
 +
 
 +
Добавление фильма с идентификатором id в список любимых фильмов.
 +
 
 +
Вызов:
 +
 
 +
'''/vod_favadd?id=<ID фильма>'''
 +
 
 +
=== vod_favsub ===
 +
 
 +
Удаление фильма с идентификатором id из списка любимых фильмов.
 +
 
 +
Вызов:
 +
 
 +
'''/vod_favsub?id=<ID фильма>'''
 +
 
 +
=== vod_rate ===
 +
 
 +
представить рейтинг фильма.
 +
 
 +
Вызов:
 +
 
 +
'''/vod_rate[?vodid=<vodid>&rate=<rate>]'''
 +
 
 +
Входные параметры:
 +
 
 +
'''''vodid''''' -  идентификатор видео для оценки [[#vodid|vodid]]
 +
 
 +
'''''rate''''' -  значение ставки 1 - не понравился, 2 - Понравился
 +
 
 +
Возвращает ответ вида:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
<code>Ok</code>
 +
<httpcode>NAME</httpcode>
 +
<servertime>SERVERTIME</servertime>
 +
</response></pre>
 +
 
 +
Описание параметров ответа:
 +
 
 +
''code'' - id жанра
 +
 
 +
''httpcode'' - наименование жанра
 +
 
 +
 
 +
Пример:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
    <code>Ok</code>
 +
    <httpcode>200</httpcode>
 +
    <servertime>1423855163</servertime>
 +
</response></pre>
 +
 
 +
=== speedtest ===
 +
 
 +
Чтобы вернуть список доступных серверов
 +
 
 +
Вызов:
 +
 
 +
'''/speedtest'''
 +
 
 +
Возвращает ответ вида:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
  <status>true</status>
 +
    <data>
 +
        <servername>Europe North</servername>
 +
        <server_ip>XXX.XXX.XXX.XXX</server_ip>
 +
            <test_settings>
 +
              <file_size></file_size>
 +
              <file_url></file_url>
 +
          </test_settings>
 +
          <test_settings>
 +
            <file_size>24262167</file_size>
 +
          <file_url>https://XXX.XXX.XXX.XXX:7575/random2000x2000.jpg</file_url>
 +
        </test_settings>
 +
    </data>
 +
</response></pre>
 +
 
 +
Описание параметров ответа:
 +
 
 +
''Server name'' - имя сервера
 +
 
 +
''server ip'' - IP-адрес сервера
 +
 
 +
''file size'' - имя файла в байтах
 +
 
 +
''file url'' - URL-адрес файла
 +
 
 +
 
 +
Пример:
 +
 
 +
<nowiki /><pre><?xml version="1.0" encoding="UTF-8"?>
 +
<response>
 +
  <status>true</status>
 +
    <data>
 +
        <servername>Europe North</servername>
 +
        <server_ip>XXX.XXX.XXX.XXX</server_ip>
 +
            <test_settings>
 +
              <file_size>1042592</file_size>
 +
              <file_url>https://XXX.XXX.XXX.XXX:7575/1mb.jpg</file_url>
 +
          </test_settings>
 +
          <test_settings>
 +
            <file_size>24262167</file_size>
 +
          <file_url>https://XXX.XXX.XXX.XXX:7575/random2000x2000.jpg</file_url>
 +
        </test_settings>
 +
    </data>
 +
</response></pre>
 +
 
 +
=== vod_preview ===
 +
 
 +
Принимает значение:
 +
vodid - id фильма или сериала
 +
 
 +
Возвращает ссылки на трейлеры и постеры
 +
 
 +
Пример ответа:
 +
 
 +
<nowiki /><pre>
 +
 
 +
<response>
 +
<trailer>
 +
<id>3571</id>
 +
<url>
 +
http://212.102.40.169:80/vteka/trailer/9.mp4/mono.m3u8?token=1-vod_e77c5d4baf994c1d8b8a88a521e4ea66
 +
</url>
 +
</trailer>
 +
<posters_preview>
 +
<url>
 +
http://iptv.sunduk.tv/api/json/vod_preview_poster?vodid=3571
 +
</url>
 +
</posters_preview>
 +
<servertime>1650917897</servertime>
 +
</response>
 +
</pre></nowiki>
 +
 
 +
== Коды ошибок ==
 +
 
 +
0 - Unknown error - Неизвестная ошибка
 +
 
 +
1 - Incorrect request - Неверный запрос
 +
 
 +
2 - Wrong login or password - Неправильный логин или пароль
 +
 
 +
3 - Access denied - Доступ запрещен
 +
 
 +
4 - Login incorrect - Неправильный логин
 +
 
 +
5 - Your contract is inactive - Ваш контракт неактивен
 +
 
 +
6 - Your contract is paused - Ваш контракт заморожен
 +
 
 +
7 - Channel not found or not allowed - Канал не найден или недоступен
 +
 
 +
8 - Error generate URL. Bad parameters - Ошибка генерации URL – заданы неверные параметры
 +
 
 +
9 - Need DAY parameter <DDMMYY> - Нужен параметр DAY
 +
 
 +
10 - Need Channel ID - Нужен ID канала
 +
 
 +
11 - Another client with your login was logged - Другой клиент вошел под Вашим логином
 +
 
 +
12 - Authentication error - Ошибка аутентификации
 +
 
 +
13 - Your packet was expired - Ваш пакет просрочен
 +
 
 +
14 - Unknown API function - Неизвестная функция API
 +
 
 +
15 - Archive is not available - Архив недоступен
 +
 
 +
16 - Need place to set - Необходимо установить в набор
 +
 
 +
17 - Need name of settings variable - Нужно название переменной установки
 +
 
 +
18 - Incorrect confirmation code - Неверный код подтверждения
 +
 
 +
19 - Current password is wrong - Текущий пароль неверен
 +
 
 +
20 - New password is wrong - Новый пароль неверен
 +
 
 +
21 - Need value (val) parameter - Необходим параметр val
 +
 
 +
22 - This value is not allowed - Это значение недопустимо
 +
 
 +
23 - Need parameter - Нужен параметр
 +
 
 +
24 - Need parameter <id> - Нужен параметр <id>
 +
 
 +
25 - Need parameter <fileid> - Нужен параметр < fileid >
 +
 
 +
26 - Need parameter <type> - Нужен параметр <type>
 +
 
 +
27 - Need parameter <query> - Нужен параметр <query>
 +
 
 +
28 - Need parameter <bitrate> - Нужен параметр < bitrate >
 +
 
 +
29 - Service is not available - Сервис недоступен
 +

 +
30 - Query limit exceeded - Исчерпан лимит запросов
 +
 
 +
31 - Rule already exist - Правило уже существует
 +
 
 +
32 - Need param ?cmd = hide_channel | show_channel | get_list - Нужен параметр ?cmd = hide_channel | show_channel | get_list
 +
 
 +
33 - Need param ?cmd = get_user_rates | set_user_rates - Нужен параметр ?cmd = get_user_rates | set_user_rates
 +
 
 +
34 - Bad rate value. Allow <show|hide|pass> - Неверное значение рейтинга
 +
 
 +
35 - Can’t find film - Невозможно найти фильм
 +
 
 +
36 - This film already added to favorite list - Этот фильм уже добавлен в список избранных
 +
 
 +
99 - System error - Ошибка системы
 +
 
 +
 
 +
== Технические характеристики потока вещания ==
 +
 
 +
''Транспорт'' - HTTP/TS, HTTP
 +
 
 +
''Видео'' - Кодек -   H264 - MPEG-4 AVC (part 10) (h264)
 +
 
 +
                Разрешение - 576x472, 720х576, 1280х720, 1920х1080
 +
 
 +
                Частота кадров - 25
 +
 
 +
''Аудио'' - Кодек -  MPEG AAC Audio (mp4a)
  
'''Установка настроек в функции vod_manage: cmd=set_user_rates'''
+
                Каналы - 1.0; 2.0; 2.1; 5.1
  
/vod_manage?cmd=set_user_rates&<blood|violence|obsence|porn|horror>=<show|pass|hide>&prot ect_code=<code>
+
                Частота дискретизации - 24000 Гц, 44100 Гц, 48000 Гц
Устанавливает режимы отображения контента по настройкам рейтинга.
+
  
Можно передать одновременно несколько параметров. Например:
 
  
/vod_manage?cmd=set_user_rates
+
== Ограничения ==
      &blood=pass
+
      &violence=hide
+
      &obsence=show
+
      &porn=pass
+
      &protect_code=<code>
+
  
Ответ запроса –пакет об успешном завершении команды или об ошибке.
+
Существует ограничение на 5 запроса в секунду для одной сессии. Это вынужденная мера, введенная для защиты системы от избыточных перегрузок. В случае превышения этого лимита возвращается стандартный ответ ошибки с кодом 31 (Query limit exceeded).

Текущая версия на 17:19, 20 мая 2022

Термины

Контент – видео/аудио или текстовая информация.

Сервис – программно-аппаратный комплекс предоставления доступа к IPTV как к услуге.

Клиент – приложение или устройство, получающее доступ к Сервису посредством учет- ной записи.

Абонент – физический пользователь сервиса SUNDUK.TV

Абонемент – учетная запись клиента. Логин и пароль цифровые – для удобства набора со стандартного пульта управления устройства (settopbox).

Сервер вещания – программно-аппаратный комплекс для организации трансляции потокового видео и радиосигнала.

Ссылка вещания – URL, по адресу которого сервер вещания транслирует контент.

Middleware – комплекс технологического программного обеспечения для авторизации и обеспечения взаимодействия между различными приложениями, системами, компонентами.

API – интерфейс Middleware для программного взаимодействия с клиентом.

Описание принципов работы с API

Провайдер транслирует видеопотоки телевизионных и радио каналов в сети Интернет через сеть своих серверов по протоколу HLS. Видео в формате H.264 и звук AAC/AC3 URL являются динамическими привязанными к конкретной сессии, с ограниченным сроком жизни (устаревающие). Для начала работы с сервисом необходима авторизация, при успехе которой, сервер выдаст ключ к сессии, ЭТОТ КЛЮЧ НЕОБХОДИМО УКАЗЫВАТЬ ПРИ КАЖДОМ ОБРАЩЕНИИ К СЕРВЕРУ. Указать ключ можно двумя способами - через cookies или URL Схема работы приложения:

1. Авторизация на сервере и скачивание настроек клиента /login

2. Получение программы передач (EPG), список каналов и группы каналов /channel_list

3. Когда абонент выбирает канал, нужно получить ссылку вещания для этого канала /get_url

4. Проигрывание полученного URL

5. По окончании передачи необходимо загрузить следующий EPG элемент /epg_current

6. Также можно загрузить EPG за весь день при просмотре программы за данный день, а также при выборе передачи из архива

Как использовать этот API

Вы можете использовать любой язык программирования при работе с данным API. Работа с API осуществляется по протоколу HTTP, обмен данными происходит в формате XML или JSON, Вам понадобятся эти библиотеки. В формате JSON удобнее работать с HASH массивами и мы рекомендуем этот формат. Запросив один раз, старайтесь кешировать у себя данные HASH, URL или EPG, пока они не устареют. Этим вы ускорите работу клиента, и не создадите лишнюю нагрузку на сервера

Все запросы к API происходят по протоколу http, и имеют следующий вид:

httр://iptv.sunduk.tv/api/<тип ответа>/<имя функции>?param1=value&param2=value...

<тип ответа> задает формат выходных данных. Данные могут быть типов: XML, JSON, JSONP

Примеры вызовов:

httр://iptv.sunduk.tv/api/xml/epg?cid=2&day=260212

httр://iptv.sunduk.tv/api/json/epg?cid=2&day=260212

httр://iptv.sunduk.tv/api/jsonp/epg?cid=2&day=260612&callback=process

Все возвращаемые сообщения имеют вид ассоциативного массива.

В случае ошибочного запроса API возвращает XML-пакет следующего содержания:

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <error>
    <message>ERROR_MESSAGE</message>
    <code>ERROR_CODE</code>
  </error>
  <servertime>SERVER_TIME</servertime>
</response>

message - сообщение об ошибке

code - код ошибки

servertime - время на сервере (формат unixtime)

Формат времени

Все данные, обозначающие дату и время, представлены в формате unixtime. Каждый ответ серве- ра имеет отпечаток времени сервера (для синхронизации) с тегом <servertime>

Cookie

Для идентификации и создания сессии используется стандартный механизм HTTP/COOKIE. При первом входе необходимо выполнение login. При корректном входе возвращается парамет- ры состояния, данные по клиенту и COOKIE, которые необходимо передавать при последующих запросах. В COOKIE хранится идентификатор сессии. Если запрос не содержит COOKIE, то это вызо- вет ошибку. Для корректного завершения сессии необходимо вызвать метод logout. COOKIE уста- навливается стандартным HTTP ответом, поэтому если клиент использует браузер или фреймворк, то COOKIE будут передаваться автоматически, в противном случае клиент должен позаботиться об сохранении ключа сессии. Также возможна передача параметров &<имя сессии>=<ключ сессии> через url. <Имя сессии> при этом необходимо брать из ответа пакета функции /login. Подобный метод из соображений без- опасности является не желательным, ровно как и передача login методом GET. Рекомендуем ис- пользовать HTTPS (безопасное шифрованное соединение через SSL) для авторизации.

Функции API

login

Функция выполняет авторизацию клиента.

Вызов:

/login?login=<login>&pass=<password>[&device=<device_name>[&device_id=<device_id>]]

Входные параметры:

login - номер абонемента, выданный абоненту

pass - пароль абонемента

device - Задает группу устройств при работе с настройками. Принимает значение, заданное для данного устройства по договоренности (например: mag, dunehd, lg_smart_tv)

device_id - Задает конкретное устройство из указанной группы при работе с настройками. Принимает значение, уникальное для устройства из данной группы (например: мак-адрес, серийный номер, ключ HDCP)

Пример ответа по запросу /login?login=1234567&pass=1234567&device=dunehd&device_id=f21g3b17a3:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <sid>1875BCF912FE8ABF89ABF2E4FE</sid>
    <sid_name>TVAPI_SID</sid_name>
    <account>
        <login>000000</login>
        <packet_name>Sunduk.tv</packet_name>
        <packet_expire>1514584800</packet_expire>
    </account>
    <services>
        <vod>1</vod>
        <archive>1</archive>
    </services>
    <settings>
        <http_caching>
            <name>http_caching</name>
            <value>4000</value>
            <list>
                <item>1500</item>
                <item>3000</item>
                <item>5000</item>
                <item>8000</item>
                <item>150000</item>
            </list>
        </http_caching>
        <stream_server>
            <name>stream_server</name>
            <value>usatv1.sunduk.tv</value>
            <list>
                <item>
                    <ip>tv1.sunduk.tv</ip>
                    <descr>Europe 1</descr>
                </item>
                <item>
                    <ip>usatv1.sunduk.tv</ip>
                    <descr>USA 1</descr>
                </item>
            </list>
        </stream_server>
        <timeshift>
            <name>timeshift</name>
            <value>0</value>
            <list>
                <item>0</item>
                <item>1</item>
                <item>2</item>
                <item>3</item>
                <item>4</item>
                <item>5</item>
                <item>6</item>
                <item>7</item>
                <item>8</item>
                <item>9</item>
                <item>10</item>
                <item>11</item>
                <item>12</item>
            </list>
        </timeshift>
        <timezone>
            <name>timezone</name>
            <value>+2</value>
        </timezone>
        <bitrate>
            <name>bitrate</name>
            <value>Economy</value>
            <list>
                <item>Automatic</item>
                <item>Standart</item>
                <item>Economy</item>
            </list>
        </bitrate>
        <bitratehd>
            <name>bitratehd</name>
            <value>Automatic</value>
            <list>
                <item>Automatic</item>
                <item>Standart</item>
                <item>Economy</item>
            </list>
        </bitratehd>
        <archivebitratesd>
            <name>archivebitratesd</name>
            <value>Standart</value>
            <list>
                <item>Standart</item>
                <item>Economy</item>
            </list>
        </archivebitratesd>
        <archivebitratehd>
            <name>archivebitratehd</name>
            <value>Standart</value>
            <list>
                <item>Standart</item>
                <item>Economy</item>
            </list>
        </archivebitratehd>
    </settings>
    <servertime>1423845147</servertime>
</response>

Описание параметров из ответа:

sid - Идентификатор сессии

sid_name - Имя переменной идентификатора сессии

account -  Блок данных абонемента

login - Логин

packet_name -  Название пакета

packet_expire - Дата и время окончания абонемента

services - Блок флагов сервисов

vod - Флаг видеотеки. При установленном значении 1 абонементу доступна услуга «видеотека»

archive - Флаг архива. При установленном значении 1 абонементу доступна услуга «архив»

logout

Описание функции: выполняет отключение клиента от сервиса.

Вызов без параметров

/logout

Возвращает ответ вида:

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <message>M_LOGOUT_OK</message>
  <servertime>1407232800</servertime>
</response>

Описание параметров из ответа:

message - Сообщение об логауте

servertime - Время на сервере (в формате unixtime)

channel_list

Получение списка каналов.

Вызов:

/channel_list[?show=<base|all>[&protect_code=<пароль закрытых каналов>]]

В этом случае будет показан список всех каналов с дополнительным тегом <hide>0</hide>, который указывает скрыт ли канал в обычном режиме. В списке для каждого канала также имеется «таблица» возможных сочетаний bitrate и timeshift. Может сложиться ситуация, когда установленный системный bitrate в сочетании с timeshift не задан для некоторых каналов. В этом случае каналы не попадают в список /channel_list. Информация доступна в теге <stream_params>

Входные параметры:

show - (По умолчанию: base) Режим отображения списка каналов. all = показ всех каналов в т.ч. скрытых.

protect_code - Цифровой пароль для закрытых каналов. Обязательный параметр при show=all

Функция возвращает ответ вида:

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <groups>
    <item>
      <id>GROUP_ID</id>
      <name>GROUP_NAME</name>
      <color>CSS_CODE</color>
      <channels>
        <item>
          <id>CHANNEL ID</id>
          <name>CHANNEL_NAME</name>
          <stream_params>
            <item>
              <rate>BITRATE</rate>
              <ts> TIMESHIFT</ts>
            </item>
          </stream_params>
          <is_video>IS_VIDEO</is_video>
          <protected>PROTECTED</protected>
          <have_archive>HAVE_ARCHIVE</have_archive>
          <icon>ICON_PATH</icon>
          <epg_progname>EPG_PROGNAME</epg_progname>
          <epg_start>EPG_START</epg_start>
          <epg_end>EPG_STOP</epg_end>
          <ac3_audio>Bollean</ac3_audio>
</item>
        ...
      </channels>
    </item>
  </groups>
  <servertime>1407232800</servertime>
</response>

Описание параметров из ответа:

groups/item/id - идентификатор группы

groups/item/name - название группы

groups/item/color -  CSS код цвета группы

groups/item/channels/item/id - идентификатор канала

groups/item/channels/item/name -  название канала

groups/item/channels/item/stream_params - возможные параметры потоков

groups/item/channels/item/stream_params/item/rate - возможный битрейт канала. Устанавливается в настройках переменной bitrate

groups/item/channels/item/stream_params/ item/ts - таймшифт в часах. Например: значение 2 - задержка вещания на 2 часа. Получить url вещания возможно установив в настройках переменную timeshift

groups/item/channels/item/is_video -  флаг потокового видео 0/1 1-видео, 0-радио

groups/item/channels/item/need_bandwidth - рекомендуемый битрейт канала

groups/item/channels/item/protected - флаг “защиты канала по паролю” 0/1

groups/item/channels/item/have_archive - флаг “имеет ли канал архив” 0/1

groups/item/channels/item/icon -  относительный путь к файлу иконки канала

groups/item/channels/item/epg_progname - название текущей телепередачи

groups/item/channels/item/epg_start - дата и время начала текущей передачи

groups/item/channels/item/epg_stop - дата и время окончания текущей передачи

groups/item/channels/item/ac3_audio - Если канал транслируется с 5.1 звуком AC3 параметр true

Пример ответа по запросу /api/xml/channel_list

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <groups>
        <item>
            <id>7</id>
            <name>Общие</name>
            <color>#ff2200</color>
            <channels>
                <item>
                    <id>71</id>
                    <name>Первый</name>
                    <stream_params>
                        <item>
                            <rate>Automatic</rate>
                            <ts>0</ts>
                        </item>
                        <item>
                            <rate>Standart</rate>
                            <ts>0</ts>
                        </item>
                        <item>
                            <rate>Economy</rate>
                            <ts>0</ts>
                        </item>
                    </stream_params>
                    <is_video>1</is_video>
                    <need_bandwidth>2500</need_bandwidth>
                    <protected>0</protected>
                    <have_archive>1</have_archive>
                    <icon>/uploads/vddd2zziip.jpg</icon>
                    <epg_progname>"Человек и закон" с Алексеем Пимановым (12+)</epg_progname>
                    <epg_start>1423842300</epg_start>
                    <epg_end>1423846200</epg_end>
                    <hide>0</hide>
                    <ac3_audio>0</ac3_audio>
                </item>
                <item>
                    <id>112</id>
                    <name>Первый HD</name>
                    <stream_params>
                        <item>
                            <rate>Automatic</rate>
                            <ts>0</ts>
                        </item>
                        <item>
                            <rate>Standart</rate>
                            <ts>0</ts>
                        </item>
                        <item>
                            <rate>Economy</rate>
                            <ts>0</ts>
                        </item>
                    </stream_params>
                    <is_video>1</is_video>
                    <need_bandwidth>2500</need_bandwidth>
                    <protected>0</protected>
                    <have_archive>1</have_archive>
                    <icon>/uploads/ept2dfsoxd.jpg</icon>
                    <epg_progname>"Человек и закон" с Алексеем Пимановым (12+)</epg_progname>
                    <epg_start>1423842300</epg_start>
                    <epg_end>1423846200</epg_end>
                    <hide>0</hide>
                    <ac3_audio>0</ac3_audio>
                </item>
          
            </channels>
        </item>
    </groups>
    <servertime>1423845361</servertime>
</response>

channel_last

Получение id последнего просматриваемого канала, если последний канал не найдет отдается значение 0.

Вызов:

/channel_last

Возвращает ответ вида:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <channel>
        <id>71</id>
    </channel>
    <servertime>1425410393</servertime>
</response>

</response>

get_url

Получение ссылки вещания на заданный канал.

Вызов:

/get_url?cid=<ИД канала>[&gmt=<дата время позиции архива>][&stream_protocol=<hls|hds|mpegts|embeded|rtsp>][&protect_code=<пароль для закрытых каналов>]

Входные параметры:

cid - Идентификатор канала, полученный из функции channel_list

gmt - Используется в качестве начального момента для получения потока из архива. В формате unixtime

stream_protocol - (По умолчанию: hls) В каком протоколе вещания вы хотите получить ссылку. Возможные протоколы: hls, hds, mpegts, embeded, rtsp

protect_code - Цифровой пароль для закрытых каналов. Если канал закрыт, а пароль не передан, либо передан неверный пароль, то в тэге <url> возвращается слово "protected".

Архив. Сервисом организована запись некоторых телеканалов сроком до 14 дней для дальнейшего вещания по требованию. Каналы имеющие архивную запись помечены флагом have_archive в списке каналов. Доступ к записанным данным возможен через указание параметра gmt для функции get_url, где указано время в формате unixtime.

Возвращает ответ вида:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <url>http://usatv1.sunduk.tv:8080/C515/index.m3u8?token=83f801c99e7e5a79e020742b :http-caching=8000 :no-http-reconnect
    </url>
    <servertime>1423845671</servertime>
</response>

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

Набор функций для работы с EPG

Телевизионная программа передач (EPG) требует особого подхода к реализации и понимания происходящих процессов. Генерация EPG на стороне сервера достаточно трудоемкий процесс и сопряжен с опасностью перегрузки системы при неправильной реализации. Каждый разработчик желает чтобы его приложение максимально быстро отвечало требованиям пользователя, но эти требования не всегда оправданы. Мы рекомендуем разработчикам использовать механизм ке- ширования данных EPG на сколько это возможно. Время жизни cache в этом случае целесообразно будет устанавливать в 3 часа. Это оптимальное значение. Особого смысла загружать ВЕСЬ EPG нет, поскольку данные не всегда будут востребованы. Идеальным вариантом был бы механизм фоновой подгрузки EPG основанный на событии окончания телепрограммы. Другими словами, при окончении телепередачи следует загружать данные о следующей телепередачи (или о не- скольких). Для реализации этого меанизма была разработана функция /epg_current. Просьба обратить внимание на тот факт, что многие пользователи привыкли к так называемому сёрфингу каналов – простое перелистывание с канала на канал не особо вчитываясь в содержимое EPG. Или же путем «пробежки» по каналам выбирать нужный им канал. В этом случае не стоит немедленно подгружать EPG по событию перехода на канал, а выдержать паузу 0.6 секунды (значение было выявлено эмпирически).

epg

Получение программы передач для заданного канала на период времени с gmt по.

Вызов:

/epg?cid=<идентификатор канала>&day=<дата формата DDMMYY>

Входные параметры для функции:

cid - Идентификатор канала, полученный из функции channel_list

day - Дата формата DDMMYY. День за который будет возвращена телепрограмма

gmt - Время unixtime. Начало периода длительностью в одни сутки, для которого будет возвращена телепрограмма. (В дальнейшем будет использоваться вместо параметра day. На данный момент не реализовано на стороне API, но требуется реализация на стороне клиента)


Возвращает ответ вида:

<?xml version="1.0" encoding="UTF-8"?>
<response>
<epg> <item>
      <ut_start>UT_START</ut_start>
      <progname>PROG_NAME</progname>
    </item>
... </epg>
  <servertime>SERVER_TIME</servertime>
</response>

Описание параметров ответа:

ut_start - Дата и время начала передачи в формате unixtime

progname - Название передачи

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

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <epg>
        <item>
            <ut_start>1420065300</ut_start>
            <progname>В дебрях Африки (Сахара) (12+)</progname>
            <pdescr/>
        </item>
        <item>
            <ut_start>1420068300</ut_start>
            <progname>Живая природа (Слониха по имени Эхо - заключительная глава) (12+)</progname>
            <pdescr/>
        </item>
 </epg>
    <servertime>1423846518</servertime>
</response>

epg_next - depricated

Возвращает EPG на текущее время и на 3 последующих телепередачи канала с заданным ID.

Вызов:

/epg_next?cid=<id канала>

Входные параметры:

cid - Идентификатор канала, полученный из функции channel_list

Возвращает ответ вида:

<?xml version="1.0" encoding="UTF-8"?>
<response>
<epg>
  <item>
    <ts>TS</ts>
    <progname>PROGNAME </progname>
</item>
  </epg>
<servertime>SERVERTIME</servertime>
</response>

Описание параметров ответа:

ts - Дата и время начала передачи в формате Unixtime

progname - Название передачи

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

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <epg>
        <item>
            <ts>1423847100</ts>
            <progname>Дома на деревьях (Вид с высоты - 2) (12+)</progname>
            <pdescr/>
        </item>
        <item>
            <ts>1423850400</ts>
            <progname>Доминик Монаган и дикие существа (Серия 6) (12+)</progname>
            <pdescr/>
        </item>
        <item>
            <ts>1423853700</ts>
            <progname>Укротители аллигаторов (Аллигаторы обезумели) (12+)</progname>
            <pdescr/>
        </item>
    </epg>
    <servertime>1423846756</servertime>
</response>

epg_current

Для вывода данных о текущем EPG нескольких каналов. Реализована для динамичной подгрузки данных EPG. Содержит время начала и конца передачи

Вызов:

/epg_current?cids=<id1>[,<id3>[,<id3>[,...]]][&epg=<length>]

Входные параметры:

cids - Идентификатор канала(-ов), полученный из функции channel_list

epg - Количество передач, которые будут возвращены для указанных каналов, начиная с текущей

Ответ функции:

<?xml version="1.0" encoding="UTF-8"?>
<response>
<epg>
  <item>
    <cid>CID</cid>
    <epg>
      <epg_progname>EPG_PROGRAM </epg_progname>
      <epg_start>EPG_START</epg_start>
      <epg_end>EPG_STOP</epg_end>
    </epg>
  </item>
</epg>
<servertime>SERVERTIME</servertime>
</response>

Описание параметров вответа

cid - Идентификатор канала

epg_progname - Название передачи

epg_start - Дата и время начала передачи в формате unixtime

epg_end - Время окончания передачи в формате unixtime

Пример вызова: /epg_current?cids=2,5,7

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <epg>
        <item>
            <cid>155</cid>
            <epg>
                <epg_progname>Гангстеры дикой природы (Буйволы) (12+)</epg_progname>
                <epg_start>1423843800</epg_start>
                <epg_end>1423847100</epg_end>
            </epg>
        </item>
    </epg>
    <servertime>1423846855</servertime>
</response>


При установленном параметре epg=3

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <epg>
        <item>
            <cid>155</cid>
            <epg>
                <epg_progname>Гангстеры дикой природы (Буйволы) (12+)</epg_progname>
                <epg_start>1423843800</epg_start>
                <epg_end>1423847100</epg_end>
            </epg>
            <epg>
                <epg_progname>Дома на деревьях (Вид с высоты - 2) (12+)</epg_progname>
                <epg_start>1423847100</epg_start>
                <epg_end>1423850400</epg_end>
            </epg>
            <epg>
                <epg_progname>Доминик Монаган и дикие существа (Серия 6) (12+)</epg_progname>
                <epg_start>1423850400</epg_start>
                <epg_end>1423853700</epg_end>
            </epg>
        </item>
    </epg>
    <servertime>1423846916</servertime>
</response>

Работа с "Любимыми каналами"

Набор функций был введен для совместимости со старым механизмом «любымих каналов». Идея состояла в том, что клиент мог бы запрограммировать свой пульт на 12 горячих кнопок для быст- рого доступа к любимым каналам. Как показала практика, идея себя не оправдала, поскольку ее реализация относится в большей мере к клиентской части и информация об выбранных клиентом каналах должна храниться на клиентском оборудовании.

favorites - deprecated

(Функция не обрабатывается на стороне API. Данный функционал должен быть на стороне клиента.)

Вызов любимых каналов. Организовано хранение 12 любимых каналов. Каждая ячейка именуется индексом place. В ней содержится идентификатор канала.

Вызов:

/favorites

Возвращает ответ вида:

<?xml version="1.0" encoding="UTF-8"?>
<response>
<favorites>
  <item>
       <place>PLACE</place>
       <channel_id>CHANNEL_ID</channel_id>
</item>
  </favorites>
<servertime>SERVERTIME</servertime>
</response>

Описание параметров ответа:

place - Номер ячейки

channel_id - Идентификатор канала

servertime - Время на сервере в формате unixtime

Пример:

<?xml version="1.0" encoding="UTF-8"?>
<response>
<favorites>
  <item>
       <place>2</place>
       <channel_id>2</channel_id>
  </item>
  <item>
       <place>8</place>
       <channel_id>3</channel_id>
  </item>
</favorites>
<servertime>1278944963</servertime>
</response>

favorites_set - deprecated

(Функция не обрабатывается на стороне API. Данный функционал должен быть на стороне клиента.)

Устанавливает в заданную ячейку любимый канал. Если установить cid=0, то канал удалится из списка любимых.

Вызов:

/favorites_set?place=<номер ячейки для хранения>&cid=<идентификатор канала>

Входные параметры:

place - Номер ячейки для хранения любимого канала

cid - Идентификатор канала, полученный из функции channel_list


Возвращает ответ вида:

(пакет сообщение об успешном выполнении либо пакет ошибки)

settings

Получение значения переменной настройки.

Вызов:

/settings?var=<http_caching|stream_server|timeshift|timezone|bitrate|bitratehd|archivebitratesd|archivebitratehd>

Если у переменной настройки есть список возможных значений, то они передаются в массиве с параметром list.

Входные параметры для функции:

var - ожидает передачи одного или нескольких параметров:

    http_caching     - время буферизации потока в миллисекундах

    stream_server    - IP сервера трансляции. Возможные значения передаются в массиве List

    timeshift        - смещение по времени. Возможные значения передаются в массиве List

    timezone         - часовой пояс. Возможные значения от -12 до +12

    bitrate          - Битрэйт для SD каналов

    bitratehd        - Битрэйт для HD каналов

    archivebitratesd - Битрэйт архива (VOD) SD каналов

    archivebitratehd - Битрэйт архива (VOD) HD каналов
    vod_bitrate - Битрэйт Видеотеки

Возвращает ответ вида:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <settings>
        <name>bitrate</name>
        <value>Economy</value>
        <list>
            <item>Automatic</item>
            <item>Standart</item>
            <item>Economy</item>
        </list>
    </settings>
    <servertime>1423851019</servertime>
</response>

Если у переменной настройки есть список возможных значений, то они передаются в массиве с параметром list.

settings_set

Установка значения переменной настройки.

Вызов:

/settings_set?var=<pcode|http_caching|stream_server|timeshift|timezone|bitrate>&val=<значение>

Входные параметры:

var ожидает передачи одного или нескольких параметров.

    http_caching     - время буферизации потока в миллисекундах
    stream_server    - IP сервера трансляции. Возможные значения передаются в массиве List
    timeshift        - смещение по времени. Возможные значения передаются в массиве List
    timezone         - часовой пояс. Возможные значения от -12 до +12
    bitrate          - Битрэйт для SD каналов
    bitratehd        - Битрэйт для HD каналов
    archivebitratesd - Битрэйт архива (DVR) SD каналов
    archivebitratehd - Битрэйт архива (DVR) HD каналов  
    vod_bitrate  - Битрэйт для объектов видеотеки
    pcode   - Смена кода родительского контроля Для изменения вместо параметра val необходимо передать следующий параметры:  old_code , new_code , confirm_code

Видеотека

«Видео по требованию» Video-on-demand (VOD). Возможность просмотра файлов в режиме online из каталога. Отдельный раздел для абонента, где представлен набор фильмов, разделенный по категориям, жанрам, рейтингам и т.п.

vod_types

Получение списка типов видео-обьектов для фильтрации.

Вызов:

/vod_types

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

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <types>
        <id>2</id>
        <name>Фильмы</name>
    </types>
    <types>
        <id>tvseries</id>
        <name>Сериалы</name>
    </types>
    <servertime>1425402443</servertime>
</response>

vod_years

Получение списка доступных значений фильтрации по годам.

Вызов:

/vod_years

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

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <years>
    <id>2018</id>
    <name>2018</name>
  </years>
  <years>
    <id>2017</id>
    <name>2017</name>
  </years>
.......
  <years>
    <id>1940</id>
    <name>1940</name>
  </years>
  <years>
    <id>1939</id>
    <name>1939</name>
  </years>
  <servertime>1525693369</servertime>
</response>


vod_kinopoisk

Получение списка доступных значений фильтрации по рейтингу Kinopoisk.

Вызов:

/vod_kinopoisk

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

<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<response>
  <kinopoisk>
    <id>9-10</id>
    <name>9-10</name>
  </kinopoisk>
  <kinopoisk>
    <id>8-9</id>
    <name>8-9</name>
  </kinopoisk>
.....
  <kinopoisk>
    <id>1-2</id>
    <name>1-2</name>
  </kinopoisk>
  <kinopoisk>
    <id>0-1</id>
    <name>0-1</name>
  </kinopoisk>
  <servertime>1525693688</servertime>
</response>

vod_imdb

Получение списка доступных значений фильтрации по рейтингу IMDB.

Вызов:

/vod_imdb

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

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <imdb>
    <id>9-10</id>
    <name>9-10</name>
  </imdb>
.....
  <imdb>
    <id>1-2</id>
    <name>1-2</name>
  </imdb>
  <imdb>
    <id>0-1</id>
    <name>0-1</name>
  </imdb>
  <servertime>1525693768</servertime>
</response>

vod_list

Получение списка фильмов из базы видеотеки. Фильмы выводятся в порядке, заданном параметром type.

Вызов:

/vod_list?[type=<best|last|text>[&query=<запрос>]][&page=<N>][&genre=<id_жанра>][&nums=<NN>][&vod_type=all|...>][&year[]=<Год>][&kinopoisk[]=<Оценка>][&imdb[]=<Оценка>]

Входные параметры для функции:

type - best - лучшие фильмы согласно рейтинга по просмотрам; last - тот же список фильмов но отсортирован по дате добавления в обратном порядке; text - поиск в базе по названию фильма. Строка для поиска в query

query - Строка для поиска. Работает, если установлен параметр type=text

page - Номер страницы списка. По умолчанию установлен 1-й номер страницы.

genre - id - фильтр по жанрам. Показывает фильмы только указанного жанра. Возможно перечисление выводимых жанров через знак `|`. Например: genre=205|206|215

genres_light - id - фильтр по жанрам. Показывает фильмы только указанного жанра из списка функции genre_ligth. Возможно перечисление выводимых жанров через знак `|`. Например: genres_light =205|206|215

nums -  Количество фильмов на страницу. По умолчанию: 20

vod_type - Тип видео записей для вывода all - все (значение по умолчанию all), остальные параметры фильтрации выбираются из функции vod_types

year[] -  Массив в который передаются значения фильтрации по годам (может содержать несколько значений)

kinopoisk[] -  Массив в который передаются значения фильтрации по оценкам Kinopoisk (может содержать несколько значений)

imdb[] -  Массив в который передаются значения фильтрации по оценкам IMDB (может содержать несколько значений)

Возвращает ответ вида:

<?xml version="1.0" encoding="UTF-8"?>
<response>
<type>TYPE</type>
<total>TOTAL</total>
<count>COUNT</count>
<page>PAGE</page>
<rows>
  <item>
       <id>ID</id>
       <dt_modify>DT_MODIFY</dt_modify>
       <name>NAME </name>
       <name_orig>NAME_ORIG</name_orig>
       <description>DESCRIPTION</description>
       <poster>POSTER</poster>
       <year>YEAR</year>
       <rate_imdb>RATE_IMDB</rate_imdb>
       <rate_kinopoisk>RATE_KINOPOISK</rate_kinopoisk>
       <rate_mpaa>RATE_MPAA</rate_mpaa>
       <country>COUNTRY</country>
       <genre_str>детектив</genre_str>
</item> ...
<rows>
</response>

Описание параметров ответа:

type - текущий тип запроса

total - всего записей, удовлетворяющих запросу

count -  количество на текущей странице

page - номер страницы

id -  идентификатор фильма (не файла для вещания!)

dt_modify - дата последней модификации (YYYY-MM-DD HH:MM:SS)

name -  название фильма

name_orig - оригинальное название фильма (если др.язык)

description -  описание фильма

poster - относительная ссылка на картинку постера. Относительно http://iptv.sunduk.tv/

year -  год выпуска фильма

rate_imdb - значение рейтинга IMDB

rate_kinopoisk - значение рейтинга kinopoisk.ru

rate_mpaa - значение рейтинга MPAA

country -  страна производства

genre_str - строка жанров (список жанров фильма собранный в строку и разделенные запятыми)


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

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <type>best</type>
    <total>17</total>
    <count>17</count>
    <page>1</page>
    <rows>
        <id>32</id>
        <dt_modify>2014-11-25 09:41:05</dt_modify>
        <dt_create>2014-11-25 09:41:15</dt_create>
        <name>Укрощение строптивого</name>
        <name_orig>Il Bisbetico Domato (The Taming of the Scoundrel)</name_orig>
        <description>
            <p>Категорически не приемлющий женское общество грубоватый фермер (Адриано Челентано) вполне счастлив и
                доволен своей холостяцкой жизнью. Но неожиданно появившаяся в его жизни героиня (Орнелла Мути) пытается
                изменить его взгляды на жизнь и очаровать его. Что же из этого получится … Картина с успехом
                прошла в прокате и по сей день пользуется заслуженной любовью зрителей.
            </p>
        </description>
        <poster>/uploads/d2d0f77ff2fdfedeff07cd2cb963eca0.jpg</poster>
        <year>1980</year>
        <rate_imdb>7.5</rate_imdb>
        <rate_kinopoisk>8.339</rate_kinopoisk>
        <country>Италия</country>
        <vis>on</vis>
        <video_data>
            <items>
                <format>tv</format>
                <nums>1</nums>
            </items>
            <items>
                <format>dvd</format>
                <nums>1</nums>
            </items>
            <items>
                <format>fullhd</format>
                <nums>1</nums>
            </items>
        </video_data>
        <genre_str>комедия</genre_str>
        <pass_protect/>
    </rows>
    <rows>
        <id>3</id>
        <dt_modify>2014-11-25 09:41:05</dt_modify>
        <dt_create>2014-11-25 09:41:15</dt_create>
        <name>Амазония</name>
        <name_orig>Amazonia</name_orig>
        <description>
            <p>Невероятно увлекательное путешествие по диким тропическим джунглям Амазонии вместе с капуцином Саи. Выжив
                в авиакатастрофе, маленькая обезьянка попадает в необычную среду и теперь должна сама заботиться о себе.
                Ведь новый мир дикой природы полон опасностей и ловушек. Что ее ждет и как она приспособится к жизни в
                дикой Амазонии?
            </p>
        </description>
        <poster>/uploads/ec4d3bc6a57395f37fd8e5e16f82f20a.jpg</poster>
        <year>2013</year>
        <rate_imdb>6.714</rate_imdb>
        <rate_kinopoisk>10</rate_kinopoisk>
        <country>Франция</country>
        <vis>on</vis>
        <video_data>
            <items>
                <format>tv</format>
                <nums>1</nums>
            </items>
            <items>
                <format>dvd</format>
                <nums>1</nums>
            </items>
            <items>
                <format>fullhd</format>
                <nums>1</nums>
            </items>
        </video_data>
        <genre_str>документальный, приключения</genre_str>
        <pass_protect/>
    </rows>
    <servertime>1423853587</servertime>
</response>

vod_list_kinopoisk

Получение списка фильмов из базы видеотеки. Фильмы выводятся в порядке, заданном параметром type.

Вызов:

/vod_list_kinopoisk?[type=<best|last|text>[&query=<запрос>]][&page=<N>][&genre=<id_жанра>][&nums=<NN>][&vod_type=all|...>][&year[]=<Год>][&kinopoisk[]=<Оценка>][&imdb[]=<Оценка>]

Входные параметры для функции:

type - best - лучшие фильмы согласно рейтинга по просмотрам; last - тот же список фильмов но отсортирован по дате добавления в обратном порядке; text - поиск в базе по названию фильма. Строка для поиска в query

query - Строка для поиска. Работает, если установлен параметр type=text

page - Номер страницы списка. По умолчанию установлен 1-й номер страницы.

genre - id - фильтр по жанрам. Показывает фильмы только указанного жанра. Возможно перечисление выводимых жанров через знак `|`. Например: genre=205|206|215

nums -  Количество фильмов на страницу. По умолчанию: 20

vod_type - Тип видео записей для вывода all - все (значение по умолчанию all), остальные параметры фильтрации выбираются из функции vod_types

year[] -  Массив в который передаются значения фильтрации по годам (может содержать несколько значений)

kinopoisk[] -  Массив в который передаются значения фильтрации по оценкам Kinopoisk (может содержать несколько значений)

imdb[] -  Массив в который передаются значения фильтрации по оценкам IMDB (может содержать несколько значений)

Возвращает ответ вида:

<?xml version="1.0" encoding="UTF-8"?>
<response>
<type>TYPE</type>
<total>TOTAL</total>
<count>COUNT</count>
<page>PAGE</page>
<rows>
  <item>
       <id>ID</id>
       <dt_modify>DT_MODIFY</dt_modify>
       <name>NAME </name>
       <name_orig>NAME_ORIG</name_orig>
       <description>DESCRIPTION</description>
       <poster>POSTER</poster>
       <year>YEAR</year>
       <rate_imdb>RATE_IMDB</rate_imdb>
       <rate_kinopoisk>RATE_KINOPOISK</rate_kinopoisk>
       <rate_mpaa>RATE_MPAA</rate_mpaa>
       <country>COUNTRY</country>
       <genre_str>детектив</genre_str>
</item> ...
<rows>
</response>

Описание параметров ответа:

type - текущий тип запроса

total - всего записей, удовлетворяющих запросу

count -  количество на текущей странице

page - номер страницы

id -  идентификатор фильма (не файла для вещания!)

dt_modify - дата последней модификации (YYYY-MM-DD HH:MM:SS)

name -  название фильма

name_orig - оригинальное название фильма (если др.язык)

description -  описание фильма

poster - относительная ссылка на картинку постера. Относительно http://iptv.sunduk.tv/

year -  год выпуска фильма

rate_imdb - значение рейтинга IMDB

rate_kinopoisk - значение рейтинга kinopoisk.ru

rate_mpaa - значение рейтинга MPAA

country -  страна производства

genre_str - строка жанров (список жанров фильма собранный в строку и разделенные запятыми)


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

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <type>best</type>
    <total>17</total>
    <count>17</count>
    <page>1</page>
    <rows>
        <id>32</id>
        <dt_modify>2014-11-25 09:41:05</dt_modify>
        <dt_create>2014-11-25 09:41:15</dt_create>
        <name>Укрощение строптивого</name>
        <name_orig>Il Bisbetico Domato (The Taming of the Scoundrel)</name_orig>
        <description>
            <p>Категорически не приемлющий женское общество грубоватый фермер (Адриано Челентано) вполне счастлив и
                доволен своей холостяцкой жизнью. Но неожиданно появившаяся в его жизни героиня (Орнелла Мути) пытается
                изменить его взгляды на жизнь и очаровать его. Что же из этого получится … Картина с успехом
                прошла в прокате и по сей день пользуется заслуженной любовью зрителей.
            </p>
        </description>
        <poster>/uploads/d2d0f77ff2fdfedeff07cd2cb963eca0.jpg</poster>
        <year>1980</year>
        <rate_imdb>7.5</rate_imdb>
        <rate_kinopoisk>8.339</rate_kinopoisk>
        <country>Италия</country>
        <vis>on</vis>
        <video_data>
            <items>
                <format>tv</format>
                <nums>1</nums>
            </items>
            <items>
                <format>dvd</format>
                <nums>1</nums>
            </items>
            <items>
                <format>fullhd</format>
                <nums>1</nums>
            </items>
        </video_data>
        <genre_str>комедия</genre_str>
        <pass_protect/>
    </rows>
    <rows>
        <id>3</id>
        <dt_modify>2014-11-25 09:41:05</dt_modify>
        <dt_create>2014-11-25 09:41:15</dt_create>
        <name>Амазония</name>
        <name_orig>Amazonia</name_orig>
        <description>
            <p>Невероятно увлекательное путешествие по диким тропическим джунглям Амазонии вместе с капуцином Саи. Выжив
                в авиакатастрофе, маленькая обезьянка попадает в необычную среду и теперь должна сама заботиться о себе.
                Ведь новый мир дикой природы полон опасностей и ловушек. Что ее ждет и как она приспособится к жизни в
                дикой Амазонии?
            </p>
        </description>
        <poster>/uploads/ec4d3bc6a57395f37fd8e5e16f82f20a.jpg</poster>
        <year>2013</year>
        <rate_imdb>6.714</rate_imdb>
        <rate_kinopoisk>10</rate_kinopoisk>
        <country>Франция</country>
        <vis>on</vis>
        <video_data>
            <items>
                <format>tv</format>
                <nums>1</nums>
            </items>
            <items>
                <format>dvd</format>
                <nums>1</nums>
            </items>
            <items>
                <format>fullhd</format>
                <nums>1</nums>
            </items>
        </video_data>
        <genre_str>документальный, приключения</genre_str>
        <pass_protect/>
    </rows>
    <servertime>1423853587</servertime>
</response>

vod_info

Получение полной информации о фильме.

Вызов:

/vod_info?id=<id фильма>[&protect_code=<родительский пароль>]

Входные параметры для функции:

id - идентификатор фильма, полученный из функции vod_list

protect_code - родительский пароль, если фильм защищен протекцией от детей

Возвращает ответ вида:

<?xml version="1.0" encoding="UTF-8"?>
<response>
<film>
  <id>ID</id>
  <name>NAME</name>
  <name_orig>NAME_ORIG</name_orig>
  <description>DESCRIPTION</description>
  <poster>POSTER</poster>
  <length>LENGTH</length>
  <genre_str>GENRE_STR</genre_str>
  <year>YEAR</year>
  <director>DIRECTOR</director>
  <scenario>SCENARIO</scenario>
  <actors>ACTORS</actors>
 <rate_imdb>RATE_IMDB</rate_imdb>
 <rate_kinopoisk>RATE_KINOPOISK</rate_kinopoisk>
 <rate_mpaa>RATE_MPAA</rate_mpaa>
 <country>COUNTRY</country>
 <studio>STUDIO</studio>
 <awards>AWARDS</awards>
 <budget>BUDGET</budget>
 <images>IMAGES</images>
 <videos>
       <item>
         <id>ID</id>
         <title>TITLE</title>
         <format>fullhd</format>
         <url>URL</url>
         <size>SIZE</size>
         <length>LENGTH</length>
         <codec>CODEC</codec>
         <width>WIDTH</width>
         <height>HEIGTH</height>
         <track1_codec>TRACK1_CODEC</track1_codec>
         <track1_lang>TRACK1_LANG</track1_lang>
         <track2_codec>TRACK2_CODEC</track2_codec>
         <track2_lang>TRACK2_LANG</track2_lang>
         <track3_codec>TRACK3_CODEC</track3_codec>
         <track4_lang>TRACK3_LANG</track3_lang>
       </item>
  </videos>
  <genres>
       <item>
<id>ID</id>
         <name>NAME</name>
       </item>
  </genres>
</film>
<servertime>SERVERTIME</servertime>
</response>

Описание параметров ответа:

id - идентификатор фильма, полученный из функции vod_list

name -  название фильма

name_orig - оригинальное название фильма (если др.язык)

description -  описание фильма

poster - относительная ссылка на картинку постера. Относительно http://iptv.sunduk.tv/

length - длина фильма в минутах

genre_str -  жанры фильма, разделенные запятыми

year - год выпуска

director - режиссер

scenario - сценарист

actors -  в ролях

rate_imdb - значение рейтинга IMDB

rate_kinopoisk - значение рейтинга kinopoisk.ru

rate_mpaa - значение рейтинга MPAA

country -  страна производства

studio - студия

awards -  награды

budget - бюджет

images -  скриншоты (если есть)

password_protect - 1 или 0 закрыт или открыт контет по родительскому паролю. Устанавливается функцией /vod_manage

videos - файлы фильма (серии)

videos/item/id - идентификатор файла

title -  название серии. Если фильм односерийный, поле может быть не задано

format - качество. economy|standart|hd|fullhd|3d (может быть перечислено несколько доступных форматов этого видео через запятую

url - имя файла (справочное, не используется.)

size - размер файла

codec - кодек

width -  ширина картинки

height - высота картинки

track1_codec - аудио кодек дорожки 1

track1_lang - язык звукового трека 1

track2_codec -  аудио кодек дорожки 2

track2_lang - язык звукового трека 2

track3_codec - аудио кодек дорожки 3

track4_lang - язык звукового трека 3

genres -   массив жанров фильма

genres/id - идентификатор жанра

genres/name - наименование жанра


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

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <film>
        <id>3</id>
        <name>Амазония</name>
        <name_orig>Amazonia</name_orig>
        <description>
            <p>Невероятно увлекательное путешествие по диким тропическим джунглям Амазонии вместе с капуцином Саи. Выжив
                в авиакатастрофе, маленькая обезьянка попадает в необычную среду и теперь должна сама заботиться о себе.
                Ведь новый мир дикой природы полон опасностей и ловушек. Что ее ждет и как она приспособится к жизни в
                дикой Амазонии?
            </p>
        </description>
        <poster>uploads/ec4d3bc6a57395f37fd8e5e16f82f20a.jpg</poster>
        <lenght>82.533833333333</lenght>
        <genre_str>документальный, приключения</genre_str>
        <year>2013</year>
        <director>Тьерри Рагоберт</director>
        <scenario/>
        <actors></actors>
        <rate_imdb>6.714</rate_imdb>
        <rate_kinopoisk>10</rate_kinopoisk>
        <rate_mpaa/>
        <country>Франция</country>
        <studio/>
        <awards/>
        <budget/>
        <images/>
        <videos>
          <item>
            <id>2</id>
            <title>fullhd</title>
            <format>fullhd</format>
            <url>http://tv1.sunduk.tv:1935/vod/vod/vod/00/00/00/00/02.mp4/playlist.m3u8</url>
            <size>3763174739</size>
            <lenght>82.533833333333</lenght>
            <codec>h264, ac3</codec>
            <width>1920</width>
            <height>1080</height>
            <track1_codec>aac</track1_codec>
          </item>
        </videos>
        <genres>
            <id>8</id>
            <name>документальный</name>
        </genres>
        <genres>
            <id>18</id>
            <name>приключения</name>
        </genres>
    </film>
    <servertime>1423854433</servertime>
</response>

vod_geturl

Получение ссылки для вещания потока видео.

Вызов:

/vod_geturl?fileid=<идентификатор файла>[&format=<vod_format>][&protect_code=<родительский пароль>]

Входные параметры:

fileid - идентификатор файла, полученный из функции vod_info

protect_code - родительский пароль. Используется только для контента с пометкой <password_protect>

format - Качество которое должно быть передано если значение не передано то используется наилучшее качество. Варианты формата видео использовать из функции vod_info


Возвращает ответ вида:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <url>http://tv1.sunduk.tv:1935/vod/vod/vod/00/00/00/00/03.mp4/playlist.m3u8</url>
    <servertime>1423854863</servertime>
</response>

vod_genres

Возвращает список жанров.

Вызов:

/vod_genres[?vod_type=<vod_type>]

Входные параметры:

vod_type - Тип видео записей для вывода all - все (значение по умолчанию all), остальные параметры фильтрации выбираются из функции vod_types

Внимание! Не рекомендуется делать статичную копию справочника, поскольку жанры могут изменяться и появляться по мере поступления новых фильмов.

Возвращает ответ вида:

<?xml version="1.0" encoding="UTF-8"?>
<response>
<genres>
       <id>ID</id>
       <name>NAME</name>
       ...
       <id>ID</id>
       <name>NAME</name>
</genres>
<servertime>SERVERTIME</servertime>
</response>

Описание параметров ответа:

id - id жанра

name - наименование жанра


Пример:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <genres>
        <id>3</id>
        <name>боевик</name>
    </genres>
    <genres>
        <id>6</id>
        <name>детектив</name>
    </genres>
    <genres>
        <id>8</id>
        <name>документальный</name>
    </genres>

    <servertime>1423855163</servertime>
</response>

vod_genres_lite

Возвращает список жанров в более сжатом виде. Ответ отличается только содержимым жанров

Вызов:

/vod_genres_lite[?vod_type=<vod_type>]

Входные параметры:

vod_type - Тип видео записей для вывода all - все (значение по умолчанию all), остальные параметры фильтрации выбираются из функции vod_types

Внимание! Не рекомендуется делать статичную копию справочника, поскольку жанры могут изменяться и появляться по мере поступления новых фильмов.

Возвращает ответ вида:

<?xml version="1.0" encoding="UTF-8"?>
<response>
<genres>
       <id>ID</id>
       <name>NAME</name>
       ...
       <id>ID</id>
       <name>NAME</name>
</genres>
<servertime>SERVERTIME</servertime>
</response>

Описание параметров ответа:

id - id жанра

name - наименование жанра


Пример:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <genres>
        <id>3</id>
        <name>боевик</name>
    </genres>
    <genres>
        <id>6</id>
        <name>детектив</name>
    </genres>
    <genres>
        <id>8</id>
        <name>документальный</name>
    </genres>

    <servertime>1423855163</servertime>
</response>

vod_genres_kinopoisk

Возвращает список жанров.

Вызов:

/vod_genres_kinopoisk[?vod_type=<vod_type>]

Входные параметры:

vod_type - Тип видео записей для вывода all - все (значение по умолчанию all), остальные параметры фильтрации выбираются из функции vod_types

Внимание! Не рекомендуется делать статичную копию справочника, поскольку жанры могут изменяться и появляться по мере поступления новых фильмов.

Возвращает ответ вида:

<?xml version="1.0" encoding="UTF-8"?>
<response>
<genres>
       <id>ID</id>
       <name>NAME</name>
       ...
       <id>ID</id>
       <name>NAME</name>
</genres>
<servertime>SERVERTIME</servertime>
</response>

Описание параметров ответа:

id - id жанра

name - наименование жанра


Пример:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <genres>
        <id>3</id>
        <name>боевик</name>
    </genres>
    <genres>
        <id>6</id>
        <name>детектив</name>
    </genres>
    <genres>
        <id>8</id>
        <name>документальный</name>
    </genres>

    <servertime>1423855163</servertime>
</response>

vod_favlist

Выводит список отобранных любимых фильмов

Вызов:

/vod_favlist

Формат ответа идентичен формату списка vod_list

vod_favadd

Добавление фильма с идентификатором id в список любимых фильмов.

Вызов:

/vod_favadd?id=<ID фильма>

vod_favsub

Удаление фильма с идентификатором id из списка любимых фильмов.

Вызов:

/vod_favsub?id=<ID фильма>

vod_rate

представить рейтинг фильма.

Вызов:

/vod_rate[?vodid=<vodid>&rate=<rate>]

Входные параметры:

vodid - идентификатор видео для оценки vodid

rate - значение ставки 1 - не понравился, 2 - Понравился

Возвращает ответ вида:

<?xml version="1.0" encoding="UTF-8"?>
<response>
<code>Ok</code>
<httpcode>NAME</httpcode>
<servertime>SERVERTIME</servertime>
</response>

Описание параметров ответа:

code - id жанра

httpcode - наименование жанра


Пример:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <code>Ok</code>
    <httpcode>200</httpcode>
    <servertime>1423855163</servertime>
</response>

speedtest

Чтобы вернуть список доступных серверов

Вызов:

/speedtest

Возвращает ответ вида:

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <status>true</status>
     <data>
        <servername>Europe North</servername>
        <server_ip>XXX.XXX.XXX.XXX</server_ip>
            <test_settings>
               <file_size></file_size>
               <file_url></file_url>
          </test_settings>
          <test_settings>
            <file_size>24262167</file_size>
           <file_url>https://XXX.XXX.XXX.XXX:7575/random2000x2000.jpg</file_url>
         </test_settings>
     </data>
</response>

Описание параметров ответа:

Server name - имя сервера

server ip - IP-адрес сервера

file size - имя файла в байтах

file url - URL-адрес файла


Пример:

<?xml version="1.0" encoding="UTF-8"?>
<response>
   <status>true</status>
     <data>
        <servername>Europe North</servername>
        <server_ip>XXX.XXX.XXX.XXX</server_ip>
            <test_settings>
               <file_size>1042592</file_size>
               <file_url>https://XXX.XXX.XXX.XXX:7575/1mb.jpg</file_url>
          </test_settings>
          <test_settings>
            <file_size>24262167</file_size>
           <file_url>https://XXX.XXX.XXX.XXX:7575/random2000x2000.jpg</file_url>
         </test_settings>
     </data>
</response>

vod_preview

Принимает значение: vodid - id фильма или сериала

Возвращает ссылки на трейлеры и постеры

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


<response>
<trailer>
<id>3571</id>
<url>
http://212.102.40.169:80/vteka/trailer/9.mp4/mono.m3u8?token=1-vod_e77c5d4baf994c1d8b8a88a521e4ea66
</url>
</trailer>
<posters_preview>
<url>
http://iptv.sunduk.tv/api/json/vod_preview_poster?vodid=3571
</url>
</posters_preview>
<servertime>1650917897</servertime>
</response>
</nowiki>

Коды ошибок

0 - Unknown error - Неизвестная ошибка

1 - Incorrect request - Неверный запрос

2 - Wrong login or password - Неправильный логин или пароль

3 - Access denied - Доступ запрещен

4 - Login incorrect - Неправильный логин

5 - Your contract is inactive - Ваш контракт неактивен

6 - Your contract is paused - Ваш контракт заморожен

7 - Channel not found or not allowed - Канал не найден или недоступен

8 - Error generate URL. Bad parameters - Ошибка генерации URL – заданы неверные параметры

9 - Need DAY parameter <DDMMYY> - Нужен параметр DAY

10 - Need Channel ID - Нужен ID канала

11 - Another client with your login was logged - Другой клиент вошел под Вашим логином

12 - Authentication error - Ошибка аутентификации

13 - Your packet was expired - Ваш пакет просрочен

14 - Unknown API function - Неизвестная функция API

15 - Archive is not available - Архив недоступен

16 - Need place to set - Необходимо установить в набор

17 - Need name of settings variable - Нужно название переменной установки

18 - Incorrect confirmation code - Неверный код подтверждения

19 - Current password is wrong - Текущий пароль неверен

20 - New password is wrong - Новый пароль неверен

21 - Need value (val) parameter - Необходим параметр val

22 - This value is not allowed - Это значение недопустимо

23 - Need parameter - Нужен параметр

24 - Need parameter <id> - Нужен параметр <id>

25 - Need parameter <fileid> - Нужен параметр < fileid >

26 - Need parameter <type> - Нужен параметр <type>

27 - Need parameter <query> - Нужен параметр <query>

28 - Need parameter <bitrate> - Нужен параметр < bitrate >

29 - Service is not available - Сервис недоступен  30 - Query limit exceeded - Исчерпан лимит запросов

31 - Rule already exist - Правило уже существует

32 - Need param ?cmd = hide_channel | show_channel | get_list - Нужен параметр ?cmd = hide_channel | show_channel | get_list

33 - Need param ?cmd = get_user_rates | set_user_rates - Нужен параметр ?cmd = get_user_rates | set_user_rates

34 - Bad rate value. Allow <show|hide|pass> - Неверное значение рейтинга

35 - Can’t find film - Невозможно найти фильм

36 - This film already added to favorite list - Этот фильм уже добавлен в список избранных

99 - System error - Ошибка системы


Технические характеристики потока вещания

Транспорт - HTTP/TS, HTTP

Видео - Кодек -  H264 - MPEG-4 AVC (part 10) (h264)

                Разрешение - 576x472, 720х576, 1280х720, 1920х1080
                Частота кадров - 25

Аудио - Кодек -  MPEG AAC Audio (mp4a)

                Каналы - 1.0; 2.0; 2.1; 5.1
                Частота дискретизации - 24000 Гц, 44100 Гц, 48000 Гц


Ограничения

Существует ограничение на 5 запроса в секунду для одной сессии. Это вынужденная мера, введенная для защиты системы от избыточных перегрузок. В случае превышения этого лимита возвращается стандартный ответ ошибки с кодом 31 (Query limit exceeded).