Gatunki i słowniki

Endpointy gatunków i słowników zwracają małe listy referencyjne, które wystarczy pobrać raz: ID gatunków filmów i seriali z nazwami w 14 językach, a także kraje, języki, stanowiska ekipy, klasyfikacje wiekowe i dostawców streamingu. Używają ścieżek i kształtów TMDB v3, nie mają paginacji i rzadko się zmieniają, więc zapisuj je w cache na dobę.

Zaktualizowano Zobacz jako Markdown

Pobieranie listy gatunków filmowych

GET /3/genre/movie/list zwraca każdy gatunek filmowy jako id i name. ID to liczby, które genre_ids niesie na pozycjach list i których oczekuje with_genres w discover. Nazwy zależą od parametru language.

Przykład pobiera listę i buduje mapę ID na nazwę, czyli pierwszą rzecz, jakiej potrzebuje większość aplikacji.

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

Parametry

  • api_keyqueryjeden z dwóch
    Twój klucz. Użyj go albo nagłówka Authorization: Bearer.
  • languagequery
    Tag TMDB, na przykład en-US, ru-RU lub pt-BR. Nazwy są zwracane w tym języku. Domyślnie en-US.

Pola odpowiedzi

PoleTypUwagi
genresarrayCała lista w jednej odpowiedzi, bez paginacji.
genres[].idintegerStałe ID gatunku.
genres[].namestringNazwa gatunku w żądanym języku.

Przykładowa odpowiedź

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

Odpowiedź zawiera 27 gatunków posortowanych według ID. Ta jest przycięta do pierwszych 4.

ID gatunków

Obie ścieżki gatunków zwracają te 27 gatunków posortowanych według ID. Poniżej są nazwy angielskie. Inne języki zwracają te same ID z przetłumaczonymi nazwami.

IDNazwa
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 gatunków seriali

GET /3/genre/tv/list przyjmuje ten sam parametr language i zwraca identyczną listę, więc jedna mapa ID na nazwę obejmuje filmy i seriale. W danych list ID 10759 oraz od 10762 do 10768 występują tylko na pozycjach serialowych, a ID takie jak 28, 12 i 878 na filmowych. Gdy filtrujesz seriale w discover, użyj ID serialowych, na przykład 10765 dla Sci-Fi i fantasy.

Słowniki

Te ścieżki zwracają dane referencyjne dla formularzy, filtrów i ekranów ustawień. Wszystkie wymagają klucza, żadna nie przyjmuje page.

Metoda i ścieżkaParametryPozycja lub kształt
GET /configuration/countriesbrakTablica { iso_3166_1, english_name, native_name }
GET /configuration/languagesbrakTablica { iso_639_1, english_name, name }
GET /configuration/primary_translationsbrakTablica 14 ciągów, na przykład ru-RU
GET /configuration/jobsbrakTablica { department, jobs }, gdzie jobs zawiera nazwy stanowisk
GET /certification/movie/listbrak{ certifications } według kodu kraju, 10 krajów
GET /certification/tv/listbrak{ certifications } według kodu kraju, jeden klucz na kraj w katalogu
GET /watch/providers/regionslanguage{ results } z pozycjami { iso_3166_1, english_name, native_name }
GET /watch/providers/movielanguage, watch_region{ results } z dostawcami
GET /watch/providers/tvlanguage, watch_region{ results } z dostawcami

/configuration/countries i /configuration/languages ignorują language i zawsze zwracają te same nazwy. native_name na liście regionów zależy od language. amodb nie udostępnia /configuration/timezones.

Pozycja klasyfikacji wiekowej podaje oznaczenie, jego znaczenie i kolejność sortowania. Pozycje są pogrupowane według kodu kraju, więc jedno wywołanie obejmuje wszystkie rynki. Lista filmowa zawiera teksty klasyfikacji. Na liście seriali meaning jest pustym ciągiem.

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

Przykład jest przycięty do 2 z 6 pozycji dla USA. Lista filmowa obejmuje AU, BR, CA, DE, ES, FR, GB, IT, RU i US.

Pozycja dostawcy ma provider_id, provider_name, logo_path, display_priority i display_priorities, czyli mapę kodu kraju na priorytet. Bez watch_region dostaniesz wszystkich dostawców. Z watch_region=US zostają tylko dostawcy obsługujący ten kraj. Nieznany region zwraca pustą tablicę results. Podaj kod z /watch/providers/regions. Loga dostawców ładują się z hosta obrazów, zobacz obrazy.

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
}

To jedna pozycja z /watch/providers/movie?watch_region=US.

Błędy

HTTPstatus_codeKiedy
4017Brakuje klucza lub jest błędny.
40236Okres planu dobiegł końca.
40434Ścieżka nie istnieje, na przykład /genre/book/list.
40537Użyto metody zapisu na ścieżce słownika.
42925Przekroczono limit żądań na minutę. Poczekaj tyle sekund, ile podaje Retry-After.

Szczegóły każdego kodu są na stronie błędy. Limity planów są na stronie limity żądań.

Praktyczne uwagi

  • Pobierz listy raz dla każdego języka przy starcie i trzymaj je w pamięci lub w pliku. Edge zapisuje ścieżki /configuration w cache na 24 godziny, więc wystarczy odświeżać je u siebie raz dziennie.
  • W bazie danych zapisuj ID gatunków, nie nazwy. Nazwa zmienia się z językiem, ID nie.
  • Obie ścieżki gatunków zwracają te same 27 pozycji, więc jedna mapa obejmuje filmy i seriale. ID 10759 oraz od 10762 do 10768 występują tylko na pozycjach serialowych.
  • with_genres=28,12 w discover oznacza akcję i przygodę razem. with_genres=28|12 oznacza dowolny z nich.
  • Nazwy gatunków zależą od parametru language. Tag spoza 14 języków bazowych ze strony języki wraca do angielskiego, a kilka nazw w niektórych językach pozostaje po angielsku, na przykład 10759 po włosku.