Данные IMDb через REST: короткий ответ
У IMDb нет бесплатного универсального REST API. Его некоммерческие наборы данных представляют собой файлы для скачивания, а коммерческий доступ лицензируется, поэтому актуальные условия уточняйте в их документации. Если вы хотите вызвать эндпоинт HTTP с ID IMDb и получить JSON, amodb делает это на платном тарифе. Если ваш договор требует данных, лицензированных самим IMDb, такое соглашение заключается с IMDb, и amodb его не заменяет.
Способы использовать ID IMDb в amodb
Пять вызовов закрывают большинство задач. Каждый начинается с уже имеющегося ID или заканчивается им.
| У вас есть или нужно | Запрос | Что вы получаете |
|---|---|---|
| Тайтл по ID IMDb | GET / | Массивы movie_results, tv_results, person_results |
| ID IMDb фильма | GET /3/movie/550, поле imdb_id | tt0137523 для Fight Club |
| ID IMDb сериала | GET / | imdb_id рядом с ID TVDB |
| Оценка IMDb | GET / | imdb в виде value и votes или null |
| Запись в стиле OMDb | GET /omdb/?i=tt0137523 | imdbRating, imdbVotes, imdbID |
Каждая строка работает с одним и тем же ключом. Рейтинги описаны на странице рейтинги, а поиск по ID на странице поиск по внешнему ID.
Как прочитать оценку IMDb
Эндпоинт рейтингов возвращает оценку и число голосов вместе. Это реальный ответ для Fight Club (ID 550). Оценки со временем меняются.
{
"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, так что опрашивать чаще нет смысла.
Сравнение возможностей
| Возможность | IMDb | amodb |
|---|---|---|
| Модель оплаты | Лицензия для коммерческого доступа, уточняйте в их документации | Предоплата, от 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.
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 процентов. Все тарифы возвращают одни и те же данные, автоматического продления нет, бесплатного тарифа тоже нет. Суммы указаны на странице цены.