Данные IMDb через REST: короткий ответ

У IMDb нет бесплатного универсального REST API. Его некоммерческие наборы данных представляют собой файлы для скачивания, а коммерческий доступ лицензируется, поэтому актуальные условия уточняйте в их документации. Если вы хотите вызвать эндпоинт HTTP с ID IMDb и получить JSON, amodb делает это на платном тарифе. Если ваш договор требует данных, лицензированных самим IMDb, такое соглашение заключается с IMDb, и amodb его не заменяет.

Способы использовать ID IMDb в amodb

Пять вызовов закрывают большинство задач. Каждый начинается с уже имеющегося ID или заканчивается им.

У вас есть или нужноЗапросЧто вы получаете
Тайтл по ID IMDbGET /3/find/tt0137523?external_source=imdb_idМассивы movie_results, tv_results, person_results
ID IMDb фильмаGET /3/movie/550, поле imdb_idtt0137523 для Fight Club
ID IMDb сериалаGET /3/tv/1396/external_idsimdb_id рядом с ID TVDB
Оценка IMDbGET /3/movie/550/ratingsimdb в виде value и votes или null
Запись в стиле OMDbGET /omdb/?i=tt0137523imdbRating, imdbVotes, imdbID

Каждая строка работает с одним и тем же ключом. Рейтинги описаны на странице рейтинги, а поиск по ID на странице поиск по внешнему ID.

Как прочитать оценку IMDb

Эндпоинт рейтингов возвращает оценку и число голосов вместе. Это реальный ответ для Fight Club (ID 550). Оценки со временем меняются.

JSON
{
  "id": 550,
  "imdb": {
    "value": 8.8,
    "votes": 2669989
  },
  "kinopoisk": {
    "value": 8.7,
    "votes": null
  },
  "metacritic": {
    "value": 67,
    "votes": null
  },
  "rotten_tomatoes": {
    "value": 81,
    "votes": null
  },
  "tmdb": {
    "value": 8.437,
    "votes": 33039
  }
}

Для IMDb value задано по шкале от 0 до 10 с одним знаком после запятой. Показывайте число голосов рядом и ничего не выводите, если объект равен null. В этом ответе голоса есть только у IMDb и TMDB. votes может быть null у любого источника, поэтому проверьте его перед показом. Кэшированный ответ остается действительным 6 часов на edge, так что опрашивать чаще нет смысла.

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

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

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

Вы вызываете эндпоинт, а не разбираете файл. Один запрос возвращает тайтл с актерским составом, трейлерами и рейтингами через append_to_response, а структура совпадает с TMDB v3, поэтому готовые клиентские библиотеки работают. Тот же ключ обслуживает эндпоинт в стиле OMDb, благодаря чему продолжает работать старый код, читающий imdbRating.

Блок рейтингов представляет собой объект с пятью фиксированными ключами. Неизвестный источник равен null, а не отсутствует, поэтому коду, который читает ratings.imdb, не нужна проверка существования родителя. Рядом со значением может стоять число голосов, и это позволяет скрыть оценку, основанную на малом числе голосов. Оно тоже может быть null, как у трех из пяти источников в примере выше.

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

  • Источник оценки. IMDb публикует свои рейтинги первым. amodb возвращает значение только там, где оно известно, поэтому у нового или малоизвестного тайтла может прийти null.
  • Функции сайта. Отзывы пользователей, списки и списки к просмотру живут на сайте IMDb. amodb является API метаданных и не предлагает пользовательских аккаунтов.
  • Лицензированные данные. Если партнер или договор требует данных, лицензированных IMDb, их может предоставить только IMDb.
  • Офлайн-анализ. Файлы некоммерческих наборов данных подходят для массовых исследований, которые вы запускаете на своей машине. Условия уточняйте в их документации.

Миграция на amodb

Скорее всего, у вас есть список ID IMDb. Сопоставьте каждый с ID amodb один раз, сохраните пару и дальше вызывайте детали по числовому ID.

bashpy
curl -s "https://api.amodb.dev/3/find/tt0133093?external_source=imdb_id" \
  -H "Authorization: Bearer $AMODB_KEY"
import os
import requests

KEY = os.environ["AMODB_KEY"]
imdb_ids = ["tt0137523", "tt0133093", "tt1375666"]

for imdb_id in imdb_ids:
    r = requests.get(
        f"https://api.amodb.dev/3/find/{imdb_id}",
        params={"external_source": "imdb_id"},
        headers={"Authorization": f"Bearer {KEY}"},
        timeout=10,
    )
    r.raise_for_status()
    hits = r.json()["movie_results"]
    print(imdb_id, hits[0]["id"] if hits else None)

Три ID выше соответствуют 550, 603 и 27205, то есть Fight Club, The Matrix и Inception. ID сериала, например tt0903747, приходит в tv_results, где у Breaking Bad ID 1396. Пустой массив означает, что для этого ID совпадений не найдено.

Ограничьте скорость цикла. Каждый ID занимает один запрос, а ответ 429 содержит заголовок Retry-After с числом секунд ожидания. Остальные коды описаны на странице ошибки.

Как безопасно хранить ID

  • Храните ID IMDb как строки. Они начинаются с tt и содержат ведущие нули, как в tt0137523, а числовой тип эти нули отбрасывает.
  • Сохраняйте ID IMDb и ID amodb парой. По любому из них тайтл находится снова.
  • Для сериалов читайте tv_results, для фильмов movie_results. Один ID обычно заполняет один массив, а остальные оставляет пустыми.
  • Дальше запрашивайте детали по ID amodb, потому что запрос деталей может включать актеров, трейлеры и рейтинги через append_to_response.

Цены

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