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

## Endpoint

`GET /omdb/`

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

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

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

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

### Parametri

| Parametru | Loc        | Obligatoriu              | Descriere                                                                 |
| --------- | ---------- | ------------------------ | ------------------------------------------------------------------------- |
| `apikey`  | interogare | da                       | Cheia ta amodb.                                                           |
| `i`       | interogare | una dintre `i`, `t`, `s` | ID IMDb al titlului: `tt` plus 7 până la 9 cifre, de exemplu `tt0137523`. |
| `t`       | interogare | una dintre `i`, `t`, `s` | Titlul de căutat, întoarce cea mai bună potrivire.                        |
| `s`       | interogare | una dintre `i`, `t`, `s` | Text de căutare de cel puțin 3 litere, întoarce o listă.                  |
| `type`    | interogare | nu                       | `movie` sau `series`. `episode` nu găsește nimic.                         |
| `y`       | interogare | nu                       | Anul lansării.                                                            |
| `plot`    | interogare | nu                       | `short` sau `full`. Implicit `short`.                                     |
| `page`    | interogare | nu                       | Pagina rezultatelor de căutare, de la 1 la 100. Se folosește cu `s`.      |
| `r`       | interogare | nu                       | 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â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://img.amodb.dev/t/p/w300/`.                                                                   |
| `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

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

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

```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](https://amodb.dev/ro/ratings/).

## 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 `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=json is supported.`                   | 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](https://amodb.dev/ro/errors/) și [limite de cereri](https://amodb.dev/ro/rate-limits/).

## Migrează un client OMDb

Migrarea înseamnă două modificări: URL-ul de bază și cheia. Nimic altceva din cerere nu se schimbă.

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

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](https://amodb.dev/ro/movies/) î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](https://amodb.dev/ro/find-by-external-id/).
- Posterele sunt la `w300`. Pentru alte dimensiuni, construiește adresa din `poster_path` în stil TMDB și din lista de dimensiuni de la [imagini](https://amodb.dev/ro/images-api/).
- Ține cheia pe un server. Un `apikey` dintr-un URL de pagină este vizibil oricărui vizitator.

## Întrebări și răspunsuri

### Am nevoie de o altă cheie pentru endpoint-ul OMDb?

Nu. Aceeași cheie de 32 de caractere funcționează pe căile în stil TMDB și pe endpoint-ul OMDb. Trimite-o ca parametru de interogare apikey, exact cum face azi un client OMDb.

### Pot cere XML?

Nu. Se servește doar r=json. O cerere cu r=xml întoarce HTTP 400 cu textul Only r=json is supported., deci elimină acel parametru sau setează-l la json înainte să schimbi URL-ul de bază.

### De ce sunt toate valorile șiruri?

Corpul urmează OMDb câmp cu câmp, iar acel format trimite numere precum Year, imdbRating și totalResults ca șiruri. Convertește-le în propriul cod. Valorile necunoscute arată N/A.

### Sunt acceptate sezoanele și episoadele?

Nu. Parametrii Season, Episode, callback și v sunt ignorați, iar type=episode nu găsește nimic. Un răspuns de serial are totalSeasons, dar nu are date despre episoade. Folosește endpoint-urile tv în stil TMDB pentru sezoane.

### De unde vin posterele?

Câmpul Poster conține o adresă de pe img.amodb.dev la dimensiunea w300. Imaginile nu cer cheie, deci poți pune adresa direct într-un tag img.

## Pagini conexe

- [Alternativă la API-ul OMDb](https://amodb.dev/ro/omdb-api-alternative/): Ai atins limita zilnică OMDb sau vrei mai mult de o înregistrare pe apel? amodb răspunde cererilor în stil OMDb și servește și TMDB v3, cu aceeași cheie.
- [Căutare după ID extern](https://amodb.dev/ro/find-by-external-id/): Caută un film, serial sau o persoană după ID IMDb, TVDB, Wikidata sau Kinopoisk cu endpoint-ul find și citește ID-urile externe și faptele Wikidata.
- [API detalii film](https://amodb.dev/ro/movies/): API detalii film cu aceleași căi și același JSON ca TMDB v3. Preia un film după ID, adaugă credite, evaluări și atmosferă cu append_to_response, în 14 limbi.
- [API imagini și gazdă de imagini](https://amodb.dev/ro/images-api/): API imagini filme cu căi TMDB v3: listează postere, imagini de fundal, logouri și cadre, apoi încarcă-le de la img.amodb.dev în 10 dimensiuni, fără cheie.
- [Autentificare](https://amodb.dev/ro/authentication/): Cum trimiți cheia amodb: api_key în interogare, antetul Authorization Bearer sau apikey pentru apelurile OMDb. Format, stocare, rotire și erorile 401.
- [Ghid rapid](https://amodb.dev/ro/quickstart/): Fă primul apel amodb: ia o cheie, cere detaliile unui film în curl, JavaScript, Python, PHP sau Go, apoi încarcă posterul de pe img.amodb.dev. Sub 2 minute.

Actualizat: 2026-10-18. Source: https://amodb.dev/ro/omdb-endpoint/
