Атрыманне даных фільма на 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 запытаў у хвіліну ўключаюць кожную мову і кожны эндпоінт. Сайту на пяці мовах патрэбна да пяці выклікаў дэталяў на назву, а паўторныя запыты 6 гадзін аддаюцца з edge-кэшу. Бясплатнага тарыфа няма. Гл. цэны.