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.

Actualizado el Ver en Markdown

Obtener la lista de géneros de películas

GET /3/genre/movie/list 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.

bashjspyphpgo
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 dos
    Tu clave. Usa esta o el encabezado Authorization: Bearer.
  • languageconsulta
    Etiqueta de TMDB como en-US, ru-RU o pt-BR. Los nombres se devuelven en este idioma. Valor por defecto en-US.

Campos de la respuesta

CampoTipoNotas
genresarrayLa lista completa en una sola respuesta, sin paginación.
genres[].identeroId de género estable.
genres[].nametextoNombre del género en el idioma pedido.

Ejemplo de respuesta

JSON
{
  "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.

IdNombre
12Adventure
14Fantasy
16Animation
18Drama
27Horror
28Action
35Comedy
36History
37Western
53Thriller
80Crime
99Documentary
878Science Fiction
9648Mystery
10402Music
10749Romance
10751Family
10752War
10759Action & Adventure
10762Kids
10763News
10764Reality
10765Sci-Fi & Fantasy
10766Soap
10767Talk
10768War & Politics
10770TV 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 rutaParámetrosCada elemento o estructura
GET /configuration/countriesningunoArray de { iso_3166_1, english_name, native_name }
GET /configuration/languagesningunoArray de { iso_639_1, english_name, name }
GET /configuration/primary_translationsningunoArray de 14 textos como ru-RU
GET /configuration/jobsningunoArray de { department, jobs } donde jobs lista los nombres de los puestos
GET /certification/movie/listninguno{ certifications } indexado por código de país, 10 países
GET /certification/tv/listninguno{ certifications } indexado por código de país, una clave por cada país del catálogo
GET /watch/providers/regionslanguage{ results } de { iso_3166_1, english_name, native_name }
GET /watch/providers/movielanguage, watch_region{ results } de proveedores
GET /watch/providers/tvlanguage, watch_region{ results } de proveedores

/configuration/countries y /configuration/languages ignoran language y siempre devuelven los mismos nombres. native_name en la lista de regiones sigue language. amodb no ofrece /configuration/timezones.

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.

JSON
{
  "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 /watch/providers/regions. Los logos de los proveedores se cargan desde el host de imágenes, consulta imágenes.

JSON
{
  "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 /watch/providers/movie?watch_region=US.

Errores

HTTPstatus_codeCuándo
4017La clave falta o es incorrecta.
40236El periodo del plan ha terminado.
40434La ruta no existe, por ejemplo /genre/book/list.
40537Usaste un método de escritura en una ruta de consulta.
42925Superaste 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 /configuration 24 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,12 en discover significa Acción y aventura a la vez. with_genres=28|12 significa 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 ejemplo 10759 en italiano.