API дэталяў фільма

Эндпоінт дэталяў фільма вяртае адзін фільм па id па адрасе GET /3/movie/{movie_id}. JSON адпавядае TMDB v3, таму існуючым кліентам трэба толькі новы базавы URL. Дадайце append_to_response, каб атрымаць credits, videos, images і дадаткі amodb ratings, moods, soundtracks, wikidata і showtimes адным запытам.

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

Атрыманне дэталяў фільма

GET /3/movie/{movie_id} вяртае асноўны запіс аднаго фільма: назвы, апісанне, працягласць, жанры, дату выхаду, бюджэт, зборы, вытворчыя кампаніі і шляхі да выяў. Id той самы лікавы id, што выкарыстоўвае TMDB, таму фільм, які вы ўжо захоўваеце як 550, захоўвае гэты id і тут.

У прыкладзе ніжэй фільм запытваецца па-англійску і ў тым жа выкліку дадаюцца яго рэйтынгі.

bashjspyphpgo
curl -s "https://api.amodb.dev/3/movie/550?language=en-US&append_to_response=ratings" \
  -H "Authorization: Bearer $AMODB_KEY"
const url = 'https://api.amodb.dev/3/movie/550?language=en-US&append_to_response=ratings';
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` } });
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const movie = await res.json();
console.log(movie.title, movie.runtime, movie.ratings.imdb?.value);
import os
import requests

r = requests.get(
    "https://api.amodb.dev/3/movie/550",
    params={"language": "en-US", "append_to_response": "ratings"},
    headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
    timeout=10,
)
r.raise_for_status()
movie = r.json()
imdb = movie["ratings"]["imdb"]
print(movie["title"], movie["runtime"], imdb and imdb["value"])
<?php
$url = 'https://api.amodb.dev/3/movie/550?language=en-US&append_to_response=ratings';
$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");
}
$movie = json_decode($body, true);
echo $movie['title'], ' ', $movie['runtime'], ' ', $movie['ratings']['imdb']['value'] ?? 'n/a', PHP_EOL;
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"os"
)

type Movie struct {
	Title   string `json:"title"`
	Runtime int    `json:"runtime"`
}

func main() {
	url := "https://api.amodb.dev/3/movie/550?language=en-US"
	req, _ := http.NewRequest("GET", url, nil)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		panic(res.Status)
	}
	var m Movie
	json.NewDecoder(res.Body).Decode(&m)
	fmt.Println(m.Title, m.Runtime)
}

Параметры

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

Палі адказу

ПолеТыпЗаўвагі
idцэлы лікId фільма.
imdb_idрадок або nullIMDb id, напрыклад tt0137523.
title, original_titleрадокЛакалізаваная і арыгінальная назва.
original_languageрадокКод мовы, напрыклад en.
overview, taglineрадокЛакалізаваны тэкст, пусты, калі перакладу няма.
homepageрадокАфіцыйны сайт, пусты, калі невядомы.
release_dateрадокYYYY-MM-DD, пусты, калі невядомая.
statusрадокСтан выхаду, напрыклад Released або In Production.
runtimeцэлы лікХвіліны.
budget, revenueцэлы лікДаляры ЗША, 0, калі невядома.
genresмасіўАб’екты з id і name.
belongs_to_collectionаб’ект або nullid, name, poster_path, backdrop_path. Гл. калекцыі.
production_companiesмасіўid, logo_path, name, origin_country.
production_countriesмасіўiso_3166_1, name.
spoken_languagesмасіўenglish_name, iso_639_1, name.
origin_countryмасіўКоды краін, напрыклад US.
poster_path, backdrop_pathрадок або nullДадайце да https://img.amodb.dev/t/p/{size}. Гл. выявы.
popularityлікАдносная ацэнка, якую выкарыстоўвае спіс папулярных.
vote_average, vote_countлік, цэлы лікЗводная ацэнка карыстальнікаў.
adult, videoлагічнае значэннеАбодва false. Фільмы для дарослых ніколі не вяртаюцца.

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

GET /3/movie/550?language=en-US&append_to_response=ratings, доўгія масівы і тэкст скарочаны:

JSON
{
  "adult": false,
  "backdrop_path": "/b9HyPoxwxjxkWEUL5ErZdhApQe2.jpg",
  "belongs_to_collection": null,
  "budget": 63000000,
  "genres": [
    {
      "id": 18,
      "name": "Drama"
    },
    {
      "id": 53,
      "name": "Thriller"
    }
  ],
  "homepage": "https://www.20thcenturystudios.com/movies/fight-club",
  "id": 550,
  "imdb_id": "tt0137523",
  "origin_country": [
    "US",
    "DE"
  ],
  "original_language": "en",
  "original_title": "Fight Club",
  "overview": "A ticking-time-bomb insomniac and a slippery soap salesman channel primal male aggression into a shocking n...",
  "popularity": 39.0054,
  "poster_path": "/jSziioSwPVrOy9Yow3XhWIBDjq1.jpg",
  "production_companies": [
    {
      "id": 25,
      "logo_path": "/nM2MfoMqzJQRiSynsDabOtFKetD.png",
      "name": "20th Century Fox",
      "origin_country": "US"
    },
    {
      "id": 508,
      "logo_path": "/4sGWXoboEkWPphI6es6rTmqkCBh.png",
      "name": "Regency Enterprises",
      "origin_country": "US"
    }
  ],
  "production_countries": [
    {
      "iso_3166_1": "US",
      "name": "United States of America"
    },
    {
      "iso_3166_1": "DE",
      "name": "Germany"
    }
  ],
  "release_date": "1999-10-15",
  "revenue": 101209702,
  "runtime": 139,
  "spoken_languages": [
    {
      "english_name": "English",
      "iso_639_1": "en",
      "name": "English"
    }
  ],
  "status": "Released",
  "tagline": "Mischief. Mayhem. Soap.",
  "title": "Fight Club",
  "video": false,
  "vote_average": 8.437,
  "vote_count": 33039,
  "ratings": {
    "imdb": {
      "value": 8.8,
      "votes": 2669989
    },
    "kinopoisk": {
      "value": 8.7,
      "votes": null
    },
    "metacritic": {
      "value": 67,
      "votes": null
    },
    "rotten_tomatoes": {
      "value": 81,
      "votes": null
    },
    "tmdb": {
      "value": 8.437,
      "votes": 33039
    }
  }
}

Блок ratings паходзіць з append_to_response. Кожная крыніца ўяўляе сабой аб’ект {value, votes} або null, як апісана на старонцы рэйтынгі.

Аб’яднанне даных праз append_to_response

Адзін выклік можа замяніць шэсць. Пералічыце патрэбныя падрэсурсы, і кожны прыйдзе пад уласным ключом. Працуюць стандартныя значэнні TMDB: credits, videos, images, keywords, translations, external_ids, release_dates, alternative_titles, recommendations, similar, reviews, lists і watch/providers. amodb дадае яшчэ пяць.

ЗначэннеШто дадаеПадрабязнасці
ratingsАцэнкі IMDb, Kinopoisk, Metacritic, Rotten Tomatoes і TMDBРэйтынгі
moodsІндыкатары настроюНастрой
soundtracksТрэкі, што гучаць у фільмеСаўндтрэкі
wikidataId Wikidata, бюджэт, зборы, узнагароды, лакацыі здымакПошук па вонкавым ідэнтыфікатары
showtimesСеансы ў кінатэатрах, дзе вядомыяСеансы

Кожны далучаны блок з’яўляецца часткай аднаго HTTP-запыту. Запыт з дзесяццю далучанымі значэннямі ўсё роўна расходуе адзін з вашых 20, 40 або 120 запытаў у хвіліну. Далучаныя блокі ratings, moods і soundtracks не ўтрымліваюць ключ id, які вяртаюць самастойныя шляхі.

Звязаныя эндпоінты фільма

Усе шляхі ніжэй маюць агульную аснову https://api.amodb.dev/3 і параметр language.

Метад і шляхШто вяртаеДадатковыя параметры
GET /movie/{movie_id}/alternative_titles{id, titles}, часта пусты масіўняма
GET /movie/{movie_id}/release_datesДаты выхаду і ўзроставыя рэйтынгі па краінахняма
GET /movie/{movie_id}/recommendationsСпіс з 20 рэкамендаваных фільмаўняма
GET /movie/{movie_id}/similarСпіс з 20 падобных фільмаўняма
GET /movie/{movie_id}/reviewsresults пусты для большасці назваўняма
GET /movie/{movie_id}/listsПублічныя спісы, якія змяшчаюць фільмpage
GET /movie/{movie_id}/watch/providersСтрымінгавыя сэрвісы і пракат па краінахняма
GET /movie/latestАпошні дададзены запіс фільманяма

Спісы recommendations і similar заўсёды вяртаюць старонку 1 з 20 элементамі. Адказ lists падзелены на старонкі праз page, па 20 спісаў на старонку. Іншыя спісы па старонках у API прымаюць page ад 1 да 500.

Акцёры, выявы, відэа, пераклады, ключавыя словы і вонкавыя id маюць свае старонкі: удзельнікі, выявы, відэа і трэйлеры, пераклады, ключавыя словы і пошук па вонкавым ідэнтыфікатары. amodb не прапануе шляхі TMDB changes.

Памылкі

Памылкі выкарыстоўваюць цела TMDB, напрыклад {"success": false, "status_code": 34, "status_message": "The resource you requested could not be found."}.

HTTPstatus_codeКалі
4017Ключ адсутнічае або няправільны.
40236Тэрмін дзеяння плана скончыўся.
40434Фільма з гэтым id няма, шлях не падтрымліваецца або гэта фільм для дарослых.
40537Вы выклікалі метад запісу, напрыклад ацэнку фільма.
42925Вы перавысілі ліміт запытаў у хвіліну. Пачакайце Retry-After секунд.

Поўны спіс ёсць на старонцы памылкі, а ліміты па планах на старонцы ліміты запытаў.

Практычныя заўвагі

  • Захоўвайце id і imdb_id разам. Любы з іх зноў знаходзіць фільм праз пошук па вонкавым ідэнтыфікатары.
  • Запытвайце тую мову, якую паказваеце. Тэкставае поле можа быць пустым, калі ў гэтай мове няма перакладу, таму правярайце пусты радок і паўтарайце запыт з en-US, калі патрэбна запасная мова.
  • Кэшуйце дэталі на сваім баку на некалькі гадзін. Кэш на серверы ўжо трымае іх 6 гадзін, таму карацейшы кліенцкі кэш нічога не дае.
  • Каб атрымаць спіс фільмаў, а не адзін, глядзіце пошук, пошук па фільтрах і трэнды і спісы.