# API wielojęzycznych metadanych filmów

> To API wielojęzycznych metadanych filmów zwraca tytuły, opisy, slogany, nazwy gatunków i biografie w 14 językach: angielski, rosyjski, ukraiński, białoruski, chiński, portugalski, bułgarski, hebrajski, czeski, rumuński, francuski, polski, włoski i hiszpański. Wystarczy przekazać jeden tag TMDB, na przykład ru-RU, w parametrze language.

## Pobieranie danych filmu w 14 językach

`GET /3/movie/{movie_id}?language=ru-RU` zwraca tytuł, opis, slogan i nazwy gatunków po rosyjsku. Parametr `language` przyjmuje tagi TMDB, takie jak `ru-RU` lub `pt-BR`, i działa na każdym endpoincie zwracającym tekst. ID są takie same w każdym języku, więc jeden wiersz w twojej bazie obsługuje wszystkie.

Dostajesz 14 języków na jednym kluczu, `original_title` każdego filmu, endpoint tłumaczeń, który wypisuje wszystkie języki tytułu, i zlokalizowane nazwy gatunków. Pełna lista jest na stronie [języki](https://amodb.dev/pl/languages/).

## 14 obsługiwanych języków

| Język       | Kod  | Przykładowy tag |
| ----------- | ---- | --------------- |
| angielski   | `en` | `en-US`         |
| rosyjski    | `ru` | `ru-RU`         |
| ukraiński   | `uk` | `uk-UA`         |
| białoruski  | `be` | `be-BY`         |
| chiński     | `zh` | `zh-CN`         |
| portugalski | `pt` | `pt-BR`         |
| bułgarski   | `bg` | `bg-BG`         |
| hebrajski   | `he` | `he-IL`         |
| czeski      | `cs` | `cs-CZ`         |
| rumuński    | `ro` | `ro-RO`         |
| francuski   | `fr` | `fr-FR`         |
| polski      | `pl` | `pl-PL`         |
| włoski      | `it` | `it-IT`         |
| hiszpański  | `es` | `es-ES`         |

Każdy inny tag wraca do `en`. Japoński i koreański nie są obsługiwane jako języki interfejsu. Ich oryginalne tytuły nadal wracają w `original_title` dla filmów i w `original_name` dla seriali.

## Jakie dane dostajesz

| Endpoint                                   | Zlokalizowana treść                                                   |
| ------------------------------------------ | --------------------------------------------------------------------- |
| `GET /3/movie/{movie_id}`                  | `title`, `overview`, `tagline`, nazwy gatunków                        |
| `GET /3/tv/{tv_id}`                        | `name`, `overview`, `tagline`, nazwy gatunków                         |
| `GET /3/tv/{tv_id}/season/{season_number}` | `name` i `overview` sezonu i odcinków                                 |
| `GET /3/person/{person_id}`                | `biography`                                                           |
| `GET /3/genre/movie/list`                  | Nazwy gatunków do filtrów i menu                                      |
| `GET /3/movie/{movie_id}/translations`     | Wszystkie języki tytułu w jednej odpowiedzi                           |
| `GET /3/movie/{movie_id}/images`           | Plakaty oznaczone językiem, filtrowane przez `include_image_language` |
| `GET /3/movie/{movie_id}/videos`           | Wideo oznaczone `iso_639_1`, wszystkie języki w jednej odpowiedzi     |

## Start w 3 krokach

1. Wybierz plan na stronie [cennik](https://amodb.dev/pl/pricing/). Liczba języków nie zależy od planu, zmienia się tylko tempo żądań.
2. Utwórz klucz w panelu konta.
3. Wywołaj dowolny endpoint z tagiem `language` i wyślij klucz jako `api_key` albo w nagłówku Bearer.

## Przykładowe żądanie

Przykład w bashu wypisuje tytuł filmu Fight Club (ID `550`) w trzech językach. Do wypisania jednego pola używa `jq`. Przykład w PHP prosi o białoruski i wraca do angielskiego, gdy opis jest pusty.

```bash
for lang in en-US ru-RU he-IL; do
  curl -s "https://api.amodb.dev/3/movie/550?language=$lang" \
    -H "Authorization: Bearer $AMODB_KEY" | jq -r '.title'
done
```

```php
<?php
function amodb(string $path, array $query = []): array
{
    $url = 'https://api.amodb.dev/3' . $path . '?' . http_build_query($query);
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 10,
        CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('AMODB_KEY')],
    ]);
    $body = curl_exec($ch);
    $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if ($status !== 200) {
        throw new RuntimeException("amodb returned $status");
    }
    return json_decode($body, true);
}

function localizedMovie(int $id, string $lang): array
{
    $movie = amodb("/movie/$id", ['language' => $lang]);
    $movie['text_language'] = $lang;
    if (trim($movie['overview'] ?? '') === '') {
        $fallback = amodb("/movie/$id", ['language' => 'en-US']);
        $movie['overview'] = $fallback['overview'] ?? '';
        $movie['text_language'] = 'en-US';
    }
    return $movie;
}

$movie = localizedMovie(550, 'be-BY');
echo $movie['title'], ' (', $movie['original_title'], ')', PHP_EOL;
echo '[', $movie['text_language'], '] ', $movie['overview'], PHP_EOL;
```

Odpowiedź dla `language=ru-RU`, przycięta do kilku pól. Klucz `text_language` w przykładzie PHP dodaje twój kod, nie API.

```json
{
  "genres": [
    {
      "id": 18,
      "name": "драма"
    },
    {
      "id": 53,
      "name": "триллер"
    }
  ],
  "id": 550,
  "original_language": "en",
  "original_title": "Fight Club",
  "overview": "Сотрудник страховой компании страдает хронической бессонницей и отчаянно пытается вырваться из мучительно скучной жизни. Однажды в очередной командировке он...",
  "poster_path": "/66RvLrRJTm4J8l3uHXWF09AICol.jpg",
  "tagline": "«Интриги. Хаос. Мыло»",
  "title": "Бойцовский клуб"
}
```

## Zapas, gdy pole jest puste

Nie każdy tytuł ma tekst w każdym języku. `overview` może wrócić pusty, gdy tłumaczenie nie istnieje, a `title` lub `tagline` mogą wrócić po angielsku. API nie wymyśla tekstu. Użyj stałej kolejności, aby strona zawsze coś pokazywała:

1. Poproś o język, który wyświetlasz.
2. Jeśli pole jest puste, poproś o to samo ID z `en-US` albo odczytaj angielską pozycję z listy tłumaczeń.
3. Jeśli tytuł jest pusty, pokaż `original_title`.
4. Zapisuj, z jakiego języka pochodzi każde pole, aby móc spróbować ponownie później.

Cache na edge trzyma jedną kopię na język dla każdej ścieżki w cache, więc angielski zapas dla popularnego tytułu zwykle jest serwowany z cache.

## Lista wszystkich tłumaczeń tytułu

`GET /3/movie/{movie_id}/translations` zwraca tablicę `translations`, jedną pozycję na każdy język z danymi. Lista może być dłuższa niż 14 obsługiwanych języków: Fight Club ma 50 pozycji. Użyj jej do zbudowania przełącznika języka albo do zapisania wszystkich tekstów tytułu w jednym wierszu.

| Pole                                                                       | Znaczenie                                  |
| -------------------------------------------------------------------------- | ------------------------------------------ |
| `iso_639_1`, `iso_3166_1`                                                  | Kody języka i kraju                        |
| `english_name`                                                             | Nazwa języka po angielsku                  |
| `data.title` (filmy) lub `data.name` (TV), `data.overview`, `data.tagline` | Zlokalizowany tekst, tytuł może być pusty  |
| `data.homepage`, `data.runtime`                                            | Opcjonalne wartości dla danego tłumaczenia |

Ten sam endpoint istnieje dla seriali i odcinków. Pozycje seriali niosą `data.name` i brak `runtime`, a pozycje odcinków tylko `name` i `overview`. Sezony odpowiadają pustą listą, a osoby i kolekcje nie mają endpointu tłumaczeń. Szczegóły są na stronie [tłumaczenia](https://amodb.dev/pl/translations/). Jedno wywołanie tłumaczeń zastępuje do 14 wywołań szczegółów, gdy chcesz mieć wszystkie języki naraz.

## Plakaty i wideo według języka

Obrazy i wideo niosą własne tagi języka w `iso_639_1`. W endpointach obrazów przekaż listę oddzieloną przecinkami i dodaj `null` dla pozycji bez języka, takich jak plakaty bez tekstu. Odpowiedź zawiera pasujące pozycje, więc uporządkuj je w swoim kodzie.

| Parametr                 | Używany w         | Przykład     |
| ------------------------ | ----------------- | ------------ |
| `include_image_language` | Endpointy obrazów | `ru,en,null` |

Endpointy wideo zwracają wszystkie języki w jednej odpowiedzi i ignorują `include_video_language`, więc filtruj po `iso_639_1` samodzielnie. Rozmiary i CDN opisuje strona [obrazy](https://amodb.dev/pl/images-api/).

## Hebrajski i tekst od prawej do lewej

Hebrajski to jedyny z 14 języków pisany od prawej do lewej. Obsłuż to na stronie, nie w danych:

- Ustaw `lang="he"` i `dir="rtl"` na elemencie z tekstem.
- Łacińskie tytuły wewnątrz hebrajskiego tekstu opakuj elementem `<bdi>`, aby interpunkcja nie skakała na złą stronę.
- Używaj logicznych właściwości CSS, takich jak `margin-inline-start`, zamiast left i right.

## Jak wypada w porównaniu

| Możliwość                     | Własny scraping stron                   | Zbiór danych tylko po angielsku | amodb                             |
| ----------------------------- | --------------------------------------- | ------------------------------- | --------------------------------- |
| Języki                        | Jedna lokalizacja strony na żądanie     | Angielski                       | 14 języków przez `language`       |
| To samo ID w różnych językach | Różne adresy URL dla każdej lokalizacji | Nie dotyczy                     | Wszędzie to samo numeryczne ID    |
| Wszystkie tłumaczenia tytułu  | Pobrać stronę każdej lokalizacji        | Nie dotyczy                     | Jedno wywołanie `translations`    |
| Zlokalizowane plakaty         | Adresy URL obrazów według lokalizacji   | Sprawdź ich dokumentację        | Filtr `include_image_language`    |
| Tytuł oryginalny              | Parsować z tekstu strony                | Sprawdź ich dokumentację        | `original_title`, `original_name` |

## Cennik

Zestaw języków jest taki sam w każdym planie, więc płacisz tylko za tempo i okres. Kup przedpłatę na 1, 3, 6, 12 lub 24 miesiące, ze zniżką 0, 10, 20, 30 lub 40 procent za dłuższe i bez automatycznego odnawiania. Plany z 20, 40 i 120 żądaniami na minutę obejmują każdy język i każdy endpoint. Strona w pięciu językach potrzebuje do pięciu wywołań szczegółów na tytuł, a powtórne żądania są obsługiwane z cache na edge przez 6 godzin. Nie ma darmowego planu. Zobacz [cennik](https://amodb.dev/pl/pricing/).

## Pytania i odpowiedzi

### Jakie języki obsługuje API?

Czternaście: angielski, rosyjski, ukraiński, białoruski, chiński, portugalski, bułgarski, hebrajski, czeski, rumuński, francuski, polski, włoski i hiszpański, z kodami en ru uk be zh pt bg he cs ro fr pl it es.

### Co się stanie, gdy wyślę tag języka, który nie jest obsługiwany?

Odpowiedź wraca do angielskiego. Tag taki jak ja-JP zwraca tekst angielski, a oryginalny japoński tytuł nadal przychodzi w original_title dla filmów i w original_name dla seriali.

### Czy mogę pobrać wszystkie tłumaczenia tytułu jednym żądaniem?

Tak. GET /3/movie/{movie_id}/translations wypisuje jedną pozycję na każdy język z danymi, każdą z title, overview, tagline, homepage i runtime. Seriale i odcinki mają ten sam endpoint, z name zamiast title. Sezony, osoby i kolekcje nie mają tłumaczeń.

### Jak obsłużyć brakujący opis w wybranym języku?

Sprawdź pusty ciąg, potem poproś o to samo ID z en-US albo odczytaj angielską pozycję z listy tłumaczeń. Jako ostatni zapas pokaż original_title i oznacz tekst jako angielski. Tytuły i slogany mogą już wracać po angielsku.

### Czy plakaty też są zlokalizowane?

Plakaty niosą tag języka. Poproś o nie przez include_image_language, na przykład ru,en,null, i uporządkuj dopasowania w swoim kodzie. Pliki obrazów pochodzą z img.amodb.dev i nie wymagają klucza.

## Powiązane strony

- [Języki](https://amodb.dev/pl/languages/): amodb serwuje tytuły, opisy i nazwy w 14 językach. Podaj tag w stylu TMDB, np. ru-RU lub pt-BR, w language; każdy inny tag wraca do angielskiego.
- [API tłumaczeń](https://amodb.dev/pl/translations/): API tłumaczeń filmów ze ścieżkami TMDB v3: odczytaj wszystkie zapisane tytuły, opisy i slogany filmu, serialu lub odcinka we wszystkich językach naraz.
- [API szczegółów filmu](https://amodb.dev/pl/movies/): API szczegółów filmu z tymi samymi ścieżkami i JSON co TMDB v3. Pobierz film po ID, dołącz obsadę, oceny i nastroje przez append_to_response, 14 języków.
- [API szczegółów serialu](https://amodb.dev/pl/tv-series/): API szczegółów serialu z tymi samymi ścieżkami i JSON co TMDB v3. Serial po ID z sezonami, sieciami, klasyfikacją wiekową i dostawcami streamingu.
- [API obrazów i host obrazów](https://amodb.dev/pl/images-api/): API obrazów filmów ze ścieżkami TMDB v3: wypisz plakaty, tła, loga i kadry każdego tytułu, a potem ładuj je z img.amodb.dev w 10 rozmiarach bez klucza.
- [Szybki start](https://amodb.dev/pl/quickstart/): Pierwsze wywołanie amodb: zdobądź klucz, pobierz szczegóły filmu w curl, JavaScript, Python, PHP lub Go, potem załaduj plakat z img.amodb.dev. Poniżej 2 minut.

Zaktualizowano: 2026-10-18. Source: https://amodb.dev/pl/multilingual-movie-metadata-api/
