Выбор по форме ваших запросов
Выбирайте OMDb, когда вам нужна одна небольшая запись на тайтл, а бесплатный ключ покрывает ваш объем. Выбирайте amodb, когда вы переросли этот лимит или хотите тот же стиль запросов OMDb рядом с актерами, изображениями и переводами на одном ключе. OMDb возвращает JSON или XML, использует параметр apikey и предлагает бесплатный ключ с суточным лимитом 1000 запросов (уточняйте на их сайте), а также платный тариф для спонсоров. amodb только платный и отвечает на основные параметры OMDb, а также на TMDB v3.
Что остается прежним
Эндпоинт OMDb находится по адресу https:/, завершающий слэш необязателен. Ваш код разбора ответа не должен требовать правок для этих элементов.
| Элемент OMDb | В amodb |
|---|---|
apikey | Тот же параметр, в него подставляется ваш ключ amodb |
i и t | Поиск по ID IMDb или по названию |
s и page | Поиск по 10 результатов на странице со счетчиком totalResults, page до 100 |
type и y | Фильтр по movie или series и по году |
plot | short или full |
r | Принимается только json |
| Поля тела | Названы как в OMDb, от Title до Response |
Ratings | Массив пар Source и Value для Internet Movie Database, Rotten Tomatoes и Metacritic, если они есть |
| Ошибки | {"Response":"False", с формулировками 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.
{
"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 разбирайте самостоятельно. Каждый вызов считается одним запросом в вашем минутном лимите, сколько бы полей вы ни читали.
Сравнение возможностей
| Возможность | OMDb | amodb |
|---|---|---|
| Модель оплаты | Бесплатный ключ и платный тариф для спонсоров, уточняйте на их сайте | Предоплаченные периоды, от 1 до 24 месяцев |
| Бесплатный тариф | Бесплатный ключ с суточным лимитом 1000, уточняйте на их сайте | Нет, пробного периода тоже нет |
| Аутентификация | Параметр apikey | apikey на /omdb/, api_key или Bearer на /3 |
| Формат ответа | JSON или XML | JSON |
| Языки | Уточняйте в их документации | 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.
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 -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 процентов. Актуальные суммы смотрите на странице цены.