Документация API
Описание протокола взаимодействия сервисов IPTVPORTAL с внешними системами
Протокол IPTVPORTAL JSONSQL ver.0.3 (07.07.2013)
Основные сущности системы
subscriber — абонент iptvтелевидения
terminal — абонентское устройство для просмотра iptvтелевидения (стб, pcплеер)
media — медиа ресурс, доступный для просмотра на абонентском устройстве (твканал, видео по запросу, …)
service — медиа сервис (timeshift,youtube,ivi,…)
package — пакет медиа ресурсов (пакет каналов, …)
key — ключ условного доступа для закрытого медиа ресурса
playlist — список медиа ресурсов, отображаемый на абонентском устройстве (рубрикатор каналов, видео …)
profile — профиль абонента (родительский контроль, …)
pprofile — профиль плеера, позволяет разграничивать медиа ресурсы в зависимости от типа терминала (pc,stb,smarttv)
sprofile — системный профиль, позволяет разграничивать медиа ресурсы в зависимости от терминала или абонента
user — администратор системы
domain — настройки системы
Описание алгоритма работы терминала (STB, PC-плеер)
При включении терминал производит запрос аутентификации, в качестве аргументов посылаются МАК-адрес и IP-адрес терминала (при наличии также регистрационный идентификатор), в случае успеха возвращается идентификатор сессии, в случае ошибки поведение терминала определяется настройками системы.
В случае разрешения регистрации терминала (allow_terminal_reg), терминал посылает запрос регистрации.
Количество терминалов для одного абонента может быть ограничено на уровне системы (max_terminal_per_subscriber), а также на уровне абонента (max_terminal).
В настройках системы также предусмотрена возможность дерегистрации терминала (allow_terminal_unreg), позволяющая пользователю самостоятельно производить смену оборудования.
Существует возможность разрешения в системе анонимного пользователя (allow_anonymous), при этом анонимному пользователю будут доступны бесплатные медиа ресурсы (paid<>true).
Авторизованный терминал получает доступ к бесплатным медиа ресурсам (paid<>true), а также к платным ресурсам (paid=true), основываясь на данных приведенных на рисунке диаграммы классов.
Платный ресурс может иметь срок действия (expired_on).
Контроль срока действия может быть реализован выбором нужного периода обновления ключа условного доступа (update_period).
Протокол IPTVPORTAL JSONSQL
В качестве транспорта для протокола используется связка HTTPS и JSONRPC ( http://jsonrpc.org/wiki/specification ).
Функционально протокол реализует команды манипуляции данными DML языка SQL, точнее PostgreSQL диалекта ( http://www.postgresql.org/docs/8.4/interactive/index.html )
Реализованы основные команды SELECT, INSERT, UPDATE, DELETE. Название команды указывается в поле method JSONRPC
{
«jsonrpc» : «2.0»,
«id» : 1,
«method» : «select» | «insert» | «update» | «delete», «params» : {…}
}
SELECT — запрос выборки данных.
Формат команды
{
«distinct» : distinct_clause,
«data» : data_clause,
«from» : from_clause,
«where» : where_clause,
«group_by» : group_by_clause,
«order_by» : order_by_clause,
«limit» : limit_clause,
«offset» : offset_clause
}
Пример. Выборка каналов, отсортированных по названию.
{
«jsonrpc» : «2.0»,
«id» : 1,
«method» : «select»,
«params» : {
«data» : [«id», «name», «protocol»,»inet_addr»,»port»],
«from» : «media»,
«where» : {«is»: [«is_tv», true]},
«order_by» : «name»
}}
Пример. Выборка абонентов, отсортированных по имени логину.
{
«jsonrpc» : «2.0»,
«id» : 2,
«method» : «select»,
«params» : {
«data» : [«id», «username», «password»],
«from» : «subscriber»,
«order_by» : «username»
}}
INSERT - добавление новых данных.
Формат команды
{
«into» : table_clause,
«columns» : columns_clause,
«values» : values_clause,
«returning» : returning_clause
}
Пример. Добавление пакетов «movie», «sports».
{
«jsonrpc» : «2.0»,
«id» : 3,
«method» : «insert»,
«params» : {
«into» : «package»,
«columns» : [«name», «paid»],
«values» : [ [«movie», true], [«sports», true] ],
«returning» : «id»
}}
Пример. Добавление пакетов «movie», «sports» абоненту c именем аккаунта «12345».
{
«jsonrpc» : «2.0»,
«id» : 4,
«method» : «insert»,
«params» : {
«into» : «subscriber_package»,
«columns»: [«subscriber_id», «package_id», «enabled»],
«select» : {
«data»: [{«s»: «id»}, {«p»: «id»}, true], «from»: [
{ «table»: «subscriber», «as»: «s» },
{ «table»: «package», «as»: «p» }
],
«where»: {
«and»: [
{ «eq»: [{«s»: «username»}, «12345»]},
]
}
},
«in»: [{«p»: «name»}, «movie», «sports»]
«returning»: «package_id»
}}
UPDATE - обновление существующих данных.
Формат команды
{
«table» : table_clause,
«set» : set_clause,
«from» : from_clause,
«where» : where_clause,
«returning» : returning_clause
}
Пример. Отключение абонента c именем аккаунта «12345».
{
«jsonrpc» : «2.0»,
«id» : 2,
«method» : «update»,
«params» : {
«table» : «subscriber»,
«set» : {
«disabled»: true
},
«where»: {«eq»: [«username», «12345»]},
«returning»: «id»
}}
DELETE - удаление существующих данных.
Формат команды
{
«from» : from_clause,
«using» : using_clause,
«where» : where_clause,
«returning» : returning_clause
}
Пример. Удаление абонентских устройств абонента с именем аккаунта «test».
{
«jsonrpc» : «2.0»,
«id» : 2,
«method» : «delete»,
«params» : {
«from» : «terminal»,
«where» : {«in»: [«subscriber_id», {
«select» : {
«data» : «id»,
«from» : «subscriber»,
«where» : {«eq»: [«username», «test»]}
}
}]},
«returning»: «id»
}}
Пример. Удаление пакетов абонента с именем аккаунта «test».
{
«jsonrpc» : «2.0»,
«id» : 2,
«method» : «delete»,
«params» : {
«from»: «subscriber_package»,
«where»: {«in»: [«subscriber_id», {
«select»: {
«data»: «id»,
«from»: «subscriber»,
«where»: {«eq»: [«username», «test»]}
}
}]},
«returning»: «id»
}}
Функции и операции
Логические Операции
{«and»: [op1,op2…]} логическое умножение (И)
{«or»: [op1,op2…]} логическое сложение (ИЛИ)
{«not»: [op1]} логическое отрицание (НЕ) Операции Сравнения
{«is»: [op1,op2]}
{«is_not»: [op1,op2]}
{«eq»: [op1,op2]}
{«neq»: [op1,op2]}
{«lt»: [op1,op2]}
{«gt»: [op1,op2]}
{«lte»: [op1,op2]}
{«gte»: [op1,op2]}
Математические Операции
{«add»: [op1,op2…]} сложение
{«sub»: [op1,op2]} вычитание
{«mul»: [op1,op2…]} умножение
{«div»: [op1,op2]} деление
{«mod»: [op1,op2]} деление по модулю
Операторы соответствия
{«like»: [op1,op2…]}
{«ilike»: [op1,op2…]}
Выражения для подзапросов
{«in»}
{«not_in»}
Авторизация клиента:
Адрес API: https://domain.admin.iptvportal.ru/api/jsonsql/
где domain – выделенный оператору поддомен в IPTVPORTAL
Для работы по протоколу требуется добавлять HTTP заголовок: Iptvportal-Authorization: sessionid=sid
где sid идентификатор сессии, полученный при авторизации
Авторизация администратора:
Адрес авторизации: https://domain.admin.iptvportal.ru/api/jsonrpc/
где domain – выделенный оператору поддомен в IPTVPORTAL
Запрос авторизации:
{
«jsonrpc» : «2.0»,
«id» : 1,
«method» : «authorize_user», «params» : {
«username» : «admin», «password» : «adminpassword»
}}
В случае положительной авторизации:
{
«jsonrpc» : «2.0»,
«id» : 1,
«result» : { «session_id» : «sid»
}
В случае ошибки:
{
«jsonrpc» : «2.0»,
«id» : 1,
«error» : { «message» : «…»
}
Схема базы данных:
Примеры скриптов: http://ftp.iptvportal.cloud/doc/API/examples/