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 заявки в минута. Изберете план на страницата с цените и направете първото си извикване след броени минути.