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ę.
Pobieranie listy gatunków filmowych
GET / 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.
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óchTwój klucz. Użyj go albo nagłówkaAuthorization: Bearer.languagequeryTag TMDB, na przykładen-US,ru-RUlubpt-BR. Nazwy są zwracane w tym języku. Domyślnieen-US.
Pola odpowiedzi
| Pole | Typ | Uwagi |
|---|---|---|
genres | array | Cała lista w jednej odpowiedzi, bez paginacji. |
genres[].id | integer | Stałe ID gatunku. |
genres[].name | string | Nazwa gatunku w żądanym języku. |
Przykładowa odpowiedź
{
"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.
| ID | Nazwa |
|---|---|
| 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 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żka | Parametry | Pozycja lub kształt |
|---|---|---|
GET / | brak | Tablica { iso_ |
GET / | brak | Tablica { iso_ |
GET / | brak | Tablica 14 ciągów, na przykład ru-RU |
GET / | brak | Tablica { department, jobs }, gdzie jobs zawiera nazwy stanowisk |
GET / | brak | { certifications } według kodu kraju, 10 krajów |
GET / | brak | { certifications } według kodu kraju, jeden klucz na kraj w katalogu |
GET / | language | { results } z pozycjami { iso_ |
GET / | language, watch_region | { results } z dostawcami |
GET / | language, watch_region | { results } z dostawcami |
/ i / ignorują language i zawsze zwracają te same nazwy. native_name na liście regionów zależy od language. amodb nie udostępnia /.
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.
{
"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 /. Loga dostawców ładują się z hosta obrazów, zobacz obrazy.
{
"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 /.
Błędy
| HTTP | status_code | Kiedy |
|---|---|---|
| 401 | 7 | Brakuje klucza lub jest błędny. |
| 402 | 36 | Okres planu dobiegł końca. |
| 404 | 34 | Ścieżka nie istnieje, na przykład /genre/book/list. |
| 405 | 37 | Użyto metody zapisu na ścieżce słownika. |
| 429 | 25 | Przekroczono 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
/configurationw 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,12w discover oznacza akcję i przygodę razem.with_genres=28|12oznacza 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ład10759po włosku.