Разные задачи, разные инструменты

Trakt строится вокруг данных пользователя: история просмотров, списки к просмотру, оценки, календари и вход через OAuth. У него есть и публичные эндпоинты метаданных, а действующие лимиты указаны в его документации. У amodb одна задача: метаданные о фильмах, сериалах и людях в виде JSON в формате TMDB v3. Выбирайте Trakt для того, что сделали ваши пользователи. Выбирайте amodb для того, чем является название. Большинство приложений, которым нужно и то и другое, обращаются к каждому сервису за его половиной.

Данные пользователя и данные о названиях

ЗадачаTraktamodb
История просмотровОсновная функцияНе поддерживается, храните сами
Списки к просмотру и спискиОсновная функцияНе поддерживается, запись возвращает 405
Оценки пользователейОсновная функцияНе поддерживается, запись возвращает 405
КалендариДля каждого пользователя, см. их документациюnext_episode_to_air для шоу и списки по расписанию
ВходOAuthТолько ключ, без входа пользователей
Метаданные названийПубличные эндпоинты, лимиты см. в их документацииЭндпоинты сведений на 14 языках
Актерский состав и съемочная группаСм. их документацию/credits для названия, combined_credits для человека
ИзображенияСм. их документациюimg.amodb.dev, ключ не нужен
ТрейлерыСм. их документацию/videos с type и official
Изменения с датыСм. их документациюНе поддерживается, лент изменений нет

Для расписаний GET /3/tv/airing_today и GET /3/tv/on_the_air перечисляют шоу по дате выхода, а в каждой записи сериала есть собственное поле next_episode_to_air. У завершенного шоу это поле равно null. Оба списка описаны на странице списки трендов. Календарь для одного пользователя вы собираете из собственных записей о просмотрах.

Сравнение возможностей

ФункцияTraktamodb
Модель оплатыСм. их документациюПредоплата на периоды от 1 до 24 месяцев
Бесплатный тарифСм. их документациюНет, пробного периода тоже нет
АутентификацияOAuth для данных пользователя, публичные вызовы см. в их документацииapi_key или заголовок Bearer
Формат ответаJSON, см. их документациюJSON в формате TMDB v3
ЯзыкиСм. их документацию14 языков интерфейса
ФильмыДаДа
СериалыДаДа, с сезонами и сериями
ЛюдиСм. их документациюДа
ИзображенияСм. их документациюimg.amodb.dev, те же токены размеров, что у TMDB
РейтингиОценки пользователей, см. их документациюОценки IMDb, Kinopoisk, Metacritic, Rotten Tomatoes и TMDB, где есть данные
Лимит запросовЛимиты см. в их документации20, 40 или 120 в минуту на ключ
Коммерческое использованиеСм. их документациюПлатные тарифы, см. цены
СовместимостьСобственный APIЧтение TMDB v3 и OMDb

Чем отличается amodb

  • Никакого экрана входа для ваших пользователей. Достаточно ключа на стороне сервера. Никто не подключает аккаунт, поэтому нет токена для обновления и экрана согласия, который нужно объяснять.
  • Широкий набор полей. Продолжительность, жанры, студии, возрастные рейтинги, переводы и ключевые слова приходят из эндпоинтов сведений на том языке, который вы запросили.
  • Опубликованные лимиты. Лимит тарифа это число в минуту, а каждый ответ показывает остаток. По этим числам можно рассчитать фоновую синхронизацию.
  • Шкалы настроения и саундтреки. Расширения на страницах настроения и саундтреки добавляют данные, которых нет в TMDB v3.

Когда Trakt подходит лучше

  • Все личное. Скробблинг, синхронизация истории, социальные списки и календари отдельных пользователей это функции Trakt. В amodb нет аккаунтов и методов записи.
  • Состояние на разных устройствах. Если пользователь ждет одинаковых отметок о просмотре на телефоне и на телевизоре, состояние должно жить в пользовательском сервисе, а amodb таким не является.
  • Готовые приложения на OAuth. Если в вашем приложении уже есть токены Trakt, они остаются. Добавьте amodb только для данных о названиях, которые вы сейчас берете из другого места.

Миграция на amodb: свяжите записи

Данные пользователей переносить не нужно, потому что в amodb их нет. Вы заменяете вызовы метаданных. Элементы Trakt содержат ID в других базах (точные поля смотрите в их документации), поэтому храните ID TMDB или ID IMDb рядом с каждой записью о просмотре и используйте его здесь.

PHP
<?php
declare(strict_types=1);

function amodb(string $path): array
{
    $ch = curl_init('https://api.amodb.dev/3' . $path);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 10,
        CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('AMODB_KEY')],
    ]);
    $body = curl_exec($ch);
    $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if ($status !== 200) {
        throw new RuntimeException("amodb returned $status");
    }
    return json_decode($body, true);
}

$show = amodb('/tv/1396?language=en-US');
$next = $show['next_episode_to_air'] ?? null;
echo $show['name'], ' ', $show['status'], PHP_EOL;
echo $next ? 'Next: ' . $next['air_date'] : 'No episode scheduled', PHP_EOL;

Если у вас есть только ID IMDb, один раз вызовите /3/find/tt0903747?external_source=imdb_id и сохраните id из tv_results. Ответ 429 содержит Retry-After, как описано на странице лимиты запросов.

Расчет задачи обновления

Библиотеке пользователя из 200 сериалов для одного обновления нужно 200 запросов сведений. При 20 запросах в минуту это займет 10 минут, при 40 это 5 минут, а при 120 меньше 2. Проверка ключа выполняется раньше кэша на границе сети, поэтому повторные вызовы тоже считаются. В amodb нет лент изменений, поэтому он не скажет, какие ID изменились с определенной даты. Вместо этого читайте status и next_episode_to_air из ответа со сведениями. Часто обновляйте шоу, которые еще идут, а завершенные обновляйте редко. Сведения кэшируются на 6 часов, так что обновление чаще вернет те же данные.

Цены

amodb работает по предоплате и не продлевается само. Выберите 1, 3, 6, 12 или 24 месяца со скидкой 0, 10, 20, 30 или 40 процентов и один из трех тарифов на 20, 40 или 120 запросов в минуту. Любой тариф возвращает все данные, бесплатного тарифа нет. Суммы указаны на странице цены.