Жанрове и справочни списъци

Ендпойнтите за жанрове и справочници връщат малки справочни списъци, които зареждате веднъж: 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 на италиански.