Ендпойнт, съвместим с OMDb
GET https://api.amodb.dev/omdb/ отговаря на заявки в стил OMDb със същите имена на параметри и полета. Търсете заглавие по IMDb id през i или по заглавие през t, или търсете списък през s. Връзките към постери сочат към img.amodb.dev. Поддържат се само r=json, филми и сериали. Сменете базовия URL и ключа и типичният клиент продължава да работи.
Търсене на заглавие по IMDb id или заглавие
GET https:/ връща едно заглавие като плосък JSON с имената на полетата на OMDb. Подайте i за IMDb id, например tt0137523, или t за заглавие. Удостоверяването е чрез параметъра на заявката apikey. В отговора Response е True при успех и False при неуспех.
Примерът зарежда Fight Club по IMDb id и спира с текста на грешката на OMDb, когато Response е False.
curl -sf "https://api.amodb.dev/omdb/?i=tt0137523&plot=short&apikey=$AMODB_KEY"const params = new URLSearchParams({ i: 'tt0137523', plot: 'short', apikey: process.env.AMODB_KEY });
const res = await fetch(`https://api.amodb.dev/omdb/?${params}`);
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const data = await res.json();
if (data.Response === 'False') throw new Error(data.Error);
console.log(data.Title, data.Year, data.imdbRating);import os
import requests
r = requests.get(
"https://api.amodb.dev/omdb/",
params={"i": "tt0137523", "plot": "short", "apikey": os.environ["AMODB_KEY"]},
timeout=10,
)
r.raise_for_status()
data = r.json()
if data["Response"] == "False":
raise SystemExit(data["Error"])
print(data["Title"], data["Year"], data["imdbRating"])<?php
$query = http_build_query(['i' => 'tt0137523', 'plot' => 'short', 'apikey' => getenv('AMODB_KEY')]);
$ch = curl_init('https://api.amodb.dev/omdb/?' . $query);
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status !== 200) {
throw new RuntimeException("amodb returned $status");
}
$data = json_decode($body, true);
if ($data['Response'] === 'False') {
throw new RuntimeException($data['Error']);
}
echo $data['Title'], ' ', $data['Year'], ' ', $data['imdbRating'], PHP_EOL;package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
"os"
"time"
)
type Title struct {
Title string `json:"Title"`
Year string `json:"Year"`
ImdbRating string `json:"imdbRating"`
Response string `json:"Response"`
Error string `json:"Error"`
}
func main() {
q := url.Values{"i": {"tt0137523"}, "plot": {"short"}, "apikey": {os.Getenv("AMODB_KEY")}}
client := &http.Client{Timeout: 10 * time.Second}
res, err := client.Get("https://api.amodb.dev/omdb/?" + q.Encode())
if err != nil {
panic(err)
}
defer res.Body.Close()
if res.StatusCode != http.StatusOK {
panic(res.Status)
}
var t Title
if err := json.NewDecoder(res.Body).Decode(&t); err != nil {
panic(err)
}
if t.Response == "False" {
panic(t.Error)
}
fmt.Println(t.Title, t.Year, t.ImdbRating)
}Параметри
apikeyзаявказадължителенВашият ключ за amodb.iзаявкаедин отi,t,sIMDb id на заглавието:ttплюс 7 до 9 цифри, напримерtt0137523.tзаявкаедин отi,t,sЗаглавие за търсене, връща най-доброто съвпадение.sзаявкаедин отi,t,sТекст за търсене от поне 3 букви, връща списък.typeзаявкаmovieилиseries.episodeне намира нищо.yзаявкаГодина на излизане.plotзаявкаshortилиfull. По подразбиранеshort.pageзаявкаСтраница с резултати от търсене, от 1 до 100. Ползва се съсs.rзаявкаСамоjson. Всяка друга стойност връща HTTP 400.
Параметрите Season, Episode, callback и v от оригиналното OMDb API не се поддържат и се игнорират.
Полета на отговора
| Поле | Бележки |
|---|---|
Title, Year, Rated, Released, Runtime | Текст. Released изглежда като 15 Oct 1999. |
Genre, Director, Writer, Actors | Имена, разделени със запетая. |
Plot, Language, Country, Awards | Текст. |
Poster | Адрес на https:/. |
Ratings | Масив от обекти със Source и Value. |
Metascore, imdbRating, imdbVotes, imdbID | Текст, като броят гласове е записан със запетаи. |
Type | movie или series. |
DVD, BoxOffice, Production, Website | Само за филми. BoxOffice носи стойност, когато е известна. DVD, Production и Website винаги са N/A. |
totalSeasons | Само за сериали, като текст. Отговорите за сериали нямат DVD, BoxOffice, Production или Website. |
Response | True или False, винаги низ. |
Полетата следват OMDb, така че съществуващ парсер за OMDb не се нуждае от промяна освен на базовия URL.
Примерен отговор
{
"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 and relieve his insomniac state.",
"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"
}За сериал като The Wire (i=tt0306414) отговорът завършва с "Type": "series", "totalSeasons": "5" и "Response": "True".
Търсене със s
Подайте s, за да получите списък вместо едно заглавие. Всяка страница съдържа 10 елемента, а totalResults дава общия брой като низ. Поискайте page=2 за елементи от 11 до 20 и продължавайте, докато прочетете totalResults елемента. Страница след последната отговаря с Movie not found!.
curl -sf "https://api.amodb.dev/omdb/?s=Matrix&type=movie&page=1&apikey=$AMODB_KEY"| Поле | Бележки |
|---|---|
Search | Масив до 10 елемента с Title, Year, imdbID, Type, Poster. |
totalResults | Броят на всички съвпадения, като низ. |
Response | True или False. |
{
"Search": [
{
"Title": "The Matrix",
"Year": "1999",
"imdbID": "tt0133093",
"Type": "movie",
"Poster": "https://img.amodb.dev/t/p/w300/kEDbym5htJgDQNenjUtSJxAHysB.jpg"
},
{
"Title": "The Matrix Reloaded",
"Year": "2003",
"imdbID": "tt0234215",
"Type": "movie",
"Poster": "https://img.amodb.dev/t/p/w300/d0xVNNxIYxId2qHkqpgE39soOvD.jpg"
}
],
"totalResults": "20",
"Response": "True"
}Списъкът е съкратен до 2 от 10 елемента.
Как да четете масива Ratings
Ratings съдържа по един обект за източник, всеки със Source и Value, а Value е текст като 8.8/10. Източниците са Internet Movie Database, Rotten Tomatoes и Metacritic, като са изброени само тези, които са известни за заглавието. Плоските полета imdbRating, imdbVotes и Metascore повтарят част от същите данни. Разделете Value по наклонената черта, ако ви трябва число. За типизирани числа и оценка от Kinopoisk и TMDB ползвайте вместо това ендпойнта рейтинги.
Грешки
Неуспешните търсения връщат {"Response":"False",. Повечето идват с HTTP 200, така че четете Error и разклонявайте по текста, а не само по HTTP статуса.
Текст на Error | HTTP | Кога |
|---|---|---|
Movie not found! | 200 | Никое заглавие не съвпада с t, стойността на i е валидна, но непозната, или страницата на търсенето е след последната. |
Incorrect IMDb ID. | 200 | Стойността на i няма формата на IMDb id. |
Too many results. | 200 | Текстът за търсене е по-кратък от 3 букви или съвпада с твърде много заглавия. Удължете текста или добавете type или y. |
Something went wrong. | 200 | Не е изпратен нито i, нито t, нито s. |
Only r= | 400 | r е зададен на нещо различно от json. |
No API key provided. или Invalid API key! | 401 | apikey липсва или е грешен. |
Request limit reached! | 429 | Надхвърлен е лимитът на заявки в минута. Изчакайте Retry-After секунди. |
Приключил план отговаря с HTTP 402. Вижте грешки и лимити на заявките.
Миграция на клиент на OMDb
Миграцията са две промени: базовият URL и ключът. Нищо друго в заявката не се променя.
// Before: the base URL and key of your current OMDb setup.
// After:
const OMDB_BASE = 'https://api.amodb.dev/omdb/';
const OMDB_KEY = process.env.AMODB_KEY;Махнете r=xml, ако го изпращате. Клиент, който чете епизоди, Season или callback, има нужда от друг източник за тези части. Лимитът е на ключ, така че извикванията в стил OMDb и извикванията в стил TMDB споделят един бюджет от 20, 40 или 120 заявки в минута.
Практически бележки
- Третирайте всяка стойност като текст. Преобразувайте
Year,imdbRatingиtotalResultsсами и считайтеN/Aза липсваща. - Ползвайте
plot=fullсамо когато показвате дългото описание на сюжета.shortдържи отговорите по-малки. - Търсенията по
iилиtсе кешират по-дълго от търсенията съсs, така че повторно търсене връща запазения отговор. - За да получите TMDB id от IMDb id, извикайте търсене по външен идентификатор.
- Постерите са с размер
w300. За други размери построете адреса отposter_pathв стил TMDB и списъка с размери на страницата изображения. - Дръжте ключа на сървър.
apikeyв URL адреса на страница се вижда от всеки посетител.