# Эндпоінт, сумяшчальны з OMDb

> GET https://api.amodb.dev/omdb/ адказвае на запыты ў стылі OMDb з тымі ж назвамі параметраў і палёў. Шукайце назву па IMDb id праз i або па назве праз t, а таксама карыстайцеся пошукам s. Спасылкі на постэры вядуць на img.amodb.dev. Падтрымліваюцца толькі r=json, фільмы і серыялы. Змяніце базавы URL і ключ, і тыповы кліент працягвае працаваць.

## Эндпоінт

`GET /omdb/`

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

Адказ:

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

## Пошук назвы па IMDb id або назве

`GET https://api.amodb.dev/omdb/` вяртае адну назву ў выглядзе плоскага JSON з назвамі палёў OMDb. Перадайце `i` для IMDb id, напрыклад `tt0137523`, або `t` для назвы. Аўтэнтыфікацыя адбываецца праз параметр запыту `apikey`. У адказе `Response` роўны `True` пры поспеху і `False` пры збоі.

У прыкладзе Fight Club загружаецца па IMDb id, а калі `Response` роўны `False`, выконванне спыняецца з тэкстам памылкі 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)
}
```

### Параметры

| Параметр | Дзе   | Абавязковы            | Апісанне                                                          |
| -------- | ----- | --------------------- | ----------------------------------------------------------------- |
| `apikey` | запыт | так                   | Ваш ключ amodb.                                                   |
| `i`      | запыт | адзін з `i`, `t`, `s` | IMDb 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://img.amodb.dev/t/p/w300/`.                                                                                |
| `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.

### Прыклад адказу

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

Для серыяла, напрыклад The Wire (`i=tt0306414`), адказ заканчваецца на `"Type": "series"`, `"totalSeasons": "5"` і `"Response": "True"`.

## Пошук праз s

Адпраўце `s`, каб атрымаць спіс замест адной назвы. На старонцы 10 элементаў, а `totalResults` дае поўную колькасць у выглядзе радка. Запытайце `page=2` для элементаў з 11 па 20 і працягвайце, пакуль не прачытаеце `totalResults` элементаў. Старонка пасля апошняй адказвае `Movie not found!`.

```bash
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`.                                                  |

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

Спіс скарочаны да 2 з 10 элементаў.

## Як чытаць масіў Ratings

`Ratings` змяшчае па адным аб’екце на крыніцу, у кожным ёсць `Source` і `Value`, а `Value` ёсць тэкстам, напрыклад `8.8/10`. Крыніцы: `Internet Movie Database`, `Rotten Tomatoes` і `Metacritic`, і пералічаны толькі тыя, што вядомыя для назвы. Плоскія палі `imdbRating`, `imdbVotes` і `Metascore` паўтараюць частку тых жа даных. Калі патрэбны лік, раздзяліце `Value` па рыссе дробу. Для тыпізаваных лікаў і рэйтынгаў Kinopoisk і TMDB выкарыстоўвайце замест гэтага эндпоінт [рэйтынгі](https://amodb.dev/be/ratings/).

## Памылкі

Збоі пошуку вяртаюць `{"Response":"False","Error":"..."}`. Большасць з іх прыходзіць з 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=json is supported.`                   | 400  | `r` мае любое значэнне, акрамя `json`.                                                                                                |
| `No API key provided.` або `Invalid API key!` | 401  | `apikey` адсутнічае або няправільны.                                                                                                  |
| `Request limit reached!`                      | 429  | Перавышаны ліміт запытаў у хвіліну. Пачакайце `Retry-After` секунд.                                                                   |

Скончаны план адказвае HTTP 402. Гл. [памылкі](https://amodb.dev/be/errors/) і [ліміты запытаў](https://amodb.dev/be/rate-limits/).

## Міграцыя кліента OMDb

Міграцыя складаецца з дзвюх змен: базавы URL і ключ. Больш у запыце нічога не змяняецца.

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

Прыберыце `r=xml`, калі яго адпраўляеце. Кліенту, які чытае эпізоды, `Season` або `callback`, патрэбна іншая крыніца для гэтых частак. Ліміт запытаў дзейнічае на ключ, таму выклікі ў стылі OMDb і [выклікі ў стылі TMDB](https://amodb.dev/be/movies/) падзяляюць адзін бюджэт з 20, 40 або 120 запытаў у хвіліну.

## Практычныя заўвагі

- Лічыце кожнае значэнне тэкстам. Пераўтварайце `Year`, `imdbRating` і `totalResults` самастойна, а `N/A` лічыце адсутнасцю даных.
- Выкарыстоўвайце `plot=full`, толькі калі паказваеце доўгае апісанне сюжэта. `short` робіць адказы меншымі.
- Пошукі па `i` або `t` кэшуюцца даўжэй, чым пошукі праз `s`, таму паўторны запыт вяртае захаваны адказ.
- Каб атрымаць TMDB id па IMDb id, выклічце [пошук па вонкавым ідэнтыфікатары](https://amodb.dev/be/find-by-external-id/).
- Постэры маюць памер `w300`. Для іншых памераў будуйце адрас па `poster_path` у стылі TMDB і спісе памераў са старонкі [выявы](https://amodb.dev/be/images-api/).
- Трымайце ключ на серверы. `apikey` у URL старонкі бачыць кожны наведвальнік.

## Пытанні і адказы

### Ці патрэбны іншы ключ для эндпоінта OMDb?

Не. Той жа ключ з 32 сімвалаў працуе і на шляхах у стылі TMDB, і на эндпоінце OMDb. Перадавайце яго ў параметры запыту apikey, як сёння робіць кліент OMDb.

### Ці можна запытаць XML?

Не. Падтрымліваецца толькі r=json. Запыт з r=xml вяртае HTTP 400 з тэкстам Only r=json is supported., таму прыберыце гэты параметр або задайце json, перш чым мяняць базавы URL.

### Чаму ўсе значэнні з’яўляюцца радкамі?

Цела адпавядае OMDb поле ў поле, а гэты фармат аддае лікі, такія як Year, imdbRating і totalResults, у выглядзе радкоў. Пераўтварайце іх у сваім кодзе. Невядомыя значэнні маюць выгляд N/A.

### Ці падтрымліваюцца сезоны і эпізоды?

Не. Параметры Season, Episode, callback і v ігнаруюцца, а type=episode нічога не знаходзіць. Адказ па серыяле мае totalSeasons, але не мае даных пра эпізоды. Для сезонаў карыстайцеся эндпоінтамі tv у стылі TMDB.

### Адкуль бяруцца постэры?

Поле Poster утрымлівае адрас на img.amodb.dev у памеры w300. Для выяў ключ не патрэбны, таму адрас можна ўставіць прама ў тэг img.

## Звязаныя старонкі

- [Альтэрнатыва OMDb API](https://amodb.dev/be/omdb-api-alternative/): Дайшлі да штодзённага ліміту OMDb або патрэбна болей за адзін запіс за выклік? amodb адказвае на запыты ў стылі OMDb і дае эндпоінты TMDB v3 з тым жа ключом.
- [Пошук па вонкавым ідэнтыфікатары](https://amodb.dev/be/find-by-external-id/): Шукайце фільм, серыял або персону па IMDb, TVDB, Wikidata ці Kinopoisk id праз эндпоінт find TMDB і чытайце вонкавыя id і факты Wikidata для назвы.
- [API дэталяў фільма](https://amodb.dev/be/movies/): API дэталяў фільма з тымі ж шляхамі і JSON, што ў TMDB v3. Адзін фільм па id, а акцёры, рэйтынгі і настрой праз append_to_response, на 14 мовах.
- [API выяў і хост выяў](https://amodb.dev/be/images-api/): API выяў фільмаў з шляхамі TMDB v3: спісы постэраў, фонавых выяў, лагатыпаў і кадраў назвы, а потым загрузка з img.amodb.dev у 10 памерах без ключа.
- [Аўтэнтыфікацыя](https://amodb.dev/be/authentication/): Як перадаваць ключ amodb: api_key у запыце, загаловак Authorization Bearer або apikey для выклікаў OMDb. Фармат ключа, захоўванне, замена і памылкі 401.
- [Хуткі старт](https://amodb.dev/be/quickstart/): Першы выклік да amodb: атрымайце ключ, запытайце дэталі фільма ў curl, JavaScript, Python, PHP або Go і загрузіце постэр з img.amodb.dev. Менш за 2 хвіліны.

Абноўлена: 2026-10-18. Source: https://amodb.dev/be/omdb-endpoint/
