Отримайте дані фільму 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 дивіться в розділі API зображень.

Іврит і текст справа наліво

Іврит є єдиною мовою з письмом справа наліво серед 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 годин. Безкоштовного тарифу немає. Дивіться ціни.