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.

Actualizat Vezi ca Markdown

Caută un titlu după ID IMDb sau după titlu

GET https://api.amodb.dev/omdb/ î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.

bashjspyphpgo
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

  • apikeyinterogareobligatoriu
    Cheia ta amodb.
  • iinterogareuna dintre i, t, s
    ID IMDb al titlului: tt plus 7 până la 9 cifre, de exemplu tt0137523.
  • tinterogareuna dintre i, t, s
    Titlul de căutat, întoarce cea mai bună potrivire.
  • sinterogareuna dintre i, t, s
    Text de căutare de cel puțin 3 litere, întoarce o listă.
  • typeinterogare
    movie sau series. episode nu găsește nimic.
  • yinterogare
    Anul lansării.
  • plotinterogare
    short sau full. Implicit short.
  • pageinterogare
    Pagina rezultatelor de căutare, de la 1 la 100. Se folosește cu s.
  • rinterogare
    Doar json. 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âmpObservații
Title, Year, Rated, Released, RuntimeText. Released arată ca 15 Oct 1999.
Genre, Director, Writer, ActorsNume separate prin virgulă.
Plot, Language, Country, AwardsText.
PosterAdresă pe https://img.amodb.dev/t/p/w300/.
RatingsArray de obiecte cu Source și Value.
Metascore, imdbRating, imdbVotes, imdbIDText, inclusiv numărul de voturi cu virgule.
Typemovie sau series.
DVD, BoxOffice, Production, WebsiteDoar filme. BoxOffice poartă o valoare când se cunoaște. DVD, Production și Website arată mereu N/A.
totalSeasonsDoar seriale, ca text. Răspunsurile de seriale nu au DVD, BoxOffice, Production sau Website.
ResponseTrue 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

JSON
{
  "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
curl -sf "https://api.amodb.dev/omdb/?s=Matrix&type=movie&page=1&apikey=$AMODB_KEY"
CâmpObservații
SearchArray de până la 10 elemente cu Title, Year, imdbID, Type, Poster.
totalResultsNumărul tuturor potrivirilor, ca șir.
ResponseTrue sau False.
JSON
{
  "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","Error":"..."}. Majoritatea vin cu HTTP 200, deci citește Error și ramifică după text, nu doar după starea HTTP.

Text ErrorHTTPCând
Movie not found!200Niciun 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.200Valoarea i nu are forma unui ID IMDb.
Too many results.200Textul 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.200Nu s-a trimis niciunul dintre i, t și s.
Only r=json is supported.400r este setat la altceva decât json.
No API key provided. sau Invalid API key!401apikey lipsește sau este greșit.
Request limit reached!429Ai 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ă.

JavaScript
// 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 și totalResults și tratează N/A ca lipsă.
  • Folosește plot=full doar când arăți intriga lungă. short ține răspunsurile mai mici.
  • Căutările după i sau t sunt ținute în cache mai mult decât căutările cu s, 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 din poster_path în stil TMDB și din lista de dimensiuni de la imagini.
  • Ține cheia pe un server. Un apikey dintr-un URL de pagină este vizibil oricărui vizitator.