Вземане на данни за филм на 14 езика

GET /3/movie/{movie_id}?language=ru-RU връща заглавието, описанието, слогана и имената на жанровете на руски. Параметърът language приема тагове на TMDB като ru-RU или pt-BR и работи на всеки ендпойнт, който връща текст. Id остават същите на всеки език, така че един ред във вашата база данни обслужва всички.

Получавате 14 езика на един ключ, original_title на всеки филм, ендпойнт за преводи, който изброява всички езици на заглавие, и локализирани имена на жанрове. Пълният списък е на страницата езици.

14-те обслужвани езика

ЕзикКодПримерен таг
Английскиenen-US
Рускиruru-RU
Украинскиukuk-UA
Беларускиbebe-BY
Китайскиzhzh-CN
Португалскиptpt-BR
Българскиbgbg-BG
Ивритhehe-IL
Чешкиcscs-CZ
Румънскиroro-RO
Френскиfrfr-FR
Полскиplpl-PL
Италианскиitit-IT
Испанскиeses-ES

Всеки друг таг се заменя с en. Японският и корейският не се обслужват като езици на интерфейса. Оригиналните им заглавия пак се връщат в original_title за филми и original_name за сериали.

Какви данни получавате

ЕндпойнтЛокализирано съдържание
GET /3/movie/{movie_id}title, overview, tagline, имена на жанрове
GET /3/tv/{tv_id}name, overview, tagline, имена на жанрове
GET /3/tv/{tv_id}/season/{season_number}name и overview на сезона и епизодите
GET /3/person/{person_id}biography
GET /3/genre/movie/listИмена на жанрове за филтри и менюта
GET /3/movie/{movie_id}/translationsВсички езици на заглавие в един отговор
GET /3/movie/{movie_id}/imagesПостери с таг за език, филтрират се с include_image_language
GET /3/movie/{movie_id}/videosВидеа с таг iso_639_1, всички езици в един отговор

Започнете в 3 стъпки

  1. Изберете план на страницата с цените. Броят езици не зависи от плана, променя се само скоростта на заявките.
  2. Създайте ключ в личния си профил.
  3. Извикайте всеки ендпойнт с таг language и подайте ключа като api_key или в заглавка Bearer.

Пример със заявка

Bash примерът отпечатва заглавието на Fight Club (id 550) на три езика. Ползва jq, за да изведе едно поле. PHP примерът иска беларуски и се връща към английски, когато описанието е празно.

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;

Отговор за language=ru-RU, съкратен до няколко полета. Ключът text_language в PHP примера се добавя от вашия код, а не от 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": "Бойцовский клуб"
}

Резервен вариант, когато поле е празно

Не всяко заглавие има текст на всеки език. overview може да се върне празен, когато няма превод, а title или tagline може да се върнат на английски. API не измисля текст. Ползвайте фиксиран ред, за да показва страницата винаги нещо:

  1. Поискайте езика, който показвате.
  2. Ако поле е празно, поискайте en-US за същото id или прочетете английския запис от списъка с преводи.
  3. Ако заглавието е празно, показвайте original_title.
  4. Пазете от кой език идва всяко поле, за да можете да опитате отново по-късно.

Edge кешът държи по едно копие на език за всеки кеширан път, така че английският резервен вариант за популярно заглавие обикновено се обслужва от кеша.

Списък с всички преводи на заглавие

GET /3/movie/{movie_id}/translations връща масив translations, по един запис за всеки език, който има данни. Списъкът може да е по-дълъг от 14-те обслужвани езика: Fight Club има 50 записа. Ползвайте го, за да построите превключвател на езици или да запазите всички текстове на заглавие в един ред.

ПолеЗначение
iso_639_1, iso_3166_1Кодове на език и държава
english_nameИме на езика на английски
data.title (филми) или data.name (сериали), data.overview, data.taglineЛокализиран текст, заглавието може да е празно
data.homepage, data.runtimeНезадължителни стойности за този превод

Същият ендпойнт съществува за сериали и епизоди. Записите за сериали носят data.name и нямат runtime, а записите за епизоди носят само name и overview. Сезоните отговарят с празен списък, а личностите и колекциите нямат ендпойнт за преводи. Подробности има на страницата преводи. Едно извикване за преводи замества до 14 извиквания за детайли, когато искате всички езици наведнъж.

Постери и видеа по език

Снимките и видеата носят собствени тагове за език в iso_639_1. На ендпойнтите за изображения подайте списък, разделен със запетая, и добавете null за елементи без език, например постери без текст. Отговорът съдържа съвпадащите елементи, така че подредете ги във вашия код.

ПараметърКъде се ползваПример
include_image_languageЕндпойнти за изображенияru,en,null

Ендпойнтите за видеа връщат всички езици в един отговор и игнорират include_video_language, затова филтрирайте по iso_639_1 сами. Вижте изображения за размерите и CDN.

Иврит и текст отдясно наляво

Ивритът е единственият език отдясно наляво от 14-те. Обработвайте го в страницата, а не в данните:

  • Задайте lang="he" и dir="rtl" на елемента, който държи текста.
  • Обгръщайте латинските заглавия вътре в иврит текст в елемент <bdi>, за да не прескача пунктуацията на грешната страна.
  • Ползвайте логически CSS свойства като margin-inline-start вместо left и right.

Как се сравнява

ВъзможностСами да обработвате странициНабор от данни само на английскиamodb
ЕзициЕдна локализация на сайт на заявкаАнглийски14 езика чрез language
Същото id на всички езициРазлични URL адреси за всяка локализацияНе се прилагаСъщото числово id навсякъде
Всички преводи на заглавиеИзтегляне на страницата на всяка локализацияНе се прилагаЕдно извикване translations
Локализирани постериURL адреси на изображения за всяка локализацияВижте документацията имФилтър include_image_language
Оригинално заглавиеРазчитане от текста на страницатаВижте документацията имoriginal_title, original_name

Цени

Наборът от езици е един и същ при всеки план, така че плащате само за скорост и период. Купете предплатени 1, 3, 6, 12 или 24 месеца, с отстъпка 0, 10, 20, 30 или 40 процента за по-дългите и без автоматично подновяване. Плановете за 20, 40 и 120 заявки в минута включват всеки език и всеки ендпойнт. Сайт на пет езика има нужда от до пет извиквания за детайли на заглавие, а повторните заявки се обслужват от edge кеша 6 часа. Няма безплатен план. Вижте цени.