Obtén datos de películas en 14 idiomas
GET / devuelve el título, la sinopsis, el eslogan y los nombres de géneros en ruso. El parámetro language acepta etiquetas de TMDB como ru-RU o pt-BR y funciona en todos los endpoints que devuelven texto. Los ids son los mismos en todos los idiomas, así que una fila de tu base de datos sirve para todos.
Obtienes 14 idiomas con una sola clave, el original_title de cada película, un endpoint de traducciones que lista todos los idiomas de un título y nombres de géneros localizados. La lista completa está en idiomas.
Los 14 idiomas disponibles
| Idioma | Código | Etiqueta de ejemplo |
|---|---|---|
| Inglés | en | en-US |
| Ruso | ru | ru-RU |
| Ucraniano | uk | uk-UA |
| Bielorruso | be | be-BY |
| Chino | zh | zh-CN |
| Portugués | pt | pt-BR |
| Búlgaro | bg | bg-BG |
| Hebreo | he | he-IL |
| Checo | cs | cs-CZ |
| Rumano | ro | ro-RO |
| Francés | fr | fr-FR |
| Polaco | pl | pl-PL |
| Italiano | it | it-IT |
| Español | es | es-ES |
Cualquier otra etiqueta recurre a en. El japonés y el coreano no se sirven como idiomas de interfaz. Sus títulos originales siguen llegando en original_title para películas y en original_name para series de TV.
Qué datos obtienes
| Endpoint | Contenido localizado |
|---|---|
GET / | title, overview, tagline, nombres de géneros |
GET /3/tv/{tv_id} | name, overview, tagline, nombres de géneros |
GET / | name y overview de la temporada y de sus episodios |
GET / | biography |
GET / | Nombres de géneros para filtros y menús |
GET / | Todos los idiomas de un título en una sola respuesta |
GET / | Pósters etiquetados por idioma, filtrados con include_image_language |
GET / | Vídeos etiquetados por iso_639_1, todos los idiomas en una sola respuesta |
Empieza en 3 pasos
- Elige un plan en precios. El número de idiomas no cambia con el plan, solo la velocidad de solicitudes.
- Crea una clave en el panel de tu cuenta.
- Llama a cualquier endpoint con una etiqueta
languagey envía la clave comoapi_keyo como encabezado Bearer.
Ejemplo de solicitud
El ejemplo en bash imprime el título de Fight Club (id 550) en tres idiomas. Usa jq para imprimir un campo. El ejemplo en PHP pide bielorruso y recurre al inglés cuando la sinopsis está en blanco.
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;Respuesta para language=ru-RU, recortada a unos pocos campos. La clave text_language del ejemplo en PHP la añade tu código, no la API.
{
"genres": [
{
"id": 18,
"name": "драма"
},
{
"id": 53,
"name": "триллер"
}
],
"id": 550,
"original_language": "en",
"original_title": "Fight Club",
"overview": "Сотрудник страховой компании страдает хронической бессонницей и отчаянно пытается вырваться из мучительно скучной жизни. Однажды в очередной командировке он...",
"poster_path": "/66RvLrRJTm4J8l3uHXWF09AICol.jpg",
"tagline": "«Интриги. Хаос. Мыло»",
"title": "Бойцовский клуб"
}Respaldo cuando un campo está vacío
No todos los títulos tienen texto en todos los idiomas. Un overview puede llegar vacío cuando no existe traducción, y un title o un tagline puede llegar en inglés. La API no inventa texto. Usa un orden fijo para que la página siempre muestre algo:
- Pide el idioma que muestras.
- Si un campo está vacío, pide
en-USpara el mismo id, o lee la entrada en inglés de la lista de traducciones. - Si el título está vacío, muestra
original_title. - Guarda de qué idioma salió cada campo, para poder reintentarlo más tarde.
La caché perimetral guarda una copia por idioma para cada ruta en caché, así que el respaldo en inglés de un título popular suele servirse desde la caché.
Lista todas las traducciones de un título
GET / devuelve una lista translations, con una entrada por cada idioma que tiene datos. La lista puede ser más larga que los 14 idiomas servidos: Fight Club tiene 50 entradas. Úsala para crear un selector de idioma o para guardar todos los textos de un título en una sola fila.
| Campo | Significado |
|---|---|
iso_639_1, iso_3166_1 | Códigos de idioma y de país |
english_name | Nombre del idioma en inglés |
data.title (películas) o data.name (TV), data.overview, data.tagline | Texto localizado, el título puede estar vacío |
data.homepage, data.runtime | Valores opcionales de esa traducción |
El mismo endpoint existe para series de TV y episodios. Las entradas de TV incluyen data.name y no tienen runtime, y las de episodios solo incluyen name y overview. Las temporadas responden con una lista vacía, y las personas y las colecciones no tienen endpoint de traducciones. Los detalles están en traducciones. Una llamada de traducciones sustituye hasta 14 llamadas de detalles cuando quieres todos los idiomas a la vez.
Pósters y vídeos por idioma
Las imágenes y los vídeos llevan sus propias etiquetas de idioma en iso_639_1. En los endpoints de imágenes, pasa una lista separada por comas y añade null para los elementos sin idioma, como los pósters sin texto. La respuesta contiene los elementos que coinciden, así que ordénalos en tu código.
| Parámetro | Se usa en | Ejemplo |
|---|---|---|
include_image_language | Endpoints de imágenes | ru,en,null |
Los endpoints de vídeos devuelven todos los idiomas en una sola respuesta e ignoran include_video_language, así que filtra tú mismo por iso_639_1. Consulta imágenes para ver los tamaños y el CDN.
Hebreo y texto de derecha a izquierda
El hebreo es el único idioma de derecha a izquierda de los 14. Resuélvelo en la página, no en los datos:
- Define
lang="he"ydir="rtl"en el elemento que contiene el texto. - Envuelve los títulos en alfabeto latino dentro de texto en hebreo en un elemento
<bdi>para que la puntuación no salte al lado equivocado. - Usa propiedades CSS lógicas como
margin-inline-starten lugar de izquierda y derecha.
Cómo se compara
| Capacidad | Hacer scraping de las páginas tú mismo | Dataset solo en inglés | amodb |
|---|---|---|---|
| Idiomas | Una configuración regional del sitio por solicitud | Inglés | 14 idiomas con language |
| Mismo id en todos los idiomas | URL distintas por configuración regional | No aplica | El mismo id numérico en todas partes |
| Todas las traducciones de un título | Pedir la página de cada configuración regional | No aplica | Una llamada a translations |
| Pósters localizados | URL de imagen por configuración regional | Revisa su documentación | Filtro include_image_language |
| Título original | Extraerlo del texto de la página | Revisa su documentación | original_title, original_name |
Precios
El conjunto de idiomas es el mismo en todos los planes, así que pagas solo por la velocidad y el periodo. Compra 1, 3, 6, 12 o 24 meses prepago, con un 0, 10, 20, 30 o 40 por ciento de descuento en los más largos y sin renovación automática. Los planes de 20, 40 y 120 solicitudes por minuto incluyen todos los idiomas y todos los endpoints. Un sitio en cinco idiomas necesita hasta cinco llamadas de detalles por título, y las solicitudes repetidas se sirven desde la caché perimetral durante 6 horas. No hay nivel gratuito. Consulta precios.