Films API

Статус документа

Оглавление

Общее описание

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

Термины и определения

В этом документе используются термины и определения, описанные в документах «О программных интерфейсах сервисов Инетры» и «Термины и определения».

Взаимодействие с API

Точка входа определяется Регистратурой.

Запросы формируются следующим образом:

http://<path_to_api>/<запрос>/?[параметры]

Где:

Значения всех параметров необходимо кодировать для предотвращения неоднозначной интерпретации так, как это рекомендуется в RFC3986.

Все ответы отправляются в XML, все строчки указываются без HTML–форматирования.

Общие параметры

Общие параметры, доступные для каждого запроса:

параметр смысл возможные значения значение по умолчанию
api-version номер версии используемого API 1, 2 1 (устарело с версии 2.6.1)
device тип устройства, с которого производится запрос stb820, eltex-nv-101, eltex-nv101-mkv, samsung-tv-c stb820
device-version версия устройства любая строка пусто

В зависимости от оборудования, от которого поступил запрос, требуется возвращать различные списки фильмов. Так, к примеру, в версии R8 приставки stb820, невозможен просмотр фильмов размером более 2 гигабайт.

Задание списка тагов

Афиши на CN.ru может иметь несколько тагов (атрибутов). Следующие вещи являются тагами:

У тага есть имя и идентификатор.

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

Начиная с версии 2.5 API можно указывать следующие параметры:

Название фильтра Описание фильтра
tag Список будет содержать афиши, в которых присутствуют все перечисленные таги
tag_any Список будет содержать афиши, в которых присутствует хотя бы один из перечисленных тагов
tag_exclude Список будет содержать афиши, в которых отсутствуют все перечисленные таги

Например, чтобы получить список отечественных фильмов (не мультипликационных) возрастной категории 0+ надо передать фильтр: tag=for_all_age&tag_any=sssr,russia&tag_exclude=cartoon

Задание сортировки

Сортировка возможна по следующим критериям:

Идентификатор Поле для сортировки Как часто меняется
year год создания афиши никогда
published время публикации меняется при появлении новой серии сериала
title название афиши никогда
popularity среднее количество просмотров афиши в день каждый день
rating-cn оценка фильма на сайте «CN.ru» каждый день
rating-kinopoisk оценка фильма на сайте «Кинопоиск» примерно раз в неделю
rating-imdb оценка фильма на сайте «IMDB» примерно раз в неделю
random в случайном порядке -

Для указания сортировки необходимо передать идентификаторы сортировки, перечислив их через запятую (порядок важен), указав суффикс:

С помощью API нельзя задать одновременно более трех параметров сортировки.

Например, чтобы отсортировать список фильмов сначала по году выхода в возрастающем порядке, а внутри одного года выхода — по популярности в убывающем порядке, необходимо передать параметр sort=year-a,popularity-d

Фильтрация по времени публикации:

У редактора есть возможность запланировать публикацию афиши на определённое время. Время публикации конкретной серии внутри афиши задаётся автоматически и совпадает со временем её добавления. По умолчанию API выдаёт только те афиши и серии, время публикации которых уже наступило.

Для получения ещё не опубликованных афиш/серий используется параметр published_before. При его указании выдаются сущности, время публикации которых не позже заданного. Фильтрация применяется ко всем выборкам афиш/серий, которые делает данный метод API. Время задаётся целым числом в виде unix time.

Методы

tags — Получение списка тагов

Запрос: /tags/

Дополнительные параметры: отсутствуют.

Формат ответа: сообщение TagsListItems.

list — Получение списка фильмов

Запрос: /list/

Дополнительные параметры:

параметр cмысл тип по умолчанию
p номер страницы число 1
q поисковая фраза строка пусто
exclude_film[] исключаемые афиши из выдачи число пусто
begin время обновления афиши не раньше ГГГГ-ММ-ДД пусто
end время обновления афиши не позже ГГГГ-ММ-ДД now
ids идентификаторы выбираемых фильмов строка отсутствует
age_filter возраст пользователя число отсутствует
published_before время публикации не позже unix time текущее время
Фильтрация по тагам
tag таги, по которым выбираем пусто
tag_any таги, по которым выбираем пусто
tag_exclude таги, по которым выбираем см. замечания
Фильтрация по годам выпуска
year год выпуска число пусто
from_year с заданного года выпуска (включая) число пусто
to_year до заданного года выпуска (включая) число пусто
Сортировка
sort сортировка по полю published-d

Формат ответа: сообщение FilmsList.

Замечания:

similar — Получение списка похожих фильмов

Запрос: /list/similar/

Дополнительные параметры:

параметр cмысл тип по умолчанию
limit количество результатов на странице число 48
ids фильмы, по которым выбираем пусто

Формат ответа: сообщение FilmsList.

Замечания:

Запрос: /list/recommended/

Дополнительные параметры:

параметр cмысл тип по умолчанию
limit количество результатов на странице число 48
access_token токен клиента пусто

Формат ответа: сообщение FilmsList.

Замечания:

search — Поиск фильмов по ключевому слову (Устарело с версии 2.7)

Запрос: /search/

Дополнительные параметры:

параметр cмысл тип по умолчанию
q поисковая фраза строка пусто
p номер страницы число пусто
max количество результатов на странице число 24
sort сортировка по полю пусто
tag таги, по которым выбираем пусто
tag_any таги, по которым выбираем пусто
tag_exclude таги, по которым выбираем trailer

Формат ответа: сообщение FilmsList.

Замечания:

film — Получение серий фильма

Запрос: /film/<id>/

где:

Дополнительные параметры:

параметр cмысл тип по умолчанию
age_filter возраст пользователя число отсутствует
published_before время публикации не позже unix time текущее время

Формат ответа: сообщение FilmInfo.

При указании параметра запроса age_filter производится фильтрация афиш в связанных подборках по возрастному цензу (подборки «Похожее», «Смотри также»). Параметр published_before используется для фильтрации по времени публикации.

upnext — Получение списка фильмов для непрерывного воспроизведения

Запрос: /upnext/<id>/<series_id>

где:

Дополнительные параметры:

параметр смысл тип по умолчанию
age_filter возраст пользователя число отсутствует
limit количество результатов на странице число 1

Формат ответа: сообщение UpnextList.

getfilmsfile — Получение списка фильмов для приложения PeerSay

Запрос: /getfilmsfile/

Формат ответа: CSV.

Файл содержит поля: идентификатор фильма, название, год выхода. В качестве разделителя полей используется точка с запятой «;». Текcтовые поля экранируются двойными кавычками.

При выполнении запроса сервер перенаправит клиента на ответ, заранее сформированный с учетом правил доступа к афишам.

Форматы сообщений

Tag — информация о таге

message Tag {
  optional uint32 Id = 1;
  optional string Name = 2;
  optional string Title = 3;
  optional string URL = 4;
}

message TagsListItems {
  repeated Tag Items = 1;
}

Замечания:

Serie — информация о серии

message Serie {
  optional string Title = 1;
  optional string Magnet = 2;
  optional string URL = 3;
  optional uint32 Size = 4;
  optional uint32 Length = 5;
  optional string Published = 6;
  optional uint32 Quality = 7;
  optional uint32 Number = 8;
  enum PictureQualityEnum {
    SD = 0 [(CN.string_value) = "SD"];
    HD = 1 [(CN.string_value) = "HD"];
    3D = 2 [(CN.string_value) = "3D"];
  }
  optional PictureQualityEnum PictureQuality = 9;
  repeated string Images = 10 [(CN.child_names) = "Image"];
}

Замечания:

FilmsList — список фильмов

message FilmInfo {
  optional string URL = 1;
  optional string Title = 2;
  optional string Desc = 3;
  optional string Updated = 4;
  optional uint32 Year = 5;
  optional string Preview = 6;
  optional string Poster = 7;
  optional string User = 8;

  repeated Tag Tags = 9 [(CN.child_names) = "Tag"];
  repeated Tag Quality = 10 [(CN.child_names) = "Tag"];
  repeated Tag Directors = 11 [(CN.child_names) = "Director"];
  repeated Tag Actors = 12 [(CN.child_names) = "Actor"];
  repeated Tag Countries = 13 [(CN.child_names) = "Country"];

  message Rating {
    enum RatingType {
      CN = 0 [(CN.string_value) = "cn"];
      KINOPOISK = 1 [(CN.string_value) = "kinopoisk"];
      IMDB = 2 [(CN.string_value) = "imdb"];
    }
    optional RatingType Type = 1;
    optional string Title = 2;
    optional uint32 Count = 3;
    optional float Max = 4;
    optional float Rank = 5;
  }
  repeated Rating Ratings = 14;
  repeated FilmInfo RelatedFilms = 15 [(CN.child_names) = "RelatedFilm"];
  repeated FilmInfo SeeAlso = 16 [(CN.child_names) = "Item"];

  repeated Serie Items = 17 [(CN.child_names) = "Item"];
  repeated Serie Trailers = 18 [(CN.child_names) = "Trailer"];

  repeated string Images = 19 [(CN.child_names) = "Image"];
  optional uint64 Id = 20;
}

Замечания:

UpnextList — список фильмов для непрерывного воспроизведения

message UpnextFilm {
  optional uint64 Id = 1;
  optional string Title = 2;
  optional string Desc = 3;
  optional string Updated = 4;
  optional uint32 Year = 5;
  optional string Preview = 6;
  optional string Poster = 7;

  message Item {
    optional string Title = 1;
    optional string Magnet = 2;
    optional uint64 Size = 3;
    optional uint32 Length = 4;
    optional string Published = 5;
    optional uint8 Quality = 6;
    optional uint32 Number = 7;
    optional string PictureQuality = 8;
  }
  repeated Items Item = 8;

  repeated string Images = 9 [(CN.child_names) = "Image"];
}

Замечания:

FilmsList, FilmAlone — список фильмов

message FilmsList {
  option (CN.root_name) = "Films";
  optional uint32 Page = 1;
  optional uint32 PagesCount = 2;
  repeated FilmInfo Items = 3 [(CN.child_names) = "Item"];
  repeated FilmInfo Suggests = 4 [(CN.child_name) = "Item"];
}

message FilmAlone {
  Iroot_name) = "Films";
  optional FilmInfo Film = 3;
}

Замечания:

История версий

Изменения в версии 2.1

Изменения в версии 2.2

Изменения в версии 2.3

Изменения в версии 2.4

Изменения в версии 2.5

Изменения в версии 2.5.1

Изменения в версии 2.6 (TVREC–307)

Изменения в версии 2.6.1

Изменения в версии 2.7 (TVREC–719, TVREC–718)

Изменения в версии 2.7.1

Изменения в версии 2.8 (TVREC–763)

Изменения в версии 2.8.1

Изменения в версии 2.9.0 (TVREC–876)

Изменения в версии 2.9.1 (WEBDEV–10087)

Изменения в версии 2.10 (WEBDEV–11173)

Изменения в версии 2.11

Изменения в версии 2.12