Endpoint kompatibilní s OMDb

GET https://api.amodb.dev/omdb/ odpovídá na požadavky ve stylu OMDb se stejnými názvy parametrů a polí. Titul najdete podle ID z IMDb přes i nebo podle názvu přes t, případně hledáte přes s. Odkazy na plakáty ukazují na img.amodb.dev. Poskytují se jen r=json, filmy a seriály. Změňte základní URL a klíč a typický klient funguje dál.

Aktualizováno Zobrazit jako Markdown

Vyhledání titulu podle ID z IMDb nebo názvu

GET https://api.amodb.dev/omdb/ vrací jeden titul jako plochý JSON s názvy polí OMDb. Předejte i pro ID z IMDb, například tt0137523, nebo t pro název. Ověření je parametr dotazu apikey. Odpověď má Response nastavené na True při úspěchu a False při selhání.

Ukázka načte Fight Club podle ID z IMDb a při Response rovném False skončí s textem chyby OMDb.

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)
}

Parametry

  • apikeyquerypovinný
    Váš klíč amodb.
  • iqueryjeden z i, t, s
    ID titulu z IMDb: tt plus 7 až 9 číslic, například tt0137523.
  • tqueryjeden z i, t, s
    Název k vyhledání, vrací nejlepší shodu.
  • squeryjeden z i, t, s
    Hledaný text o délce alespoň 3 písmen, vrací seznam.
  • typequery
    movie nebo series. episode nic nenajde.
  • yquery
    Rok vydání.
  • plotquery
    short nebo full. Výchozí short.
  • pagequery
    Stránka výsledků hledání, 1 až 100. Používá se s s.
  • rquery
    Jen json. Jakákoli jiná hodnota vrací HTTP 400.

Parametry Season, Episode, callback a v z původního API OMDb se nepodporují a ignorují se.

Pole odpovědi

PolePoznámky
Title, Year, Rated, Released, RuntimeText. Released se čte například 15 Oct 1999.
Genre, Director, Writer, ActorsJména oddělená čárkami.
Plot, Language, Country, AwardsText.
PosterAdresa na https://img.amodb.dev/t/p/w300/.
RatingsPole objektů se Source a Value.
Metascore, imdbRating, imdbVotes, imdbIDText, včetně počtu hlasů s čárkami.
Typemovie nebo series.
DVD, BoxOffice, Production, WebsiteJen filmy. BoxOffice nese hodnotu, když je známa. DVD, Production a Website se vždy čtou N/A.
totalSeasonsJen seriály, jako text. Odpovědi seriálů nemají DVD, BoxOffice, Production ani Website.
ResponseTrue nebo False, vždy řetězec.

Pole odpovídají OMDb, takže stávající parser OMDb nepotřebuje žádnou změnu kromě základní URL.

Příklad odpovědi

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"
}

U seriálu, například The Wire (i=tt0306414), odpověď končí "Type": "series", "totalSeasons": "5" a "Response": "True".

Hledání přes s

Pošlete s a místo jednoho titulu dostanete seznam. Každá stránka obsahuje 10 položek a totalResults udává celkový počet jako řetězec. Vyžádejte page=2 pro položky 11 až 20 a pokračujte, dokud nepřečtete totalResults položek. Stránka za poslední odpoví Movie not found!.

curl
curl -sf "https://api.amodb.dev/omdb/?s=Matrix&type=movie&page=1&apikey=$AMODB_KEY"
PolePoznámky
SearchPole až 10 položek s Title, Year, imdbID, Type, Poster.
totalResultsPočet všech shod jako řetězec.
ResponseTrue nebo 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"
}

Seznam je zkrácen na 2 z 10 položek.

Čtení pole Ratings

Ratings obsahuje jeden objekt na zdroj, každý se Source a Value, a Value je text jako 8.8/10. Zdroje jsou Internet Movie Database, Rotten Tomatoes a Metacritic a uvedeny jsou jen ty, které jsou pro titul známé. Plochá pole imdbRating, imdbVotes a Metascore opakují část týchž dat. Chcete-li číslo, rozdělte Value podle lomítka. Pro typovaná čísla a skóre z Kinopoisku a TMDB použijte místo toho endpoint hodnocení.

Chyby

Selhání vyhledání vracejí {"Response":"False","Error":"..."}. Většina přichází s HTTP 200, čtěte proto Error a větvete podle textu, ne jen podle stavu HTTP.

Text ErrorHTTPKdy
Movie not found!200Žádný titul neodpovídá t, hodnota i je platná, ale neznámá, nebo je stránka hledání za poslední.
Incorrect IMDb ID.200Hodnota i nemá tvar ID z IMDb.
Too many results.200Hledaný text je kratší než 3 písmena nebo odpovídá příliš mnoha titulům. Prodlužte text nebo přidejte type či y.
Something went wrong.200Nebylo odesláno žádné z i, t a s.
Only r=json is supported.400r je nastaveno na cokoli jiného než json.
No API key provided. nebo Invalid API key!401apikey chybí nebo je nesprávný.
Request limit reached!429Překročen počet požadavků za minutu. Počkejte tolik sekund, kolik říká Retry-After.

Skončený tarif odpovídá HTTP 402. Viz chyby a limity požadavků.

Migrace klienta OMDb

Migrace jsou dvě úpravy: základní URL a klíč. Nic dalšího v požadavku se nemění.

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;

Odstraňte r=xml, pokud ho posíláte. Klient, který čte epizody, Season nebo callback, potřebuje pro tyto části jiný zdroj. Limit požadavků platí na klíč, takže volání ve stylu OMDb a volání ve stylu TMDB sdílejí jeden rozpočet 20, 40 nebo 120 požadavků za minutu.

Praktické poznámky

  • Berte každou hodnotu jako text. Year, imdbRating a totalResults převeďte sami a N/A berte jako chybějící.
  • plot=full používejte jen tehdy, když zobrazujete dlouhý děj. short drží odpovědi menší.
  • Vyhledání přes i nebo t se cachují déle než hledání přes s, takže opakované vyhledání vrací uloženou odpověď.
  • ID z TMDB získáte z ID z IMDb voláním hledání podle externího ID.
  • Plakáty jsou ve velikosti w300. Pro jiné velikosti sestavte adresu z poster_path ve stylu TMDB a seznamu velikostí na stránce obrázky.
  • Klíč držte na serveru. apikey v URL stránky vidí každý návštěvník.