API szczegółów filmu

Endpoint szczegółów filmu zwraca jeden film po ID pod GET /3/movie/{movie_id}. JSON odpowiada TMDB v3, więc istniejący klienci potrzebują tylko nowego bazowego URL. Dodaj append_to_response, by w jednym żądaniu pobrać obsadę, wideo, obrazy oraz dodatki amodb: oceny, nastroje, ścieżki dźwiękowe, wikidata i seanse.

Zaktualizowano Zobacz jako Markdown

Pobieranie szczegółów filmu

GET /3/movie/{movie_id} zwraca podstawowy rekord jednego filmu: tytuły, opis, czas trwania, gatunki, datę premiery, budżet, przychody, firmy produkcyjne i ścieżki obrazów. ID to to samo numeryczne ID, którego używa TMDB, więc film zapisany już jako 550 zachowuje tu to ID.

Poniższy przykład prosi o film po angielsku i w tym samym wywołaniu dołącza jego oceny.

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

Parametry

  • movie_idpathwymagany
    Numeryczne ID filmu, na przykład 550.
  • api_keyqueryjeden z dwóch
    Twój klucz. Użyj go albo nagłówka Authorization: Bearer.
  • languagequery
    Tag TMDB, na przykład en-US, ru-RU lub pt-BR. Obsługiwanych jest 14 języków bazowych. Domyślnie en-US.
  • append_to_responsequery
    Lista do 20 podzasobów oddzielonych przecinkami, scalanych z odpowiedzią.

Pola odpowiedzi

PoleTypUwagi
idintegerID filmu.
imdb_idstring lub nullID z IMDb, na przykład tt0137523.
title, original_titlestringTytuł zlokalizowany i oryginalny.
original_languagestringKod języka, na przykład en.
overview, taglinestringTekst zlokalizowany, pusty, gdy tłumaczenie nie istnieje.
homepagestringOficjalna strona, pusta, gdy nieznana.
release_datestringYYYY-MM-DD, puste, gdy nieznana.
statusstringStan premiery, na przykład Released lub In Production.
runtimeintegerMinuty.
budget, revenueintegerDolary amerykańskie, 0, gdy nieznane.
genresarrayObiekty z id i name.
belongs_to_collectionobject lub nullid, name, poster_path, backdrop_path. Zobacz kolekcje.
production_companiesarrayid, logo_path, name, origin_country.
production_countriesarrayiso_3166_1, name.
spoken_languagesarrayenglish_name, iso_639_1, name.
origin_countryarrayKody krajów, na przykład US.
poster_path, backdrop_pathstring lub nullDołącz do https://img.amodb.dev/t/p/{size}. Zobacz obrazy.
popularitynumberWzględny wskaźnik używany przez listę popularnych.
vote_average, vote_countnumber, integerZbiorcza ocena użytkowników.
adult, videobooleanOba są false. Tytuły dla dorosłych nigdy nie są udostępniane.

Przykładowa odpowiedź

GET /3/movie/550?language=en-US&append_to_response=ratings, z długimi tablicami i tekstami skróconymi:

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

Blok ratings pochodzi z append_to_response. Każdy dostawca to obiekt {value, votes} albo null, jak opisuje strona oceny.

Łączenie danych przez append_to_response

Jedno wywołanie może zastąpić sześć. Wypisz potrzebne podzasoby, a każdy przyjdzie pod własnym kluczem. Działają standardowe wartości TMDB: credits, videos, images, keywords, translations, external_ids, release_dates, alternative_titles, recommendations, similar, reviews, lists i watch/providers. amodb dodaje pięć kolejnych.

WartośćDodajeSzczegóły
ratingsOceny z IMDb, Kinopoisk, Metacritic, Rotten Tomatoes i TMDBOceny
moodsMierniki nastrojuNastroje
soundtracksUtwory słyszane w filmieŚcieżki dźwiękowe
wikidataID Wikidata, budżet, przychody, nagrody, miejsca zdjęćWyszukiwanie po zewnętrznym ID
showtimesSeanse kinowe, gdzie są znaneSeanse

Każdy dołączony blok liczy się jako część jednego żądania HTTP. Żądanie z dziesięcioma dołączonymi wartościami nadal zużywa jedno z twoich 20, 40 lub 120 żądań na minutę. Dołączone bloki ratings, moods i soundtracks pomijają klucz id, który zwracają samodzielne ścieżki.

Powiązane endpointy filmów

Wszystkie poniższe ścieżki mają wspólną bazę https://api.amodb.dev/3 i parametr language.

Metoda i ścieżkaZwracaDodatkowe parametry
GET /movie/{movie_id}/alternative_titles{id, titles}, często pusta tablicabrak
GET /movie/{movie_id}/release_datesDaty premier i klasyfikacje wiekowe według krajówbrak
GET /movie/{movie_id}/recommendationsLista 20 polecanych filmówbrak
GET /movie/{movie_id}/similarLista 20 podobnych filmówbrak
GET /movie/{movie_id}/reviewsresults jest puste dla większości tytułówbrak
GET /movie/{movie_id}/listsPubliczne listy zawierające filmpage
GET /movie/{movie_id}/watch/providersDostawcy streamingu i wypożyczeń według krajówbrak
GET /movie/latestNajnowszy dodany rekord filmubrak

Listy rekomendacji i podobnych zawsze zwracają stronę 1 z 20 pozycjami. Odpowiedź lists ma paginację przez page, po 20 list na stronę. Listy z paginacją w innych miejscach API przyjmują page od 1 do 500.

Obsada, obrazy, wideo, tłumaczenia, słowa kluczowe i zewnętrzne ID mają własne strony: obsada i ekipa, obrazy, wideo i zwiastuny, tłumaczenia, słowa kluczowe i wyszukiwanie po zewnętrznym ID. amodb nie udostępnia ścieżek changes z TMDB.

Błędy

Błędy używają treści TMDB, na przykład {"success": false, "status_code": 34, "status_message": "The resource you requested could not be found."}.

HTTPstatus_codeKiedy
4017Brakuje klucza lub jest błędny.
40236Okres planu dobiegł końca.
40434Brak filmu o tym ID, ścieżka, która nie jest udostępniana, lub tytuł dla dorosłych.
40537Wywołano metodę zapisu, na przykład ocenianie filmu.
42925Przekroczono limit żądań na minutę. Poczekaj tyle sekund, ile podaje Retry-After.

Pełna lista jest na stronie błędy, a limity według planów na stronie limity żądań.

Praktyczne uwagi

  • Zapisuj id i imdb_id razem. Którekolwiek pozwala znaleźć film ponownie przez wyszukiwanie po zewnętrznym ID.
  • Żądaj języka, który wyświetlasz. Pole tekstowe może być puste, gdy w tym języku nie ma tłumaczenia, więc sprawdź pusty ciąg i w razie potrzeby zapytaj ponownie z en-US.
  • Zapisuj szczegóły w cache u siebie na kilka godzin. Cache serwera trzyma je 6 godzin, więc krótszy cache klienta nic nie daje.
  • Aby wypisać filmy zamiast czytać jeden, zobacz wyszukiwanie, discover i trendy i listy.