Каталог
Отлично! Дополнение установлено и работает. Теперь сделаем его полезным, добавив контент. Каталог — основа обнаружения контента в EMET Surf.
Каталог — это коллекция контента по типам. Это как плейлист или библиотека: «Боевики», «Популярные сериалы» и т. п. Пользователи просматривают каталоги, чтобы найти, что посмотреть.
Типы контента
Перед созданием каталога определите, какие типы контента вы предоставляете. В приложении они отображаются по‑разному:
movie — фильмы
- Каждый фильм — один элемент
- Нет сезонов и эпизодов
- Потоки привязаны к фильму
series — сериалы и эпизодический контент
- Сезоны и эпизоды
- Каждый эпизод — отдельное видео
tv — прямые трансляции
- Реальное вещание
- Без длительности
Для начала используем фильмы — это проще.
Обновляем манифест
Чтобы добавить каталог, опишите его в манифесте:
{
"id": "my.first.emet.addon",
"version": "1.0.0",
"name": "Hello, World",
"description": "My first EMET Surf add-on",
"logo": "https://example.com/logo-256.png",
"resources": ["catalog"],
"types": ["movie"],
"catalogs": [
{"id": "movieCatalog", "type": "movie", "name": "Hello, Movies"}
]
}
Что поменялось:
resources: добавилиcatalogtypes: указалиmoviecatalogs: описали каталоги
Описание каталога:
id: уникальный идентификаторtype: должен соответствовать одному изtypesname: отображаемое имя каталога
Структура каталога
Создайте папки:
Windows:
mkdir catalog
mkdir catalog\movie
macOS/Linux:
mkdir -p catalog/movie
Структура:
my-emet-addon/
├── manifest.json
└── catalog/
└── movie/
└── movieCatalog.json
Имя файла должно совпад ать с id каталога.
Добавляем контент
Пример catalog/movie/movieCatalog.json:
{
"metas": [
{
"type": "movie",
"id": "tt0032138",
"name": "The Wizard of Oz",
"poster": "https://images.metahub.space/poster/medium/tt0032138/img",
"genres": ["Adventure", "Family", "Fantasy", "Musical"]
},
{
"type": "movie",
"id": "tt0017136",
"name": "Metropolis",
"poster": "https://images.metahub.space/poster/medium/tt0017136/img",
"genres": ["Drama", "Sci-Fi"]
}
]
}
Поля:
type: тип каталогаid: уникальный идентификатор (в примере — IMDb)name: заголовокposter: URL постера (квадрат ~300×300)genres: жанры
Дополнительные внешние ID:
{
"metas": [
{
"type": "movie",
"id": "tt0032138",
"name": "The Wizard of Oz",
"poster": "https://images.metahub.space/poster/medium/tt0032138/img",
"genres": ["Adventure", "Family", "Fantasy", "Musical"],
"imdb_id": "tt0032138",
"tmdb_id": "630"
}
]
}
Доступные внешние ID:
imdb_idtmdb_id
Продвинутые возможности
Типы каталогов:
{
"catalogs": [
{"id": "movieCatalog", "type": "movie", "name": "Hello, Movies", "resource": "catalog"},
{"id": "recommendations", "type": "movie", "name": "Recommended", "resource": "recommendation"},
{"id": "collections", "type": "movie", "name": "Collections", "resource": "collection"}
]
}
Локализованные названия:
{
"catalogs": [
{
"id": "movieCatalog",
"type": "movie",
"name": "Hello, Movies",
"localizedName": {"en": "Hello, Movies", "es": "Hola, Películas", "ru": "Привет, Фильмы"}
}
]
}
Фильтрация по жанрам через genreIds:
{
"catalogs": [
{"id": "action-movies", "type": "movie", "name": "Action Movies", "genreIds": [28, 12]},
{"id": "drama-series", "type": "series", "name": "Drama Series", "genreIds": [18, 80]}
]
}
Итоги
- Каталоги — коллекции контента по типам
- Обновите манифест, чтобы объявить поддержку каталогов
- Структура файлов:
catalog/type/catalogId.json - Обязательные поля:
type,id,name,poster,genres - Можно использовать внешние ID
- Доступны расширенные возможности, включая рекомендации и локализацию