Géneros y listas de consulta
Los endpoints de géneros y de consulta devuelven listas de referencia pequeñas que cargas una vez: ids de género de películas y TV con nombres en 14 idiomas, más países, idiomas, oficios, clasificaciones por edad y proveedores de streaming. Usan rutas y estructuras de TMDB v3, no se paginan y cambian poco, así que guárdalas en caché un día.
Obtener la lista de géneros de películas
GET / devuelve todos los géneros de películas como un id y un name. Los ids son los números que genre_ids lleva en los elementos de lista y que with_genres espera en discover. Los nombres siguen el parámetro language.
El ejemplo carga la lista y construye un mapa de id a nombre, lo primero que necesitan la mayoría de las aplicaciones.
curl -s "https://api.amodb.dev/3/genre/movie/list?language=en-US" \
-H "Authorization: Bearer $AMODB_KEY"const url = 'https://api.amodb.dev/3/genre/movie/list?language=en-US';
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` } });
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const { genres } = await res.json();
const names = new Map(genres.map((g) => [g.id, g.name]));
console.log(names.get(878), names.size);import os
import requests
r = requests.get(
"https://api.amodb.dev/3/genre/movie/list",
params={"language": "en-US"},
headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
timeout=10,
)
r.raise_for_status()
names = {g["id"]: g["name"] for g in r.json()["genres"]}
print(names[878], len(names))<?php
$url = 'https://api.amodb.dev/3/genre/movie/list?language=en-US';
$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");
}
$names = [];
foreach (json_decode($body, true)['genres'] as $g) {
$names[$g['id']] = $g['name'];
}
echo $names[878], ' ', count($names), PHP_EOL;package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
"time"
)
type Genres struct {
Genres []struct {
ID int `json:"id"`
Name string `json:"name"`
} `json:"genres"`
}
func main() {
url := "https://api.amodb.dev/3/genre/movie/list?language=en-US"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
client := &http.Client{Timeout: 10 * time.Second}
res, err := client.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
if res.StatusCode != http.StatusOK {
panic(res.Status)
}
var g Genres
if err := json.NewDecoder(res.Body).Decode(&g); err != nil {
panic(err)
}
names := map[int]string{}
for _, x := range g.Genres {
names[x.ID] = x.Name
}
fmt.Println(names[878], len(names))
}Parámetros
api_keyconsultauno de los dosTu clave. Usa esta o el encabezadoAuthorization: Bearer.languageconsultaEtiqueta de TMDB comoen-US,ru-RUopt-BR. Los nombres se devuelven en este idioma. Valor por defectoen-US.
Campos de la respuesta
| Campo | Tipo | Notas |
|---|---|---|
genres | array | La lista completa en una sola respuesta, sin paginación. |
genres[].id | entero | Id de género estable. |
genres[].name | texto | Nombre del género en el idioma pedido. |
Ejemplo de respuesta
{
"genres": [
{ "id": 12, "name": "Adventure" },
{ "id": 14, "name": "Fantasy" },
{ "id": 16, "name": "Animation" },
{ "id": 18, "name": "Drama" }
]
}La respuesta contiene 27 géneros ordenados por id. Esta se corta a los primeros 4.
Ids de género
Las dos rutas de género devuelven estos 27 géneros, ordenados por id. Los nombres de abajo son los ingleses. Los demás idiomas devuelven los mismos ids con nombres traducidos.
| Id | Nombre |
|---|---|
| 12 | Adventure |
| 14 | Fantasy |
| 16 | Animation |
| 18 | Drama |
| 27 | Horror |
| 28 | Action |
| 35 | Comedy |
| 36 | History |
| 37 | Western |
| 53 | Thriller |
| 80 | Crime |
| 99 | Documentary |
| 878 | Science Fiction |
| 9648 | Mystery |
| 10402 | Music |
| 10749 | Romance |
| 10751 | Family |
| 10752 | War |
| 10759 | Action & Adventure |
| 10762 | Kids |
| 10763 | News |
| 10764 | Reality |
| 10765 | Sci-Fi & Fantasy |
| 10766 | Soap |
| 10767 | Talk |
| 10768 | War & Politics |
| 10770 | TV Movie |
Lista de géneros de TV
GET /3/genre/tv/list acepta el mismo parámetro language y devuelve la lista idéntica, así que un solo mapa de id a nombre cubre películas y TV. En los datos de las listas, los ids 10759 y 10762 a 10768 aparecen solo en elementos de TV, y ids como 28, 12 y 878 aparecen en elementos de películas. Cuando filtres TV en discover, usa los ids de TV, por ejemplo 10765 para ciencia ficción y fantasía.
Listas de consulta
Estas rutas devuelven datos de referencia para formularios, filtros y pantallas de ajustes. Todas aceptan la clave; ninguna acepta page.
| Método y ruta | Parámetros | Cada elemento o estructura |
|---|---|---|
GET / | ninguno | Array de { iso_ |
GET / | ninguno | Array de { iso_ |
GET / | ninguno | Array de 14 textos como ru-RU |
GET / | ninguno | Array de { department, jobs } donde jobs lista los nombres de los puestos |
GET / | ninguno | { certifications } indexado por código de país, 10 países |
GET / | ninguno | { certifications } indexado por código de país, una clave por cada país del catálogo |
GET / | language | { results } de { iso_ |
GET / | language, watch_region | { results } de proveedores |
GET / | language, watch_region | { results } de proveedores |
/ y / ignoran language y siempre devuelven los mismos nombres. native_name en la lista de regiones sigue language. amodb no ofrece /.
Una entrada de clasificación indica la clasificación, lo que significa y su orden. Las entradas se agrupan por código de país, así que una llamada cubre todos los mercados. La lista de películas trae los textos de las clasificaciones. En la lista de TV, meaning es una cadena vacía.
{
"certifications": {
"US": [
{ "certification": "PG", "meaning": "Some material may not be suitable for children under 10.", "order": 3 },
{ "certification": "R", "meaning": "Under 17 requires accompanying parent or adult guardian.", "order": 5 }
]
}
}El ejemplo se corta a 2 de las 6 entradas de Estados Unidos. La lista de películas cubre AU, BR, CA, DE, ES, FR, GB, IT, RU y US.
Una entrada de proveedor tiene provider_id, provider_name, logo_path, display_priority y display_priorities, un mapa de código de país a prioridad. Sin watch_region obtienes todos los proveedores. Con watch_region=US conservas solo los proveedores que sirven a ese país. Una región desconocida devuelve un array results vacío. Pasa un código de /. Los logos de los proveedores se cargan desde el host de imágenes, consulta imágenes.
{
"display_priorities": { "AT": 1, "DE": 1, "GB": 1, "JP": 1, "US": 3 },
"display_priority": 3,
"logo_path": "/gMZdpavHmxFNnLpMHwVxfqeux2g.png",
"provider_name": "Amazon Prime Video",
"provider_id": 9
}Esta es una entrada de /.
Errores
| HTTP | status_code | Cuándo |
|---|---|---|
| 401 | 7 | La clave falta o es incorrecta. |
| 402 | 36 | El periodo del plan ha terminado. |
| 404 | 34 | La ruta no existe, por ejemplo /genre/book/list. |
| 405 | 37 | Usaste un método de escritura en una ruta de consulta. |
| 429 | 25 | Superaste tus solicitudes por minuto. Espera los segundos de Retry-After. |
Los detalles de cada código están en errores. Los límites de cada plan están en límites de solicitudes.
Notas prácticas
- Carga las listas una vez por idioma al iniciar y guárdalas en memoria o en un archivo. La caché perimetral guarda las rutas
/configuration24 horas, así que basta con una actualización diaria por tu parte. - Guarda los ids de género en tu base de datos, no los nombres. Un nombre cambia con el idioma, un id no.
- Las dos rutas de género devuelven las mismas 27 entradas, así que un solo mapa cubre películas y TV. Los ids 10759 y 10762 a 10768 aparecen solo en elementos de TV.
with_genres=28,12en discover significa Acción y aventura a la vez.with_genres=28|12significa cualquiera de los dos.- Los nombres de género siguen el parámetro
language. Una etiqueta fuera de los 14 idiomas base de idiomas recurre al inglés, y algunos nombres se quedan en inglés en ciertos idiomas, por ejemplo10759en italiano.