API за филми, което говори протокола на TMDB v3 и OMDb

amodb е независимо API за филми. То работи със същия протокол като TMDB v3 и OMDb, затова клиент, написан за някое от двете, работи, след като смените базовия URL адрес на https://api.amodb.dev/3 (или на https://api.amodb.dev/omdb/ за извикванията в стил OMDb). Филмът се намира през /search/movie, после се чете през /movie/{movie_id} и append_to_response.

Какво получавате:

  • JSON във формата на TMDB v3, със същите пътища и параметри на заявката.
  • Заглавия и описания на 14 езика, избират се с language.
  • Актьорски състав, екип, трейлъри, ключови думи, изображения и дати на излизане чрез append_to_response.
  • Рейтинги от IMDb, Kinopoisk, Metacritic, Rotten Tomatoes и TMDB, когато са известни.
  • Постери от https://img.amodb.dev/t/p/{size}/{file}, без ключ.

Какви данни получавате

От какво имате нуждаИзвикванеБележки
Да намерите филм по заглавиеGET /3/search/movie?query=Странициране, до 20 резултата на страница, edge кеш 10 минути. Вижте търсене.
Основният записGET /3/movie/{movie_id}Заглавия, описание, продължителност, жанрове, дата на излизане. Вижте филми.
Актьори и екипappend_to_response=creditsПолетата са описани на страницата участници.
Трейлъриappend_to_response=videosВръща масива results с key, site и type.
Оценкиappend_to_response=ratingsПет източника, всеки във вида { value, votes } или null. Вижте рейтинги.
Отговор в стил OMDbGET /omdb/?t=InceptionСъщите полета като в OMDb. Вижте ендпойнт OMDb.

Започнете в 3 стъпки

  1. Изберете тарифен план на страницата с цените. Плановете се различават само по лимита: 20, 40 или 120 заявки в минута.
  2. Създайте ключ в личния си профил. Ключът е 32 шестнайсетични символа с малки букви.
  3. Извикайте ендпойнта, като подадете ключа в параметъра api_key или в заглавката Authorization: Bearer. Вижте удостоверяване.

Пример със заявка

Примерът намира Inception по заглавие, взема първия резултат и с още едно извикване чете филма с актьори, трейлъри и рейтинги. Това са общо две заявки.

bashjs
# 1. find the id
curl -s "https://api.amodb.dev/3/search/movie?query=inception&language=en-US" \
  -H "Authorization: Bearer $AMODB_KEY"

# 2. read the movie with extras
curl -s "https://api.amodb.dev/3/movie/27205?language=en-US&append_to_response=credits,videos,ratings" \
  -H "Authorization: Bearer $AMODB_KEY"
const base = 'https://api.amodb.dev/3';
const headers = { Authorization: `Bearer ${process.env.AMODB_KEY}` };

async function get(path, params) {
  const res = await fetch(`${base}${path}?${new URLSearchParams(params)}`, { headers });
  if (res.status === 429) {
    throw new Error(`Over the limit, retry in ${res.headers.get('Retry-After')} s`);
  }
  if (!res.ok) throw new Error(`amodb returned ${res.status}`);
  return res.json();
}

const found = await get('/search/movie', { query: 'inception', language: 'en-US' });
if (!found.results.length) throw new Error('No match');

const movie = await get(`/movie/${found.results[0].id}`, {
  language: 'en-US',
  append_to_response: 'credits,videos,ratings',
});
const director = movie.credits.crew.find((c) => c.job === 'Director');
console.log(movie.title, movie.release_date, movie.runtime, director?.name);
console.log('IMDb', movie.ratings.imdb?.value);

Съкратеният отговор. От записа на филма са оставени само част от полетата, credits е съкратен до един актьор и режисьора, а блокът videos е пропуснат.

JSON
{
  "genres": [
    {
      "id": 12,
      "name": "Adventure"
    },
    {
      "id": 28,
      "name": "Action"
    },
    {
      "id": 80,
      "name": "Crime"
    }
  ],
  "id": 27205,
  "imdb_id": "tt1375666",
  "poster_path": "/xlaY2zyzMfkhk0HSC5VUwzoZPU1.jpg",
  "release_date": "2010-07-15",
  "runtime": 148,
  "title": "Inception",
  "credits": {
    "cast": [
      {
        "adult": false,
        "gender": 2,
        "id": 6193,
        "known_for_department": "Acting",
        "name": "Leonardo DiCaprio",
        "original_name": "Leonardo DiCaprio",
        "popularity": 9.3213,
        "profile_path": "/wo2hJpn04vbtmh0B9utCFdsQhxM.jpg",
        "character": "Dom Cobb",
        "credit_id": "52fe4534c3a368484e04de03",
        "order": 0
      }
    ],
    "crew": [
      {
        "adult": false,
        "gender": 2,
        "id": 525,
        "known_for_department": "Directing",
        "name": "Christopher Nolan",
        "original_name": "Christopher Nolan",
        "popularity": 8.578,
        "profile_path": "/xuAIuYSmsUzKlUMBFGVZaWsY3DZ.jpg",
        "credit_id": "5e83ac2ee33f830018359a00",
        "department": "Directing",
        "job": "Director"
      }
    ]
  },
  "ratings": {
    "imdb": {
      "value": 8.8,
      "votes": 2877173
    },
    "kinopoisk": {
      "value": 8.7,
      "votes": null
    },
    "metacritic": {
      "value": 74,
      "votes": null
    },
    "rotten_tomatoes": {
      "value": 86,
      "votes": null
    },
    "tmdb": {
      "value": 8.373,
      "votes": 40457
    }
  }
}

Начини да намерите филм

Изберете извикването, което отговаря на това, което вече имате.

С какво започватеИзвикванеРезултат
Заглавие, въведено от потребителGET /3/search/movie?query=Масив results с id, title, release_date, poster_path
IMDb id, например tt0133093GET /3/find/tt0133093?external_source=imdb_idМасив movie_results
Числов id на филм, например 603GET /3/movie/603Пълният запис
Съществуващ клиент за OMDbGET /omdb/?i=tt0133093Отговор на OMDb с Title, Year, Ratings

Пазете и двата id. Числовият id е ключът за всички останали извиквания, а imdb_id свързва вашите данни с други системи. Правилата за търсене са на страницата търсене по външен идентификатор.

Празни полета и неуспешни търсения

Реалните данни за филми имат пропуски, затова предвидете ги в кода за показване. Търсене без резултат не е грешка: връща HTTP 200 и празен масив results. Непознат id е грешка.

СлучайКакво виждатеКакво да направите
Търсенето не намира нищо200 и "results": []Покажете „няма съвпадение“, не повтаряйте заявката
Непознат id на филм404 със status_code 34Махнете id от списъка си
Липсващ или грешен ключ401 със status_code 7Спрете и поправете ключа
Празно overviewПразен низПовторете заявката с language=en-US
Неизвестна оценкаnull в ratingsСкрийте тази значка
Няма дата на излизанеПразно release_dateПодредете заглавието последно

Пълният списък с грешки е на страницата грешки.

Как да останете в рамките на лимита

Търсенето и извикването на детайли струват по една заявка. При 20 заявки в минута това са десет търсения на заглавие в минута, а при 120 заявки в минута са шейсет. Попадение в edge кеша също се брои, защото проверката на ключа и лимитът на заявките се изпълняват преди кеша. Пазете собствен кеш за повтарящи се търсения и четете X-RateLimit-Remaining, за да видите колко заявки остават в текущата минута. При 429 изчакайте толкова секунди, колкото сочи Retry-After. Лимитите по планове са на страницата лимити на заявките.

Как се сравнява

ВъзможностСами да обработвате странициAPI за метаданни с безплатен планamodb
Формат на отговораHTML, който трябва да разбиратеJSONJSON във формата на TMDB v3
Стабилност на схематаЧупи се, когато се промени разметката на страницатаОпределя се от доставчикаФиксирани пътища и полета, може да се появят нови полета
Условия за достъпВажат условията на всеки сайтБезплатен план с условия за ползване, проверете гиПлатен, предплатен, без безплатен план
Лимит на заявкитеНищо, на което можете да разчитатеОпределя се от доставчика20, 40 или 120 заявки в минута на ключ
Рейтинги от няколко източникаПо един скрейпър за всеки сайтРазлично, вижте документациятаratings в същото извикване, null, когато е неизвестно
ЕзициКаквото предлага всяка страницаРазлично14, избират се с language
Повторна употреба на клиенти за TMDB v3 и OMDbНеСамо ако ползва същия протоколДа, сменяте базовия URL адрес

Цени

Достъпът е предплатен за 1, 3, 6, 12 или 24 месеца, като за по-дългите периоди отстъпката е 0, 10, 20, 30 и 40 процента. Няма автоматично подновяване и няма безплатен план. Всички планове дават достъп до всички данни и се различават само по лимита: 20, 40 или 120 заявки в минута. Изберете план на страницата с цените и направете първото си извикване след броени минути.