Жанры і даведачныя спісы

Эндпоінты жанраў і даведнікаў вяртаюць невялікія даведачныя спісы, якія загружаюцца адзін раз: id жанраў фільмаў і серыялаў з назвамі на 14 мовах, а таксама краіны, мовы, пасады здымачнай групы, узроставыя рэйтынгі і стрымінгавыя сэрвісы. Яны выкарыстоўваюць шляхі і формы TMDB v3, не патрабуюць старонак і рэдка змяняюцца, таму кэшуйце іх на суткі.

Абноўлена Адкрыць у Markdown

Атрыманне спіса жанраў фільмаў

GET /3/genre/movie/list вяртае кожны жанр фільмаў як id і name. Id гэта лікі, якія нясе genre_ids у запісах спісаў і якія чакае with_genres у пошуку па фільтрах. Назвы залежаць ад параметра language.

У прыкладзе загружаецца спіс і будуецца карта id у назву, гэта першае, што патрэбна большасці праграм.

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

Параметры

  • api_keyзапытадзін з двух
    Ваш ключ. Выкарыстоўвайце яго або загаловак Authorization: Bearer.
  • languageзапыт
    Тэг TMDB, напрыклад en-US, ru-RU або pt-BR. Назвы вяртаюцца на гэтай мове. Па змаўчанні en-US.

Палі адказу

ПолеТыпЗаўвагі
genresмасіўУвесь спіс у адным адказе, без старонак.
genres[].idцэлы лікСтабільны id жанру.
genres[].nameрадокНазва жанру на запытанай мове.

Прыклад адказу

JSON
{
  "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Назва
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

Спіс жанраў серыялаў

GET /3/genre/tv/list прымае той жа параметр language і вяртае ідэнтычны спіс, таму адна карта id у назву ахоплівае фільмы і серыялы. У даных спісаў id 10759 і 10762-10768 з’яўляюцца толькі ў запісах серыялаў, а id, напрыклад 28, 12 і 878, у запісах фільмаў. Калі вы фільтруеце серыялы ў пошуку па фільтрах, выкарыстоўвайце id для серыялаў, напрыклад 10765 для Sci-Fi and Fantasy.

Даведачныя спісы

Гэтыя шляхі вяртаюць даведачныя даныя для формаў, фільтраў і экранаў налад. Усе прымаюць ключ; ніводзін не прымае page.

Метад і шляхПараметрыКожны элемент або форма
GET /configuration/countriesнямаМасіў { iso_3166_1, english_name, native_name }
GET /configuration/languagesнямаМасіў { iso_639_1, english_name, name }
GET /configuration/primary_translationsнямаМасіў з 14 радкоў, напрыклад ru-RU
GET /configuration/jobsнямаМасіў { department, jobs }, дзе jobs пералічвае назвы пасад
GET /certification/movie/listняма{ certifications } па кодзе краіны, 10 краін
GET /certification/tv/listняма{ certifications } па кодзе краіны, адзін ключ на краіну ў каталогу
GET /watch/providers/regionslanguage{ results } з { iso_3166_1, english_name, native_name }
GET /watch/providers/movielanguage, watch_region{ results } са стрымінгавымі сэрвісамі
GET /watch/providers/tvlanguage, watch_region{ results } са стрымінгавымі сэрвісамі

/configuration/countries і /configuration/languages ігнаруюць language і заўсёды вяртаюць тыя ж назвы. native_name у спісе рэгіёнаў залежыць ад language. amodb не прапануе /configuration/timezones.

Запіс ўзроставага рэйтынгу называе рэйтынг, што ён азначае, і яго парадак сартавання. Запісы групуюцца па кодзе краіны, таму адзін выклік ахоплівае кожны рынак. Спіс для фільмаў мае тэксты рэйтынгаў. У спісе для серыялаў meaning ёсць пустым радком.

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

Прыклад скарочаны да 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. Перадайце код з /watch/providers/regions. Лагатыпы сэрвісаў загружаюцца з хоста выяў, гл. выявы.

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
}

Гэта адзін запіс з /watch/providers/movie?watch_region=US.

Памылкі

HTTPstatus_codeКалі
4017Ключ адсутнічае або няправільны.
40236Тэрмін дзеяння плана скончыўся.
40434Шляху не існуе, напрыклад /genre/book/list.
40537Вы выкарысталі метад запісу на шляху даведніка.
42925Вы перавысілі ліміт запытаў у хвіліну. Пачакайце 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 па-італьянску.