В этой статье мы разберём пошагово, как интегрировать сервис Амедиатека (система хранения и воспроизведения медиа‑контента) с платформой Кинопоиск․ Это позволит автоматически синхронизировать фильмы, сериалы и трейлеры, а также использовать API Кинопоиска для получения метаданных и рейтингов прямо в вашей медиа‑библиотеке․
Что понадобится
- Аккаунт в Амедиатеке (https://amediateka․ru/)
- Аккаунт в Кинопоиске (https://www․kinopoisk․ru/)
- Ключ API Кинопоиска (Developer API)
- Сервер или локальная машина с доступом к Интернету
- Среда выполнения Python 3․8+ (для скриптов интеграции)
- Библиотека
requestsиpydantic(установить черезpip install requests pydantic)
Получение ключа API Кинопоиска
- Перейдите в раздел разработчиков Кинопоиска․
- Войдите под своим аккаунтом Кинопоиска․
- Нажмите «Создать приложение» и заполните форму:
- Название приложения – «Амедиатека‑Кинопоиск»
- Описание – «Интеграция метаданных»
- Тип приложения – «Внутреннее» (если планируете использовать только из сети компании)․
- После создания вы получите API KEY․ Скопируйте его, он понадобится в скриптах․
Конфигурация Амедиатека
- Войдите в панель управления Амедиатекой․
- Перейдите в раздел Настройки → Интеграции → Экспорт/Импорт․
- Включите пункт Подключение к внешним сервисам и укажите URL вашего сервера, где будет размещён скрипт интеграции (например,
https://myserver․ru/kinopoisk-sync)․ - Сохраните настройки․ Теперь Амедиатека будет посылать запросы к нашему эндпоинту при изменении контента․
Создание скрипта синхронизации (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․
Тестирование интеграции
- В Амедиатеке создайте новый фильм или обновите существующий․
- Проверьте, что ваш скрипт получит запрос с
kp_idи отобразится статусok․ - Откройте каталог
metadata, где должен появиться файл12345․jsonс метаданными․ - Проверьте, что поля соответствуют данным из Кинопоиска (название, год, рейтинг и т․д․)․
Расширяем функциональность
В зависимости от ваших требований можно добавить:
- Импорт метаданных в базу данных (PostgreSQL, SQLite)․
- Обновление уже загруженных файлов (напр․, изменение названия фильма)․
- Синхронизацию с другими сервисами (IMDb, TMDb)․
- Отправку уведомлений в Slack/Telegram при ошибках․
Частые проблемы и решения
- Ошибка 403 – Forbidden при запросе к API Кинопоиска: проверьте, что ключ API правильный и имеет права на чтение․
- Неверный kp_id: убедитесь, что ID, который посылает Амедиатека, действительно существует в Кинопоиске․
- Сервер недоступен: настройте
nginxдля проксирования запросов и включите HTTPS․ - Блокировка IP: если лимиты API превышены, запросы будут блокироваться․ Используйте кэширование;
Подключение Амедиатеки к Кинопоиску – это простой, но мощный способ автоматически получать актуальные метаданные фильмов и сериалов, улучшая пользовательский опыт и облегчая работу с контентом․ Следуя шагам, описанным выше, вы сможете быстро настроить интеграцию и начать использовать данные Кинопоиска в своей медиа‑библиотеке․
Удачной интеграции!