Films API предназначено для взаимодействия с каталогом фильмов. API предоставляет возможность осуществлять поиск по каталогу, получать информацию о фильмах, существующих тегах, например: актеры, режиссеры, жанры и т.д.
В этом документе используются термины и определения, описанные в документах «О программных интерфейсах сервисов Инетры» и «Термины и определения».
Точка входа определяется Регистратурой.
Запросы формируются следующим образом:
http://<path_to_api>/<запрос>/?[параметры]
Где:
path_to_api — путь до 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 |
в случайном порядке | - |
Для указания сортировки необходимо передать идентификаторы сортировки, перечислив их через запятую (порядок важен), указав суффикс:
-a — сортировка в возрастающем порядке-d — сортировка в убывающем порядкеС помощью 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.
Замечания:
exclude_film[] может быть передан несколько разtag перечислены таги из списка tag_exclude, наличие их в последнем списке аннулируется.tag_exclude могут добавляться значения:
q) — trailerids) — не добавляютсяtrailer,animebegin и end отвечают за границы времени обновления выдаваемых афиш. Формат параметров может совпадать с форматом интерпретации дат в PHP.end совпадает c текущей датой, он автоматически выставляется на следующую дату. Таким образом, указав в параметрах begin и end одну и ту же дату, можно получить список афиш, обновленных за эту дату.ids, осуществляется выборка списка афиш с заданными идентификаторами. Идентификаторы передаются строкой, разделителем выступает символ ,. Сервер возвращает только афиши, чьи идентификаторы были найдены на сервере, а также подпавшие под действия фильтров, заданных остальными параметрами запроса, и ничего более. Если в качестве значения параметра ids указана пустая строка, должен вернуться пустой список.from_year, to_year, осуществляется выборка афиш по заданному диапазону годов выпусков фильмов, включая границы годов. Любой из параметров from_year, to_year взаимно исключает использование параметра year.age_filter, осуществляется выборка афиш с учетом возрастного ценза.ids и q взаимно исключают друг друга.published_before используется для фильтрации по времени публикации.similar — Получение списка похожих фильмовЗапрос: /list/similar/
Дополнительные параметры:
| параметр | cмысл | тип | по умолчанию |
|---|---|---|---|
limit |
количество результатов на странице | число | 48 |
ids |
фильмы, по которым выбираем | пусто |
Формат ответа: сообщение FilmsList.
Замечания:
ids представлен строкой из id искомых фильмов, соединенных знаком ,.recommended — Получение списка «рекомендованных» фильмовЗапрос: /list/recommended/
Дополнительные параметры:
| параметр | cмысл | тип | по умолчанию |
|---|---|---|---|
limit |
количество результатов на странице | число | 48 |
access_token |
токен клиента | пусто |
Формат ответа: сообщение FilmsList.
Замечания:
similar, под капотом он обращается к userData, получает список
последних просмотренных фильмов и ищет похожие.search — Поиск фильмов по ключевому слову (Устарело с версии 2.7)Запрос: /search/
Дополнительные параметры:
| параметр | cмысл | тип | по умолчанию |
|---|---|---|---|
q |
поисковая фраза | строка | пусто |
p |
номер страницы | число | пусто |
max |
количество результатов на странице | число | 24 |
sort |
сортировка по полю | пусто | |
tag |
таги, по которым выбираем | пусто | |
tag_any |
таги, по которым выбираем | пусто | |
tag_exclude |
таги, по которым выбираем | trailer |
Формат ответа: сообщение FilmsList.
Замечания:
film — Получение серий фильмаЗапрос: /film/<id>/
где:
<id> — идентификатор фильма.Дополнительные параметры:
| параметр | cмысл | тип | по умолчанию |
|---|---|---|---|
age_filter |
возраст пользователя | число | отсутствует |
published_before |
время публикации не позже | unix time | текущее время |
Формат ответа: сообщение FilmInfo.
При указании параметра запроса age_filter производится фильтрация афиш в связанных подборках по возрастному цензу (подборки «Похожее», «Смотри также»).
Параметр published_before используется для фильтрации по времени публикации.
upnext — Получение списка фильмов для непрерывного воспроизведенияЗапрос: /upnext/<id>/<series_id>
где:
<id> — идентификатор фильма.<series_id> — идентификатор серии сериала. Обязателен для сериаловДополнительные параметры:
| параметр | смысл | тип | по умолчанию |
|---|---|---|---|
age_filter |
возраст пользователя | число | отсутствует |
limit |
количество результатов на странице | число | 1 |
Формат ответа: сообщение UpnextList.
getfilmsfile — Получение списка фильмов для приложения PeerSayЗапрос: /getfilmsfile/
Формат ответа: CSV.
Файл содержит поля: идентификатор фильма, название, год выхода. В качестве разделителя полей используется точка с запятой «;». Текcтовые поля экранируются двойными кавычками.
При выполнении запроса сервер перенаправит клиента на ответ, заранее сформированный с учетом правил доступа к афишам.
message Tag {
optional uint32 Id = 1;
optional string Name = 2;
optional string Title = 3;
optional string URL = 4;
}
message TagsListItems {
repeated Tag Items = 1;
}
Замечания:
Id — численный идентификатор тагаName — строковый идентификатор тагаTitle — название тагаURL — адрес API, по которому можно получить список афиш с данным тагом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"];
}
Замечания:
Title — название серииMagnet — ссылка на файл в файлообменной сетиURL — HTTP–ссылка на файлSize — размер файла в байтахLength — продолжительность серии в секундах.Published — время публикации в формате ГГГГ-ММ-ДД ЧЧ:ММ:ССQuality — субъективное качество серии. Оценивается комплексно по ряду параметров (качество звука, озвучки, картинки)Number — порядковый номер серии в сезонеPictureQuality — качество изображения в серииImages — скриншоты к серии.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;
}
Замечания:
Id — идентификатор фильмаURL — адрес, по которому можно получить полную информацию о афише фильмаTitle — название фильмаDesc — описание фильмаUpdated — время последнего обновления афишиYear — год выхода фильмаPreview — URL до маленькой картинки о фильме (используется в списках)Poster — URL до постера фильма (используется на странице фильма)User — владелец афиши. В случае афиши от редакции значение не заполняетсяTags — таги: жанрыQuality — таги: качествоDirectors — таги: режиссерыActors — таги: актерыCountries — таги: страныRatings — рейтинги афиши:
Rating.Type — источник рейтингаRating.Title — имя источника рейтингаRating.Count — количество проголосовавшихRating.Max — максимальная оценкаRating.Rank — непосредственно оценкаRelatedFilms — информация о других сезонах данного сериалаSeeAlso — информация о похожих афишахItems — список серийTrailers — список трейлеровImages — скриншоты к фильму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"];
}
Замечания:
Id — идентификатор фильмаTitle — название фильмаDesc — описание фильмаUpdated — время последнего обновления афишиYear — год выхода фильмаPreview — URL до маленькой картинки о фильме (используется в списках)Poster — URL до постера фильма (используется на странице фильма)Items — информация о сериях:
Item.Title — название серииItem.Magnet — ссылка на файл серииItem.Size — размер серииItem.Length — длительность серииItem.Published — дата публикации серииItem.Quality — качество записи серииItem.Number — номер серииItem.PictureQuality — качество картинки серииImages — скриншоты к фильму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;
}
Замечания:
FilmsList.Page — текущая страницаFilmsList.PagesCount — количество страниц в выборкеFilmsList.Items — результаты выборкиFilmsList.Suggests — возможные альтернативы (указываются только для поиска)list добавлен фильтр по идентификаторам афиш.api-version помечен как устаревший;Id из сообщения FilmInfo.from_year, to_year для фильтрации списка фильмов по годам для метода list;age_filter для фильтрации списка афиш с учетом возрастного ценза.search помечен как устаревший;q в метод list, позволяющий осуществлять выборку по поисковой фразе с учетом дополнительных фильтров метода.age_filter в методе film для фильтрации связанных подборок по возрастному цензу.tag_exclude при выборке элементов по названию при помощи метода list.tag_exclude в методе list при выборке афиш по списку идентификаторов.getfilmsfile.list и film.similar и recommended.list.upnext.