# 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.

## Endpoint

`GET /omdb/`

```bash
curl "https://api.amodb.dev/omdb/?i=tt0137523&plot=short&apikey=$AMODB_KEY"
```

Odpověď:

```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/pfPob0mrC1KiPVP9NXZnqvpks9u.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"
}
```

## 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.

```bash
curl -sf "https://api.amodb.dev/omdb/?i=tt0137523&plot=short&apikey=$AMODB_KEY"
```

```js
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);
```

```python
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
<?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;
```

```go
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

| Parametr | Kde   | Povinný               | Popis                                                             |
| -------- | ----- | --------------------- | ----------------------------------------------------------------- |
| `apikey` | query | ano                   | Váš klíč amodb.                                                   |
| `i`      | query | jeden z `i`, `t`, `s` | ID titulu z IMDb: `tt` plus 7 až 9 číslic, například `tt0137523`. |
| `t`      | query | jeden z `i`, `t`, `s` | Název k vyhledání, vrací nejlepší shodu.                          |
| `s`      | query | jeden z `i`, `t`, `s` | Hledaný text o délce alespoň 3 písmen, vrací seznam.              |
| `type`   | query | ne                    | `movie` nebo `series`. `episode` nic nenajde.                     |
| `y`      | query | ne                    | Rok vydání.                                                       |
| `plot`   | query | ne                    | `short` nebo `full`. Výchozí `short`.                             |
| `page`   | query | ne                    | Stránka výsledků hledání, 1 až 100. Používá se s `s`.             |
| `r`      | query | ne                    | 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

| Pole                                             | Poznámky                                                                                                |
| ------------------------------------------------ | ------------------------------------------------------------------------------------------------------- |
| `Title`, `Year`, `Rated`, `Released`, `Runtime`  | Text. `Released` se čte například `15 Oct 1999`.                                                        |
| `Genre`, `Director`, `Writer`, `Actors`          | Jména oddělená čárkami.                                                                                 |
| `Plot`, `Language`, `Country`, `Awards`          | Text.                                                                                                   |
| `Poster`                                         | Adresa na `https://img.amodb.dev/t/p/w300/`.                                                            |
| `Ratings`                                        | Pole objektů se `Source` a `Value`.                                                                     |
| `Metascore`, `imdbRating`, `imdbVotes`, `imdbID` | Text, včetně počtu hlasů s čárkami.                                                                     |
| `Type`                                           | `movie` nebo `series`.                                                                                  |
| `DVD`, `BoxOffice`, `Production`, `Website`      | Jen filmy. `BoxOffice` nese hodnotu, když je známa. `DVD`, `Production` a `Website` se vždy čtou `N/A`. |
| `totalSeasons`                                   | Jen seriály, jako text. Odpovědi seriálů nemají `DVD`, `BoxOffice`, `Production` ani `Website`.         |
| `Response`                                       | `True` 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!`.

```bash
curl -sf "https://api.amodb.dev/omdb/?s=Matrix&type=movie&page=1&apikey=$AMODB_KEY"
```

| Pole           | Poznámky                                                          |
| -------------- | ----------------------------------------------------------------- |
| `Search`       | Pole až 10 položek s `Title`, `Year`, `imdbID`, `Type`, `Poster`. |
| `totalResults` | Počet všech shod jako řetězec.                                    |
| `Response`     | `True` 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í](https://amodb.dev/cs/ratings/).

## 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 `Error`                                   | HTTP | Kdy                                                                                                                  |
| ---------------------------------------------- | ---- | -------------------------------------------------------------------------------------------------------------------- |
| `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.`                           | 200  | Hodnota `i` nemá tvar ID z IMDb.                                                                                     |
| `Too many results.`                            | 200  | Hledaný 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.`                        | 200  | Nebylo odesláno žádné z `i`, `t` a `s`.                                                                              |
| `Only r=json is supported.`                    | 400  | `r` je nastaveno na cokoli jiného než `json`.                                                                        |
| `No API key provided.` nebo `Invalid API key!` | 401  | `apikey` chybí nebo je nesprávný.                                                                                    |
| `Request limit reached!`                       | 429  | Př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](https://amodb.dev/cs/errors/) a [limity požadavků](https://amodb.dev/cs/rate-limits/).

## Migrace klienta OMDb

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

```js
// 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](https://amodb.dev/cs/movies/) 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](https://amodb.dev/cs/find-by-external-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](https://amodb.dev/cs/images-api/).
- Klíč držte na serveru. `apikey` v URL stránky vidí každý návštěvník.

## Otázky a odpovědi

### Potřebuji pro endpoint OMDb jiný klíč?

Ne. Stejný 32znakový klíč funguje na cestách ve stylu TMDB i na endpointu OMDb. Pošlete jej jako parametr dotazu apikey, přesně jak to dnes dělá klient OMDb.

### Mohu si vyžádat XML?

Ne. Poskytuje se jen r=json. Požadavek s r=xml vrací HTTP 400 s textem Only r=json is supported., odstraňte proto tento parametr nebo ho před změnou základní URL nastavte na json.

### Proč jsou všechny hodnoty řetězce?

Tělo odpovídá OMDb pole po poli a tento formát posílá čísla jako Year, imdbRating a totalResults jako řetězce. Převeďte je ve svém kódu. Neznámé hodnoty se čtou jako N/A.

### Podporují se sezóny a epizody?

Ne. Parametry Season, Episode, callback a v se ignorují a type=episode nic nenajde. Odpověď seriálu má totalSeasons, ale žádná data epizod. Pro sezóny použijte endpointy seriálů ve stylu TMDB.

### Odkud se berou plakáty?

Pole Poster obsahuje adresu na img.amodb.dev ve velikosti w300. Obrázky klíč nepotřebují, takže adresu můžete vložit přímo do značky img.

## Související stránky

- [Alternativa k OMDb API](https://amodb.dev/cs/omdb-api-alternative/): Narazili jste na denní limit OMDb nebo potřebujete víc než jeden záznam? amodb odpovídá na požadavky ve stylu OMDb a nabízí i TMDB v3 s jedním klíčem.
- [Hledání podle externího ID](https://amodb.dev/cs/find-by-external-id/): Najděte film, seriál nebo osobu podle ID z IMDb, TVDB, Wikidata nebo Kinopoisk přes endpoint find TMDB a čtěte externí ID a fakta z Wikidata o titulu.
- [API detailu filmu](https://amodb.dev/cs/movies/): API detailu filmu se stejnými cestami a JSON jako TMDB v3. Načtěte film podle ID, přidejte obsazení, hodnocení a nálady přes append_to_response, 14 jazyků.
- [API obrázků a hostitel obrázků](https://amodb.dev/cs/images-api/): API obrázků filmů s cestami TMDB v3: vypište plakáty, pozadí, loga a záběry každého titulu a načtěte je z img.amodb.dev v 10 velikostech bez klíče.
- [Autentizace](https://amodb.dev/cs/authentication/): Jak poslat klíč amodb: api_key v dotazu, hlavička Authorization Bearer nebo apikey pro volání OMDb. Formát klíče, uložení, rotace a chyby 401.
- [Rychlý start](https://amodb.dev/cs/quickstart/): První volání amodb: získejte klíč, vyžádejte detail filmu v curl, JavaScriptu, Pythonu, PHP nebo Go a načtěte plakát z img.amodb.dev. Za méně než 2 minuty.

Aktualizováno: 2026-10-18. Source: https://amodb.dev/cs/omdb-endpoint/
