Дані 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 годин на краю мережі, тож частіше опитувати немає сенсу.

Порівняння можливостей

Можливість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 відсотків. Усі тарифи повертають ті самі дані, нічого не поновлюється саме, і безкоштовного тарифу немає. Суми дивіться на сторінці ціни.