Gêneros e listas de consulta
Os endpoints de gêneros e de consulta retornam listas de referência que você carrega uma vez: ids de gênero de filmes e de TV com nomes em 14 idiomas, além de países, idiomas, funções da equipe, classificações e provedores de streaming. Seguem os caminhos do TMDB v3, não têm paginação e mudam pouco, então use cache de um dia.
Obter a lista de gêneros de filmes
GET / retorna todos os gêneros de filmes como um id e um name. Os ids são os números que genre_ids traz nos itens de lista e que with_genres espera no discover. Os nomes seguem o parâmetro language.
O exemplo carrega a lista e monta um mapa de id para nome, a primeira coisa de que a maioria dos apps precisa.
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_keyconsultaum dos doisSua chave. Use este parâmetro ou o headerAuthorization: Bearer.languageconsultaTag do TMDB comoen-US,ru-RUoupt-BR. Os nomes voltam nesse idioma. Padrãoen-US.
Campos da resposta
| Campo | Tipo | Observações |
|---|---|---|
genres | array | A lista inteira em uma só resposta, sem paginação. |
genres[].id | inteiro | Id de gênero estável. |
genres[].name | string | Nome do gênero no idioma pedido. |
Exemplo de resposta
{
"genres": [
{ "id": 12, "name": "Adventure" },
{ "id": 14, "name": "Fantasy" },
{ "id": 16, "name": "Animation" },
{ "id": 18, "name": "Drama" }
]
}A resposta tem 27 gêneros ordenados por id. Esta foi cortada para os 4 primeiros.
Ids de gênero
Os dois caminhos de gênero retornam estes 27 gêneros, ordenados por id. Os nomes abaixo são os em inglês. Os outros idiomas retornam os mesmos ids com nomes traduzidos.
| Id | Nome |
|---|---|
| 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 aceita o mesmo parâmetro language e retorna a lista idêntica, então um só mapa de id para nome cobre filmes e TV. Nos dados de listas, os ids 10759 e 10762 a 10768 aparecem só em itens de TV, e ids como 28, 12 e 878 aparecem em itens de filme. Ao filtrar TV no discover, use os ids de TV, por exemplo 10765 para Sci-Fi e Fantasia.
Listas de consulta
Estes caminhos retornam dados de referência para formulários, filtros e telas de configuração. Todos exigem a chave; nenhum aceita page.
| Método e caminho | Parâmetros | Cada item ou formato |
|---|---|---|
GET / | nenhum | Array de { iso_ |
GET / | nenhum | Array de { iso_ |
GET / | nenhum | Array de 14 strings, como ru-RU |
GET / | nenhum | Array de { department, jobs }, em que jobs lista os nomes das funções |
GET / | nenhum | { certifications } indexado por código de país, 10 países |
GET / | nenhum | { certifications } indexado por código de país, uma chave por país do catálogo |
GET / | language | { results } com { iso_ |
GET / | language, watch_region | { results } com provedores |
GET / | language, watch_region | { results } com provedores |
/ e / ignoram language e sempre retornam os mesmos nomes. O native_name da lista de regiões segue language. O amodb não oferece /.
Uma entrada de classificação indicativa traz o nome da classificação, o que ela significa e a ordem de exibição. As entradas são agrupadas por código de país, então uma só chamada cobre todos os mercados. A lista de filmes tem os textos das classificações. Na lista de TV, meaning é uma string vazia.
{
"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 }
]
}
}O exemplo foi cortado para 2 das 6 entradas dos EUA. A lista de filmes cobre AU, BR, CA, DE, ES, FR, GB, IT, RU e US.
Uma entrada de provedor tem provider_id, provider_name, logo_path, display_priority e display_priorities, um mapa de código de país para prioridade. Sem watch_region, você recebe todos os provedores. Com watch_region=US, ficam só os provedores que atendem esse país. Uma região desconhecida retorna um array results vazio. Passe um código de /. Os logos dos provedores carregam do host de imagens, veja imagens.
{
"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 é uma entrada de /.
Erros
| HTTP | status_code | Quando |
|---|---|---|
| 401 | 7 | A chave está ausente ou incorreta. |
| 402 | 36 | O período do plano terminou. |
| 404 | 34 | O caminho não existe, por exemplo /genre/book/list. |
| 405 | 37 | Você usou um método de escrita em um caminho de consulta. |
| 429 | 25 | Você passou do seu limite de requisições por minuto. Espere os segundos indicados em Retry-After. |
Os detalhes de cada código estão em erros. Os limites dos planos estão em limites de requisições.
Notas práticas
- Carregue as listas uma vez por idioma na inicialização e mantenha-as na memória ou em um arquivo. A borda guarda em cache os caminhos
/configurationpor 24 horas, então uma atualização diária do seu lado basta. - Guarde ids de gênero no seu banco de dados, não nomes. O nome muda com o idioma, o id não.
- Os dois caminhos de gênero retornam as mesmas 27 entradas, então um só mapa cobre filmes e TV. Os ids 10759 e 10762 a 10768 aparecem só em itens de TV.
with_genres=28,12no discover significa Ação e Aventura juntos.with_genres=28|12significa qualquer um dos dois.- Os nomes dos gêneros seguem o parâmetro
language. Uma tag fora dos 14 idiomas base de idiomas volta para o inglês, e alguns nomes ficam em inglês em certos idiomas, por exemplo10759em italiano.