Жанры і даведачныя спісы
Эндпоінты жанраў і даведнікаў вяртаюць невялікія даведачныя спісы, якія загружаюцца адзін раз: id жанраў фільмаў і серыялаў з назвамі на 14 мовах, а таксама краіны, мовы, пасады здымачнай групы, узроставыя рэйтынгі і стрымінгавыя сэрвісы. Яны выкарыстоўваюць шляхі і формы TMDB v3, не патрабуюць старонак і рэдка змяняюцца, таму кэшуйце іх на суткі.
Атрыманне спіса жанраў фільмаў
GET / вяртае кожны жанр фільмаў як id і name. Id гэта лікі, якія нясе genre_ids у запісах спісаў і якія чакае with_genres у пошуку па фільтрах. Назвы залежаць ад параметра language.
У прыкладзе загружаецца спіс і будуецца карта id у назву, гэта першае, што патрэбна большасці праграм.
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))
}Параметры
api_keyзапытадзін з двухВаш ключ. Выкарыстоўвайце яго або загаловакAuthorization: Bearer.languageзапытТэг TMDB, напрыкладen-US,ru-RUабоpt-BR. Назвы вяртаюцца на гэтай мове. Па змаўчанніen-US.
Палі адказу
| Поле | Тып | Заўвагі |
|---|---|---|
genres | масіў | Увесь спіс у адным адказе, без старонак. |
genres[].id | цэлы лік | Стабільны id жанру. |
genres[].name | радок | Назва жанру на запытанай мове. |
Прыклад адказу
{
"genres": [
{ "id": 12, "name": "Adventure" },
{ "id": 14, "name": "Fantasy" },
{ "id": 16, "name": "Animation" },
{ "id": 18, "name": "Drama" }
]
}Адказ змяшчае 27 жанраў, адсартаваных па id. Тут ён скарочаны да першых 4.
Id жанраў
Абодва шляхі жанраў вяртаюць гэтыя 27 жанраў, адсартаваных па id. Назвы ніжэй англійскія. На іншых мовах вяртаюцца тыя ж id з перакладзенымі назвамі.
| Id | Назва |
|---|---|
| 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 |
Спіс жанраў серыялаў
GET /3/genre/tv/list прымае той жа параметр language і вяртае ідэнтычны спіс, таму адна карта id у назву ахоплівае фільмы і серыялы. У даных спісаў id 10759 і 10762-10768 з’яўляюцца толькі ў запісах серыялаў, а id, напрыклад 28, 12 і 878, у запісах фільмаў. Калі вы фільтруеце серыялы ў пошуку па фільтрах, выкарыстоўвайце id для серыялаў, напрыклад 10765 для Sci-Fi and Fantasy.
Даведачныя спісы
Гэтыя шляхі вяртаюць даведачныя даныя для формаў, фільтраў і экранаў налад. Усе прымаюць ключ; ніводзін не прымае page.
| Метад і шлях | Параметры | Кожны элемент або форма |
|---|---|---|
GET / | няма | Масіў { iso_ |
GET / | няма | Масіў { iso_ |
GET / | няма | Масіў з 14 радкоў, напрыклад ru-RU |
GET / | няма | Масіў { department, jobs }, дзе jobs пералічвае назвы пасад |
GET / | няма | { certifications } па кодзе краіны, 10 краін |
GET / | няма | { certifications } па кодзе краіны, адзін ключ на краіну ў каталогу |
GET / | language | { results } з { iso_ |
GET / | language, watch_region | { results } са стрымінгавымі сэрвісамі |
GET / | language, watch_region | { results } са стрымінгавымі сэрвісамі |
/ і / ігнаруюць language і заўсёды вяртаюць тыя ж назвы. native_name у спісе рэгіёнаў залежыць ад language. amodb не прапануе /.
Запіс ўзроставага рэйтынгу называе рэйтынг, што ён азначае, і яго парадак сартавання. Запісы групуюцца па кодзе краіны, таму адзін выклік ахоплівае кожны рынак. Спіс для фільмаў мае тэксты рэйтынгаў. У спісе для серыялаў meaning ёсць пустым радком.
{
"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 }
]
}
}Прыклад скарочаны да 2 з 6 запісаў ЗША. Спіс для фільмаў ахоплівае AU, BR, CA, DE, ES, FR, GB, IT, RU і US.
Запіс сэрвісу мае provider_id, provider_name, logo_path, display_priority і display_priorities, карту кода краіны ў прыярытэт. Без watch_region вы атрымліваеце кожны сэрвіс. З watch_region=US застаюцца толькі сэрвісы, што працуюць у гэтай краіне. Невядомы рэгіён вяртае пусты масіў results. Перадайце код з /. Лагатыпы сэрвісаў загружаюцца з хоста выяў, гл. выявы.
{
"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
}Гэта адзін запіс з /.
Памылкі
| HTTP | status_code | Калі |
|---|---|---|
| 401 | 7 | Ключ адсутнічае або няправільны. |
| 402 | 36 | Тэрмін дзеяння плана скончыўся. |
| 404 | 34 | Шляху не існуе, напрыклад /genre/book/list. |
| 405 | 37 | Вы выкарысталі метад запісу на шляху даведніка. |
| 429 | 25 | Вы перавысілі ліміт запытаў у хвіліну. Пачакайце Retry-After секунд. |
Падрабязнасці па кожным кодзе ёсць на старонцы памылкі. Ліміты планаў на старонцы ліміты запытаў.
Практычныя заўвагі
- Загружайце спісы адзін раз на мову пры старце і трымайце ў памяці або ў файле. Edge кэшуе шляхі
/configurationна 24 гадзіны, таму штодзённага абнаўлення на вашым баку дастаткова. - Захоўвайце ў базе даных id жанраў, а не назвы. Назва мяняецца ад мовы, id не мяняецца.
- Абодва шляхі жанраў вяртаюць тыя ж 27 запісаў, таму адна карта ахоплівае фільмы і серыялы. Id 10759 і 10762-10768 з’яўляюцца толькі ў запісах серыялаў.
with_genres=28,12у пошуку па фільтрах азначае Action і Adventure разам.with_genres=28|12азначае любы з іх.- Назвы жанраў залежаць ад параметра
language. Тэг па-за 14 базавымі мовамі са старонкі мовы замяняецца англійскай, і некалькі назваў застаюцца па-англійску на некаторых мовах, напрыклад10759па-італьянску.