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 запытаў у хвіліну. Абярыце тарыф на старонцы цэны і зрабіце першы выклік праз некалькі хвілін.