Перейти к основному содержимому

Каталог

Отлично! Дополнение установлено и работает. Теперь сделаем его полезным, добавив контент. Каталог — основа обнаружения контента в 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: добавили catalog
  • types: указали movie
  • catalogs: описали каталоги

Описание каталога:

  • id: уникальный идентификатор
  • type: должен соответствовать одному из types
  • name: отображаемое имя каталога

Структура каталога

Создайте папки:

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_id
  • tmdb_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
  • Доступны расширенные возможности, включая рекомендации и локализацию