Endpoint compatibil OMDb
GET https://api.amodb.dev/omdb/ răspunde cererilor în stil OMDb, cu aceleași nume de parametri și câmpuri. Caută un titlu după ID IMDb cu i sau după titlu cu t, sau caută cu s. Linkurile posterelor indică img.amodb.dev. Se servesc doar r=json, filme și seriale. Schimbă URL-ul de bază și cheia, iar un client obișnuit continuă să funcționeze.
Caută un titlu după ID IMDb sau după titlu
GET https:/ întoarce un titlu ca JSON plat, cu nume de câmpuri OMDb. Transmite i pentru un ID IMDb precum tt0137523 sau t pentru un titlu. Autentificarea este parametrul de interogare apikey. Răspunsul are Response setat la True la succes și la False la eșec.
Exemplul încarcă Fight Club după ID IMDb și se oprește cu textul de eroare OMDb când Response este 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)
}Parametri
apikeyinterogareobligatoriuCheia ta amodb.iinterogareuna dintrei,t,sID IMDb al titlului:ttplus 7 până la 9 cifre, de exemplutt0137523.tinterogareuna dintrei,t,sTitlul de căutat, întoarce cea mai bună potrivire.sinterogareuna dintrei,t,sText de căutare de cel puțin 3 litere, întoarce o listă.typeinterogaremoviesauseries.episodenu găsește nimic.yinterogareAnul lansării.plotinterogareshortsaufull. Implicitshort.pageinterogarePagina rezultatelor de căutare, de la 1 la 100. Se folosește cus.rinterogareDoarjson. Orice altă valoare întoarce HTTP 400.
Parametrii Season, Episode, callback și v din API-ul OMDb original nu sunt acceptați și sunt ignorați.
Câmpurile răspunsului
| Câmp | Observații |
|---|---|
Title, Year, Rated, Released, Runtime | Text. Released arată ca 15 Oct 1999. |
Genre, Director, Writer, Actors | Nume separate prin virgulă. |
Plot, Language, Country, Awards | Text. |
Poster | Adresă pe https:/. |
Ratings | Array de obiecte cu Source și Value. |
Metascore, imdbRating, imdbVotes, imdbID | Text, inclusiv numărul de voturi cu virgule. |
Type | movie sau series. |
DVD, BoxOffice, Production, Website | Doar filme. BoxOffice poartă o valoare când se cunoaște. DVD, Production și Website arată mereu N/A. |
totalSeasons | Doar seriale, ca text. Răspunsurile de seriale nu au DVD, BoxOffice, Production sau Website. |
Response | True sau False, mereu un șir. |
Câmpurile urmează OMDb, deci un parser OMDb existent nu are nevoie de nicio schimbare în afară de URL-ul de bază.
Exemplu de răspuns
{
"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"
}Pentru un serial precum The Wire (i=tt0306414), răspunsul se încheie cu "Type": "series", "totalSeasons": "5" și "Response": "True".
Caută cu s
Trimite s ca să primești o listă în loc de un singur titlu. Fiecare pagină are 10 elemente, iar totalResults dă numărul total ca șir. Cere page=2 pentru elementele 11 până la 20 și continuă până ai citit totalResults elemente. O pagină dincolo de ultima răspunde Movie not found!.
curl -sf "https://api.amodb.dev/omdb/?s=Matrix&type=movie&page=1&apikey=$AMODB_KEY"| Câmp | Observații |
|---|---|
Search | Array de până la 10 elemente cu Title, Year, imdbID, Type, Poster. |
totalResults | Numărul tuturor potrivirilor, ca șir. |
Response | True sau 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"
}Lista este tăiată la 2 din 10 elemente.
Citește array-ul Ratings
Ratings conține câte un obiect pe sursă, fiecare cu Source și Value, iar Value este text precum 8.8/10. Sursele sunt Internet Movie Database, Rotten Tomatoes și Metacritic, și sunt listate doar cele cunoscute pentru titlu. Câmpurile plate imdbRating, imdbVotes și Metascore repetă o parte din aceleași date. Împarte Value la bară dacă ai nevoie de un număr. Pentru numere tipizate și un scor Kinopoisk și TMDB, folosește în schimb endpoint-ul de evaluări.
Erori
Eșecurile de căutare întorc {"Response":"False",. Majoritatea vin cu HTTP 200, deci citește Error și ramifică după text, nu doar după starea HTTP.
Text Error | HTTP | Când |
|---|---|---|
Movie not found! | 200 | Niciun titlu nu se potrivește cu t, valoarea i este validă, dar necunoscută, sau o pagină de căutare este dincolo de ultima. |
Incorrect IMDb ID. | 200 | Valoarea i nu are forma unui ID IMDb. |
Too many results. | 200 | Textul de căutare are mai puțin de 3 litere sau se potrivește cu prea multe titluri. Fă textul mai lung sau adaugă type ori y. |
Something went wrong. | 200 | Nu s-a trimis niciunul dintre i, t și s. |
Only r= | 400 | r este setat la altceva decât json. |
No API key provided. sau Invalid API key! | 401 | apikey lipsește sau este greșit. |
Request limit reached! | 429 | Ai depășit cererile pe minut. Așteaptă numărul de secunde din Retry-After. |
Un plan încheiat răspunde HTTP 402. Vezi erori și limite de cereri.
Migrează un client OMDb
Migrarea înseamnă două modificări: URL-ul de bază și cheia. Nimic altceva din cerere nu se schimbă.
// 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;Elimină r=xml dacă îl trimiți. Un client care citește episoade, Season sau callback are nevoie de o altă sursă pentru acele părți. Limita de cereri este pe cheie, deci apelurile în stil OMDb și apelurile în stil TMDB împart un singur buget de 20, 40 sau 120 de cereri pe minut.
Note practice
- Tratează fiecare valoare ca text. Convertește singur
Year,imdbRatingșitotalResultsși trateazăN/Aca lipsă. - Folosește
plot=fulldoar când arăți intriga lungă.shortține răspunsurile mai mici. - Căutările după
isautsunt ținute în cache mai mult decât căutările cus, deci o căutare repetată întoarce răspunsul stocat. - Ca să obții un ID TMDB dintr-un ID IMDb, apelează căutare după ID extern.
- Posterele sunt la
w300. Pentru alte dimensiuni, construiește adresa dinposter_pathîn stil TMDB și din lista de dimensiuni de la imagini. - Ține cheia pe un server. Un
apikeydintr-un URL de pagină este vizibil oricărui vizitator.