Интеграция Амедиатека с Кинопоиск

Автоматическая синхронизация фильмов и сериалов с помощью API Кинопоиска в Амедиатеке

В этой статье мы разберём пошагово, как интегрировать сервис Амедиатека (система хранения и воспроизведения медиа‑контента) с платформой Кинопоиск․ Это позволит автоматически синхронизировать фильмы, сериалы и трейлеры, а также использовать API Кинопоиска для получения метаданных и рейтингов прямо в вашей медиа‑библиотеке․

Что понадобится

  • Аккаунт в Амедиатеке (https://amediateka․ru/)
  • Аккаунт в Кинопоиске (https://www․kinopoisk․ru/)
  • Ключ API Кинопоиска (Developer API)
  • Сервер или локальная машина с доступом к Интернету
  • Среда выполнения Python 3․8+ (для скриптов интеграции)
  • Библиотека requests и pydantic (установить через pip install requests pydantic)

Получение ключа API Кинопоиска

  1. Перейдите в раздел разработчиков Кинопоиска․
  2. Войдите под своим аккаунтом Кинопоиска․
  3. Нажмите «Создать приложение» и заполните форму:
    • Название приложения – «Амедиатека‑Кинопоиск»
    • Описание – «Интеграция метаданных»
    • Тип приложения – «Внутреннее» (если планируете использовать только из сети компании)․
  4. После создания вы получите API KEY․ Скопируйте его, он понадобится в скриптах․

Конфигурация Амедиатека

  1. Войдите в панель управления Амедиатекой․
  2. Перейдите в раздел Настройки → Интеграции → Экспорт/Импорт․
  3. Включите пункт Подключение к внешним сервисам и укажите URL вашего сервера, где будет размещён скрипт интеграции (например, https://myserver․ru/kinopoisk-sync)․
  4. Сохраните настройки․ Теперь Амедиатека будет посылать запросы к нашему эндпоинту при изменении контента․

Создание скрипта синхронизации (Python)

Ниже приведён минимальный пример, который:

  • Получает метаданные фильма из Кинопоиска по ID;
  • Сохраняет эти данные в локальный JSON‑файл (или в базу данных);
  • Отправляет ответ назад Амедиатеке․
# sync_kinopoisk․py
import os
import json
import requests
from datetime import datetime
from pydantic import BaseModel, ValidationError

API_KEY = os․getenv('KINOPISK_API_KEY') # ключ API Кинопоиска
BASE_URL = 'https://api․kinopoisk․ru/v3' # актуальный URL API

class MovieMeta(BaseModel):
 id: int
 title: str
 year: int
 rating: float
 genres: list[str]
 duration: int
 poster: str

def fetch_movie(kp_id: int) -> MovieMeta:
 """Запрос метаданных к фильму по ID Кинопоиска․"""
 url = f"{BASE_URL}/movie/{kp_id}"
 headers = {'X-API-KEY': API_KEY}
 resp = requests․get(url, headers=headers)
 resp․raise_for_status
 data = resp․json
 movie = MovieMeta(
 id=data['id'],
 title=data['name'],
 year=data['year'],
 rating=data['rating']['imdb'] or 0․0,
 genres=[g['name'] for g in data․get('genres', [])],
 duration=data․get('duration', 0),
 poster=data․get('poster', '')
 )
 return movie

def save_metadata(movie: MovieMeta, output_dir: str = 'metadata'):
 """Сохраняет метаданные в JSON‑файл․"""
 os․makedirs(output_dir, exist_ok=True)
 path = os․path․join(output_dir, f"{movie․id}․json")
 with open(path, 'w', encoding='utf-8') as f:
 json․dump(movie․dict, f, ensure_ascii=False, indent=2)

def main:
 # В примере ожидается, что Амедиатека отправит POST с JSON‑телом:
 # {"kp_id": 12345}
 import sys
 import json
 payload = json․loads(sys․stdin․read)
 kp_id = payload․get('kp_id')
 if not kp_id:
 raise ValueError('Не найден kp_id в запросе')
 movie = fetch_movie(kp_id)
 save_metadata(movie)
 # Возвращаем статус 200 OK
 print('{"status":"ok","movie_id":%d}' % movie․id)

if __name__ == "__main__":
 main

Как использовать:

  • Сохраните скрипт как sync_kinopoisk․py․
  • Установите переменную окружения KINOPISK_API_KEY со своим ключом․
  • Разместите скрипт на сервере, доступном из сети Амедиатеки (можно использовать gunicorn + nginx)․
  • Настройте в Амедиатеке URL http://yourserver․ru/sync_kinopoisk․py․

Тестирование интеграции

  1. В Амедиатеке создайте новый фильм или обновите существующий․
  2. Проверьте, что ваш скрипт получит запрос с kp_id и отобразится статус ok․
  3. Откройте каталог metadata, где должен появиться файл 12345․json с метаданными․
  4. Проверьте, что поля соответствуют данным из Кинопоиска (название, год, рейтинг и т․д․)․

Расширяем функциональность

В зависимости от ваших требований можно добавить:

  • Импорт метаданных в базу данных (PostgreSQL, SQLite)․
  • Обновление уже загруженных файлов (напр․, изменение названия фильма)․
  • Синхронизацию с другими сервисами (IMDb, TMDb)․
  • Отправку уведомлений в Slack/Telegram при ошибках․

Частые проблемы и решения

  • Ошибка 403 – Forbidden при запросе к API Кинопоиска: проверьте, что ключ API правильный и имеет права на чтение․
  • Неверный kp_id: убедитесь, что ID, который посылает Амедиатека, действительно существует в Кинопоиске․
  • Сервер недоступен: настройте nginx для проксирования запросов и включите HTTPS․
  • Блокировка IP: если лимиты API превышены, запросы будут блокироваться․ Используйте кэширование;

Подключение Амедиатеки к Кинопоиску – это простой, но мощный способ автоматически получать актуальные метаданные фильмов и сериалов, улучшая пользовательский опыт и облегчая работу с контентом․ Следуя шагам, описанным выше, вы сможете быстро настроить интеграцию и начать использовать данные Кинопоиска в своей медиа‑библиотеке․

Удачной интеграции!