API фільмаў, якое працуе па пратаколе TMDB v3 і OMDb
amodb уяўляе сабой незалежнае API фільмаў. Яно працуе па тым жа пратаколе, што TMDB v3 і OMDb, таму кліент, напісаны для любога з іх, будзе працаваць пасля змены базавага URL на https:/ (або https:/ для выклікаў у стылі 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 / | Пастаронкавы вывад, да 20 вынікаў на старонку, edge-кэш 10 хвілін. Гл. пошук. |
| Асноўны запіс | GET / | Назвы, апісанне, працягласць, жанры, дата выхаду. Гл. фільмы. |
| Акцёры і здымачная група | append_ | Палі апісаны на старонцы удзельнікі. |
| Трэйлеры | append_ | Вяртае масіў results з палямі key, site і type. |
| Ацэнкі | append_ | Пяць крыніц, кожная ў выглядзе { value, votes } або null. Гл. рэйтынгі. |
| Адказ у стылі OMDb | GET /omdb/?t=Inception | Тыя ж палі, што ў OMDb. Гл. эндпоінт OMDb. |
Пачніце за 3 крокі
- Абярыце тарыфны план на старонцы цэны. Планы адрозніваюцца толькі абмежаваннем: 20, 40 або 120 запытаў у хвіліну.
- Стварыце ключ у асабістым кабінеце. Ключ уяўляе сабой 32 шаснаццатковыя сімвалы ў ніжнім рэгістры.
- Выклічце эндпоінт, перадаўшы ключ у параметры
api_keyабо ў загалоўкуAuthorization: Bearer. Гл. аўтэнтыфікацыя.
Прыклад запыту
У прыкладзе фільм Inception знаходзіцца па назве, бярэцца першы вынік, а потым адным выклікам чытаюцца фільм з акцёрамі, трэйлерамі і рэйтынгамі. Разам атрымліваецца два запыты.
# 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 прапушчаны.
{
"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 / | Масіў results з палямі id, title, release_date, poster_path |
IMDb id, напрыклад tt0133093 | GET / | Масіў movie_results |
Лікавы id фільма, напрыклад 603 | GET /3/movie/603 | Поўны запіс |
| Існуючы кліент OMDb | GET /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, які трэба разбіраць | JSON | JSON у форме 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 запытаў у хвіліну. Абярыце тарыф на старонцы цэны і зрабіце першы выклік праз некалькі хвілін.