Genuri și liste de referință

Endpoint-urile pentru genuri și liste de referință întorc liste pe care le încarci o dată: ID-uri de gen pentru filme și TV cu nume în 14 limbi, plus țări, limbi, meserii din echipă, clasificări pe vârste și furnizori de streaming. Folosesc căi și structuri TMDB v3, nu cer paginare și se schimbă rar, deci ține-le în cache o zi.

Actualizat Vezi ca Markdown

Obține lista genurilor de filme

GET /3/genre/movie/list întoarce fiecare gen de film ca id și name. ID-urile sunt numerele pe care le poartă genre_ids la elementele din liste și pe care le așteaptă with_genres în descoperire. Numele urmează parametrul language.

Exemplul încarcă lista și construiește o hartă de la ID la nume, primul lucru de care au nevoie majoritatea aplicațiilor.

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

Parametri

  • api_keyinterogareuna dintre cele două
    Cheia ta. Folosește-o pe aceasta sau antetul Authorization: Bearer.
  • languageinterogare
    Etichetă TMDB precum en-US, ru-RU sau pt-BR. Numele sunt întoarse în această limbă. Implicit en-US.

Câmpurile răspunsului

CâmpTipObservații
genresarrayToată lista într-un singur răspuns, fără paginare.
genres[].idnumăr întregID de gen stabil.
genres[].nameșirNumele genului în limba cerută.

Exemplu de răspuns

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

Răspunsul conține 27 de genuri sortate după ID. Acesta este tăiat la primele 4.

ID-uri de gen

Ambele căi de gen întorc aceste 27 de genuri, sortate după ID. Numele de mai jos sunt cele în engleză. Alte limbi întorc aceleași ID-uri cu nume traduse.

IDNume
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 genurilor TV

GET /3/genre/tv/list primește același parametru language și întoarce lista identică, deci o singură hartă de la ID la nume acoperă filmele și TV. În datele din liste, ID-urile 10759 și 10762 până la 10768 apar doar la elementele TV, iar ID-uri precum 28, 12 și 878 apar la elementele de film. Când filtrezi TV în descoperire, folosește ID-urile TV, de exemplu 10765 pentru Sci-Fi and Fantasy.

Liste de referință

Aceste căi întorc date de referință pentru formulare, filtre și ecrane de setări. Toate cer cheia; niciuna nu primește page.

Metodă și caleParametriFiecare element sau structură
GET /configuration/countriesniciunulArray de { iso_3166_1, english_name, native_name }
GET /configuration/languagesniciunulArray de { iso_639_1, english_name, name }
GET /configuration/primary_translationsniciunulArray de 14 șiruri precum ru-RU
GET /configuration/jobsniciunulArray de { department, jobs }, unde jobs listează titlurile meseriilor
GET /certification/movie/listniciunul{ certifications } indexat după codul de țară, 10 țări
GET /certification/tv/listniciunul{ certifications } indexat după codul de țară, o cheie pentru fiecare țară din catalog
GET /watch/providers/regionslanguage{ results } cu { iso_3166_1, english_name, native_name }
GET /watch/providers/movielanguage, watch_region{ results } cu furnizori
GET /watch/providers/tvlanguage, watch_region{ results } cu furnizori

/configuration/countries și /configuration/languages ignoră language și întorc mereu aceleași nume. native_name din lista de regiuni urmează language. amodb nu oferă /configuration/timezones.

O intrare de clasificare numește calificativul, ce înseamnă și ordinea lui de sortare. Intrările sunt grupate după codul de țară, deci un singur apel acoperă fiecare piață. Lista de filme are textele calificativelor. La lista TV, meaning este un șir gol.

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

Exemplul este tăiat la 2 din cele 6 intrări pentru SUA. Lista de filme acoperă AU, BR, CA, DE, ES, FR, GB, IT, RU și US.

O intrare de furnizor are provider_id, provider_name, logo_path, display_priority și display_priorities, o hartă de la codul de țară la prioritate. Fără watch_region primești fiecare furnizor. Cu watch_region=US păstrezi doar furnizorii care servesc acea țară. O regiune necunoscută întoarce un array results gol. Transmite un cod de la /watch/providers/regions. Logourile furnizorilor se încarcă de la gazda de imagini, vezi imagini.

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
}

Aceasta este o intrare din /watch/providers/movie?watch_region=US.

Erori

HTTPstatus_codeCând
4017Cheia lipsește sau este greșită.
40236Perioada planului s-a încheiat.
40434Calea nu există, de exemplu /genre/book/list.
40537Ai folosit o metodă de scriere pe o cale de referință.
42925Ai depășit cererile pe minut. Așteaptă numărul de secunde din Retry-After.

Detaliile pentru fiecare cod sunt la erori. Limitele planurilor sunt la limite de cereri.

Note practice

  • Încarcă listele o dată pe limbă la pornire și ține-le în memorie sau într-un fișier. Marginea ține în cache căile /configuration 24 de ore, deci o reîmprospătare zilnică din partea ta ajunge.
  • Stochează ID-urile de gen în baza ta de date, nu numele. Un nume se schimbă cu limba, un ID nu.
  • Ambele căi de gen întorc aceleași 27 de intrări, deci o singură hartă acoperă filmele și TV. ID-urile 10759 și 10762 până la 10768 apar doar la elementele TV.
  • with_genres=28,12 în descoperire înseamnă acțiune și aventură împreună. with_genres=28|12 înseamnă oricare dintre ele.
  • Numele genurilor urmează parametrul language. O etichetă din afara celor 14 limbi de bază de la limbi revine la engleză, iar câteva nume rămân în engleză în unele limbi, de exemplu 10759 în italiană.