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
) — trailer
ids
) — не добавляютсяtrailer,anime
begin
и 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
.