Выбор по форме ваших запросов

Выбирайте OMDb, когда вам нужна одна небольшая запись на тайтл, а бесплатный ключ покрывает ваш объем. Выбирайте amodb, когда вы переросли этот лимит или хотите тот же стиль запросов OMDb рядом с актерами, изображениями и переводами на одном ключе. OMDb возвращает JSON или XML, использует параметр apikey и предлагает бесплатный ключ с суточным лимитом 1000 запросов (уточняйте на их сайте), а также платный тариф для спонсоров. amodb только платный и отвечает на основные параметры OMDb, а также на TMDB v3.

Что остается прежним

Эндпоинт OMDb находится по адресу https://api.amodb.dev/omdb/, завершающий слэш необязателен. Ваш код разбора ответа не должен требовать правок для этих элементов.

Элемент OMDbВ amodb
apikeyТот же параметр, в него подставляется ваш ключ amodb
i и tПоиск по ID IMDb или по названию
s и pageПоиск по 10 результатов на странице со счетчиком totalResults, page до 100
type и yФильтр по movie или series и по году
plotshort или full
rПринимается только json
Поля телаНазваны как в OMDb, от Title до Response
RatingsМассив пар Source и Value для Internet Movie Database, Rotten Tomatoes и Metacritic, если они есть
Ошибки{"Response":"False","Error":"..."} с формулировками OMDb, в ответе HTTP 200

Что не переносится

  • XML. Запрос с r=xml возвращает 400 с {"Response":"False","Error":"Only r=json is supported."}.
  • Сезоны и серии. Season и Episode игнорируются, а type=episode ничего не находит. Запрос с i=tt0903747&Season=1 возвращает запись сериала, а не сезон. Для серий используйте /3/tv/{id}/season/{n}.
  • Другие параметры. callback игнорируется.
  • Поля без данных. DVD, Production и Website всегда равны "N/A". В записях сериалов есть totalSeasons, а DVD, BoxOffice, Production и Website отсутствуют.
  • Постеры. Поле Poster указывает на https://img.amodb.dev/t/p/w300/..., а не на другой хост. Замените w300 на w780, чтобы получить изображение побольше по тому же пути, ключ для изображений не нужен.

Полный список параметров и ошибок приведен на странице эндпоинт OMDb.

Пример ответа

Запрос с t=Fight Club возвращает плоский объект. Ответ ниже реальный, сокращен только текст Plot.

JSON
{
  "Title": "Fight Club",
  "Year": "1999",
  "Rated": "R",
  "Released": "15 Oct 1999",
  "Runtime": "139 min",
  "Genre": "Crime, Drama, Thriller",
  "Director": "David Fincher",
  "Writer": "Chuck Palahniuk, Jim Uhls",
  "Actors": "Brad Pitt, Edward Norton, Meat Loaf",
  "Plot": "A nameless first-person narrator attends support groups in an attempt to subdue his emotional state an...",
  "Language": "English",
  "Country": "United States, Germany",
  "Awards": "Nominated for 1 Oscar. 12 wins & 38 nominations total",
  "Poster": "https://img.amodb.dev/t/p/w300/qkrH7rjYKU4KOwwIl6wF6H3ISvm.jpg",
  "Ratings": [
    {
      "Source": "Internet Movie Database",
      "Value": "8.8/10"
    },
    {
      "Source": "Rotten Tomatoes",
      "Value": "81%"
    },
    {
      "Source": "Metacritic",
      "Value": "67/100"
    }
  ],
  "Metascore": "67",
  "imdbRating": "8.8",
  "imdbVotes": "2,669,989",
  "imdbID": "tt0137523",
  "Type": "movie",
  "DVD": "N/A",
  "BoxOffice": "$38,003,039",
  "Production": "N/A",
  "Website": "N/A",
  "Response": "True"
}

Значения являются строками, как в OMDb, поэтому imdbRating, imdbVotes и Runtime разбирайте самостоятельно. Каждый вызов считается одним запросом в вашем минутном лимите, сколько бы полей вы ни читали.

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

ВозможностьOMDbamodb
Модель оплатыБесплатный ключ и платный тариф для спонсоров, уточняйте на их сайтеПредоплаченные периоды, от 1 до 24 месяцев
Бесплатный тарифБесплатный ключ с суточным лимитом 1000, уточняйте на их сайтеНет, пробного периода тоже нет
АутентификацияПараметр apikeyapikey на /omdb/, api_key или Bearer на /3
Формат ответаJSON или XMLJSON
ЯзыкиУточняйте в их документации14 языков интерфейса на путях /3
ФильмыДаДа
СериалыСериалы и серии, поля уточняйте в их документацииЗаписи сериалов на /omdb/, сезоны и серии на путях /3
ЛюдиИмена текстом в каждой записиПрофили, фильмография и изображения на путях /3
ИзображенияСсылка на постер в каждой записиСсылка на постер плюс списки изображений, img.amodb.dev
РейтингиПоля Ratings, Metascore и imdbRatingТе же поля, плюс объект ratings на путях /3
Лимит запросовСуточный лимит на бесплатном ключе, уточняйте на их сайте20, 40 или 120 в минуту на ключ
Коммерческое использованиеУточняйте на их сайтеПродается как платный API, см. цены
СовместимостьОпределяет протокол OMDbПараметры OMDb выше и чтение TMDB v3

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

  • Лимиты в минуту. Тарифы допускают 20, 40 или 120 запросов в минуту в скользящем окне в 60 секунд. В каждом ответе с ключом есть X-RateLimit-Remaining, поэтому пакетная задача может замедлиться сама, не дожидаясь 429.
  • Путь вверх от одиночных записей. В записи OMDb актерский состав дан текстом. Через пути /3 можно запросить тот же тайтл вместе с актерами и съемочной группой, видео и переводами одним вызовом, а imdbID находит запись через /3/find.
  • Изображения побольше. Записи в стиле OMDb дают одну ссылку на постер. Хост изображений отдает десять размеров, от w92 до original.
  • Больше источников рейтингов. Расширение /3/movie/{id}/ratings добавляет значения Kinopoisk, Metacritic, Rotten Tomatoes и TMDB, где они известны.

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

  • Небольшие или бесплатные проекты. Бесплатного ключа с суточным лимитом 1000 хватает для прототипа или хобби-сайта, а у amodb бесплатного тарифа нет.
  • Потребители XML. Если устаревшая система разбирает XML, OMDb его предлагает, а amodb нет.
  • Поиск сезонов и серий. У маршрута /omdb/ в amodb нет режима сезонов и серий, поэтому клиенту на его основе нужны пути /3.
  • Простота. Один эндпоинт и несколько параметров легко освоить. Если вам нужно только это, переход почти ничего не даст.

Миграция на amodb

Меняются только базовый URL и ключ. Остальную часть запроса оставьте как есть, предварительно найдя в коде r=xml, Season, Episode и type=episode.

JavaScript
const OMDB_BASE = process.env.OMDB_BASE_URL; // before: your current OMDb base URL
const AMODB_BASE = 'https://api.amodb.dev/omdb/'; // after

async function lookup(title) {
  const url = new URL(AMODB_BASE);
  url.searchParams.set('apikey', process.env.AMODB_KEY);
  url.searchParams.set('t', title);
  url.searchParams.set('plot', 'short');
  const res = await fetch(url);
  const data = await res.json();
  if (data.Response === 'False') throw new Error(data.Error);
  return data;
}

const movie = await lookup('Fight Club');
console.log(movie.Title, movie.Year, movie.imdbRating, movie.Poster);

Продолжайте проверять поле Response, как и в OMDb. Когда значение равно строке "False", поле Error содержит сообщение. Для серий один раз сопоставьте imdbID через /3/find и читайте сезоны со стороны /3:

curl
curl -s "https://api.amodb.dev/3/find/tt0903747?external_source=imdb_id&api_key=$AMODB_KEY"
curl -s "https://api.amodb.dev/3/tv/1396/season/1?api_key=$AMODB_KEY"

Про сторону в стиле TMDB читайте на страницах аутентификация и быстрый старт.

Цены

amodb платный и продлевается только тогда, когда вы покупаете новый период. Три тарифа отличаются лишь частотой запросов, 20, 40 или 120 в минуту, и каждый возвращает все данные. Периоды составляют 1, 3, 6, 12 или 24 месяца, а более длинные дают скидку от 10 до 40 процентов. Актуальные суммы смотрите на странице цены.