Отримайте дані фільму 14 мовами
GET / повертає назву, опис, слоган і назви жанрів російською. Параметр language приймає теги TMDB, як-от ru-RU чи pt-BR, і працює на кожному ендпоінті, що повертає текст. Id однакові для всіх мов, тож один рядок у вашій базі даних обслуговує їх усі.
Ви отримуєте 14 мов на одному ключі, original_title кожного фільму, ендпоінт перекладів, що перелічує всі мови тайтла, і локалізовані назви жанрів. Повний список наведено на сторінці мови.
14 підтримуваних мов
| Мова | Код | Приклад тегу |
|---|---|---|
| Англійська | en | en-US |
| Російська | ru | ru-RU |
| Українська | uk | uk-UA |
| Білоруська | be | be-BY |
| Китайська | zh | zh-CN |
| Португальська | pt | pt-BR |
| Болгарська | bg | bg-BG |
| Іврит | he | he-IL |
| Чеська | cs | cs-CZ |
| Румунська | ro | ro-RO |
| Французька | fr | fr-FR |
| Польська | pl | pl-PL |
| Італійська | it | it-IT |
| Іспанська | es | es-ES |
Будь-який інший тег відкочується до en. Японська й корейська не підтримуються як мови інтерфейсу. Їхні оригінальні назви все одно повертаються в original_title для фільмів і original_name для серіалів.
Які дані ви отримуєте
| Ендпоінт | Локалізований вміст |
|---|---|
GET / | title, overview, tagline, назви жанрів |
GET /3/tv/{tv_id} | name, overview, tagline, назви жанрів |
GET / | name і overview сезону та серій |
GET / | biography |
GET / | Назви жанрів для фільтрів і меню |
GET / | Усі мови тайтла в одній відповіді |
GET / | Постери з мовними тегами, фільтруються через include_image_language |
GET / | Відео з тегом iso_639_1, усі мови в одній відповіді |
Почніть за 3 кроки
- Оберіть тариф на сторінці ціни. Кількість мов від тарифу не залежить, змінюється лише частота запитів.
- Створіть ключ у кабінеті акаунта.
- Викличте будь-який ендпоінт з тегом
languageі надішліть ключ якapi_keyабо як заголовок Bearer.
Приклад запиту
Приклад на bash виводить назву Fight Club (id 550) трьома мовами. Для виводу одного поля він використовує jq. Приклад на PHP запитує білоруську та відкочується до англійської, коли опис порожній.
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.
{
"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 не вигадує текст. Дотримуйтесь фіксованого порядку, щоб сторінка завжди щось показувала:
- Запитайте мову, яку ви показуєте.
- Якщо поле порожнє, запитайте
en-USдля того самого id або прочитайте англійський запис зі списку перекладів. - Якщо назва порожня, покажіть
original_title. - Зберігайте, з якої мови взято кожне поле, щоб пізніше повторити спробу.
Edge-кеш тримає одну копію на мову для кожного кешованого шляху, тож англійський запасний варіант для популярного тайтла зазвичай віддається з кешу.
Перелічіть усі переклади тайтла
GET / повертає масив 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 годин. Безкоштовного тарифу немає. Дивіться ціни.