Získání dat filmu ve 14 jazycích

GET /3/movie/{movie_id}?language=ru-RU vrací název, popis, slogan a názvy žánrů rusky. Parametr language přijímá tagy TMDB jako ru-RU nebo pt-BR a funguje na každém endpointu, který vrací text. ID zůstávají ve všech jazycích stejná, takže jeden řádek ve vaší databázi slouží všem.

Dostanete 14 jazyků na jeden klíč, original_title každého filmu, endpoint překladů, který vypíše všechny jazyky titulu, a lokalizované názvy žánrů. Úplný seznam je na stránce jazyky.

14 podporovaných jazyků

JazykKódPříklad tagu
angličtinaenen-US
ruštinaruru-RU
ukrajinštinaukuk-UA
běloruštinabebe-BY
čínštinazhzh-CN
portugalštinaptpt-BR
bulharštinabgbg-BG
hebrejštinahehe-IL
češtinacscs-CZ
rumunštinaroro-RO
francouzštinafrfr-FR
polštinaplpl-PL
italštinaitit-IT
španělštinaeses-ES

Jakýkoli jiný tag se vrátí k en. Japonština a korejština se jako jazyky rozhraní nepodporují. Jejich původní názvy stále přijdou v original_title u filmů a v original_name u seriálů.

Jaká data dostanete

EndpointLokalizovaný obsah
GET /3/movie/{movie_id}title, overview, tagline, názvy žánrů
GET /3/tv/{tv_id}name, overview, tagline, názvy žánrů
GET /3/tv/{tv_id}/season/{season_number}name a overview sezóny a epizod
GET /3/person/{person_id}biography
GET /3/genre/movie/listNázvy žánrů pro filtry a menu
GET /3/movie/{movie_id}/translationsVšechny jazyky titulu v jedné odpovědi
GET /3/movie/{movie_id}/imagesPlakáty označené jazykem, filtrované přes include_image_language
GET /3/movie/{movie_id}/videosVidea označená iso_639_1, všechny jazyky v jedné odpovědi

Začněte ve 3 krocích

  1. Vyberte tarif na stránce ceník. Počet jazyků se s tarifem nemění, mění se jen rychlost požadavků.
  2. Vytvořte klíč v panelu účtu.
  3. Zavolejte libovolný endpoint s tagem language a klíč pošlete jako api_key nebo v hlavičce Bearer.

Příklad požadavku

Ukázka v bashi vypíše název filmu Fight Club (ID 550) ve třech jazycích. K vypsání jednoho pole používá jq. Ukázka v PHP si vyžádá běloruštinu a když je popis prázdný, vrátí se k angličtině.

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

Odpověď pro language=ru-RU, zkrácená na několik polí. Klíč text_language v ukázce v PHP přidává váš kód, ne 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": "Бойцовский клуб"
}

Záloha, když je pole prázdné

Ne každý titul má text v každém jazyce. overview se může vrátit prázdný, když překlad neexistuje, a title nebo tagline se mohou vrátit anglicky. API texty nevymýšlí. Použijte pevné pořadí, aby stránka vždy něco zobrazila:

  1. Vyžádejte jazyk, který zobrazujete.
  2. Když je pole prázdné, vyžádejte stejné ID s en-US, nebo přečtěte anglickou položku ze seznamu překladů.
  3. Když je název prázdný, zobrazte original_title.
  4. Ukládejte, z jakého jazyka každé pole pochází, abyste to mohli později zkusit znovu.

Cache na edge drží jednu kopii na jazyk pro každou cachovanou cestu, takže anglická záloha pro oblíbený titul se obvykle obslouží z cache.

Výpis všech překladů titulu

GET /3/movie/{movie_id}/translations vrací pole translations, jednu položku na každý jazyk, který má data. Seznam může být delší než 14 podporovaných jazyků: Fight Club má 50 položek. Použijte jej k sestavení přepínače jazyků nebo k uložení všech textů titulu do jednoho řádku.

PoleVýznam
iso_639_1, iso_3166_1Kódy jazyka a země
english_nameNázev jazyka anglicky
data.title (filmy) nebo data.name (TV), data.overview, data.taglineLokalizovaný text, název může být prázdný
data.homepage, data.runtimeVolitelné hodnoty pro daný překlad

Stejný endpoint existuje pro seriály a epizody. Položky seriálů nesou data.name a žádné runtime, položky epizod jen name a overview. Sezóny odpovídají prázdným seznamem a osoby ani kolekce endpoint překladů nemají. Podrobnosti jsou na stránce překlady. Jedno volání překladů nahradí až 14 volání detailů, když chcete všechny jazyky najednou.

Plakáty a videa podle jazyka

Obrázky a videa nesou vlastní jazykové tagy v iso_639_1. Na endpointech obrázků předejte seznam oddělený čárkami a pro položky bez jazyka, například plakáty bez textu, přidejte null. Odpověď obsahuje odpovídající položky, shody tedy řaďte ve svém kódu.

ParametrPoužitíPříklad
include_image_languageEndpointy obrázkůru,en,null

Endpointy videí vrací všechny jazyky v jedné odpovědi a include_video_language ignorují, filtrujte proto podle iso_639_1 sami. Velikosti a CDN viz obrázky.

Hebrejština a text zprava doleva

Hebrejština je jediný z 14 jazyků psaný zprava doleva. Řešte to ve stránce, ne v datech:

  • Nastavte lang="he" a dir="rtl" na prvku s textem.
  • Latinské názvy uvnitř hebrejského textu obalte prvkem <bdi>, aby interpunkce neskákala na špatnou stranu.
  • Používejte logické vlastnosti CSS jako margin-inline-start místo left a right.

Jak si stojí v porovnání

SchopnostScrapování stránek vlastními silamiDataset jen v angličtiněamodb
JazykyJedna lokalizace webu na požadavekAngličtina14 jazyků přes language
Stejné ID napříč jazykyJiné URL pro každou lokalizaciNetýká seVšude stejné číselné ID
Všechny překlady tituluStáhnout stránku každé lokalizaceNetýká seJedno volání translations
Lokalizované plakátyURL obrázků podle lokalizacePodívejte se do jejich dokumentaceFiltr include_image_language
Původní názevParsovat z textu stránkyPodívejte se do jejich dokumentaceoriginal_title, original_name

Ceník

Sada jazyků je u každého tarifu stejná, platíte tedy jen za rychlost a období. Kupte si předplatné na 1, 3, 6, 12 nebo 24 měsíců, u delších je sleva 0, 10, 20, 30 nebo 40 procent a bez automatického obnovení. Tarify s 20, 40 a 120 požadavky za minutu zahrnují všechny jazyky a všechny endpointy. Web v pěti jazycích potřebuje až pět volání detailů na titul a opakované požadavky se obsluhují z cache na edge po 6 hodin. Bezplatný tarif neexistuje. Viz ceník.