Genres et listes de référence

Les genres et listes de référence sont de petites listes à charger une fois : identifiants de genres de films et de séries avec noms en 14 langues, plus pays, langues, métiers, classifications par âge et plateformes. Ils suivent les chemins TMDB v3, sans pagination, changent rarement : mettez-les en cache un jour.

Mis à jour le Voir en Markdown

Obtenir la liste des genres de films

GET /3/genre/movie/list renvoie chaque genre de film sous forme d'un id et d'un name. Les identifiants sont les nombres que porte genre_ids sur les éléments de liste et que with_genres attend dans découverte. Les noms suivent le paramètre language.

L'exemple charge la liste et construit une table identifiant vers nom, la première chose dont la plupart des applications ont besoin.

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))
}

Paramètres

  • api_keyrequêtel'un des deux
    Votre clé. Utilisez-la ou l'en-tête Authorization: Bearer.
  • languagerequête
    Balise TMDB comme en-US, ru-RU ou pt-BR. Les noms sont renvoyés dans cette langue. Par défaut en-US.

Champs de la réponse

ChampTypeRemarques
genrestableauLa liste entière en une seule réponse, sans pagination.
genres[].identierIdentifiant de genre stable.
genres[].namechaîneNom du genre dans la langue demandée.

Exemple de réponse

JSON
{
  "genres": [
    { "id": 12, "name": "Adventure" },
    { "id": 14, "name": "Fantasy" },
    { "id": 16, "name": "Animation" },
    { "id": 18, "name": "Drama" }
  ]
}

La réponse contient 27 genres triés par identifiant. Celle-ci est réduite aux 4 premiers.

Identifiants de genres

Les deux chemins de genres renvoient ces 27 genres, triés par identifiant. Les noms ci-dessous sont les noms anglais. Les autres langues renvoient les mêmes identifiants avec des noms traduits.

IdNom
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

Liste des genres de séries

GET /3/genre/tv/list accepte le même paramètre language et renvoie la liste identique : une seule table identifiant vers nom couvre donc les films et les séries. Dans les données de listes, les identifiants 10759 et 10762 à 10768 n'apparaissent que sur des éléments de séries, et des identifiants comme 28, 12 et 878 apparaissent sur des éléments de films. Quand vous filtrez les séries dans découverte, utilisez les identifiants de séries, par exemple 10765 pour Sci-Fi et Fantasy.

Listes de référence

Ces chemins renvoient des données de référence pour les formulaires, les filtres et les écrans de réglages. Tous demandent la clé ; aucun n'accepte page.

Méthode et cheminParamètresChaque élément ou forme
GET /configuration/countriesaucunTableau de { iso_3166_1, english_name, native_name }
GET /configuration/languagesaucunTableau de { iso_639_1, english_name, name }
GET /configuration/primary_translationsaucunTableau de 14 chaînes comme ru-RU
GET /configuration/jobsaucunTableau de { department, jobs } où jobs liste les intitulés de métiers
GET /certification/movie/listaucun{ certifications } indexé par code pays, 10 pays
GET /certification/tv/listaucun{ certifications } indexé par code pays, une clé par pays du catalogue
GET /watch/providers/regionslanguage{ results } de { iso_3166_1, english_name, native_name }
GET /watch/providers/movielanguage, watch_region{ results } de plateformes
GET /watch/providers/tvlanguage, watch_region{ results } de plateformes

/configuration/countries et /configuration/languages ignorent language et renvoient toujours les mêmes noms. native_name dans la liste des régions suit language. amodb ne propose pas /configuration/timezones.

Une entrée de classification nomme la classification, ce qu'elle signifie et son ordre de tri. Les entrées sont regroupées par code pays : un appel couvre donc tous les marchés. La liste des films contient les textes des classifications. Dans la liste des séries, meaning est une chaîne vide.

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 }
    ]
  }
}

L'exemple est réduit à 2 des 6 entrées des États-Unis. La liste des films couvre AU, BR, CA, DE, ES, FR, GB, IT, RU et US.

Une entrée de plateforme a provider_id, provider_name, logo_path, display_priority et display_priorities, une table code pays vers priorité. Sans watch_region, vous obtenez toutes les plateformes. Avec watch_region=US, vous ne gardez que les plateformes qui servent ce pays. Une région inconnue renvoie un tableau results vide. Passez un code de /watch/providers/regions. Les logos des plateformes se chargent depuis l'hôte d'images, voir images.

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
}

Voici une entrée de /watch/providers/movie?watch_region=US.

Erreurs

HTTPstatus_codeQuand
4017La clé est absente ou fausse.
40236La période de l'offre est terminée.
40434Le chemin n'existe pas, par exemple /genre/book/list.
40537Vous avez utilisé une méthode d'écriture sur un chemin de référence.
42925Vous avez dépassé vos requêtes par minute. Attendez les secondes de Retry-After.

Les détails de chaque code sont sur erreurs. Les limites des offres sont sur limites de débit.

Remarques pratiques

  • Chargez les listes une fois par langue au démarrage et gardez-les en mémoire ou dans un fichier. La périphérie met en cache les chemins /configuration 24 heures : une actualisation quotidienne de votre côté suffit donc.
  • Stockez les identifiants de genres dans votre base de données, pas les noms. Un nom change avec la langue, un identifiant non.
  • Les deux chemins de genres renvoient les mêmes 27 entrées : une seule table couvre donc les films et les séries. Les identifiants 10759 et 10762 à 10768 n'apparaissent que sur des éléments de séries.
  • with_genres=28,12 dans découverte signifie Action et Aventure ensemble. with_genres=28|12 signifie l'un ou l'autre.
  • Les noms de genres suivent le paramètre language. Une balise en dehors des 14 langues de base de langues se replie sur l'anglais, et quelques noms restent en anglais dans certaines langues, par exemple 10759 en italien.