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.

14 obsługiwanych języków

JęzykKodPrzykładowy tag
angielskienen-US
rosyjskiruru-RU
ukraińskiukuk-UA
białoruskibebe-BY
chińskizhzh-CN
portugalskiptpt-BR
bułgarskibgbg-BG
hebrajskihehe-IL
czeskicscs-CZ
rumuńskiroro-RO
francuskifrfr-FR
polskiplpl-PL
włoskiitit-IT
hiszpańskieses-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

EndpointZlokalizowana 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/listNazwy gatunków do filtrów i menu
GET /3/movie/{movie_id}/translationsWszystkie języki tytułu w jednej odpowiedzi
GET /3/movie/{movie_id}/imagesPlakaty oznaczone językiem, filtrowane przez include_image_language
GET /3/movie/{movie_id}/videosWideo oznaczone iso_639_1, wszystkie języki w jednej odpowiedzi

Start w 3 krokach

  1. Wybierz plan na stronie cennik. 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.

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;

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.

PoleZnaczenie
iso_639_1, iso_3166_1Kody języka i kraju
english_nameNazwa języka po angielsku
data.title (filmy) lub data.name (TV), data.overview, data.taglineZlokalizowany tekst, tytuł może być pusty
data.homepage, data.runtimeOpcjonalne 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. 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.

ParametrUżywany wPrzykład
include_image_languageEndpointy obrazówru,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.

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 stronZbiór danych tylko po angielskuamodb
JęzykiJedna lokalizacja strony na żądanieAngielski14 języków przez language
To samo ID w różnych językachRóżne adresy URL dla każdej lokalizacjiNie dotyczyWszędzie to samo numeryczne ID
Wszystkie tłumaczenia tytułuPobrać stronę każdej lokalizacjiNie dotyczyJedno wywołanie translations
Zlokalizowane plakatyAdresy URL obrazów według lokalizacjiSprawdź ich dokumentacjęFiltr include_image_language
Tytuł oryginalnyParsować z tekstu stronySprawdź 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.