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.
Pobieranie szczegółów filmu
GET / 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.
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_idpathwymaganyNumeryczne ID filmu, na przykład550.api_keyqueryjeden z dwóchTwój klucz. Użyj go albo nagłówkaAuthorization: Bearer.languagequeryTag TMDB, na przykładen-US,ru-RUlubpt-BR. Obsługiwanych jest 14 języków bazowych. Domyślnieen-US.append_to_responsequeryLista do 20 podzasobów oddzielonych przecinkami, scalanych z odpowiedzią.
Pola odpowiedzi
| Pole | Typ | Uwagi |
|---|---|---|
id | integer | ID filmu. |
imdb_id | string lub null | ID z IMDb, na przykład tt0137523. |
title, original_title | string | Tytuł zlokalizowany i oryginalny. |
original_language | string | Kod języka, na przykład en. |
overview, tagline | string | Tekst zlokalizowany, pusty, gdy tłumaczenie nie istnieje. |
homepage | string | Oficjalna strona, pusta, gdy nieznana. |
release_date | string | YYYY-MM-DD, puste, gdy nieznana. |
status | string | Stan premiery, na przykład Released lub In Production. |
runtime | integer | Minuty. |
budget, revenue | integer | Dolary amerykańskie, 0, gdy nieznane. |
genres | array | Obiekty z id i name. |
belongs_to_collection | object lub null | id, name, poster_path, backdrop_path. Zobacz kolekcje. |
production_companies | array | id, logo_path, name, origin_country. |
production_countries | array | iso_3166_1, name. |
spoken_languages | array | english_name, iso_639_1, name. |
origin_country | array | Kody krajów, na przykład US. |
poster_path, backdrop_path | string lub null | Dołącz do https:/. Zobacz obrazy. |
popularity | number | Względny wskaźnik używany przez listę popularnych. |
vote_average, vote_count | number, integer | Zbiorcza ocena użytkowników. |
adult, video | boolean | Oba są false. Tytuły dla dorosłych nigdy nie są udostępniane. |
Przykładowa odpowiedź
GET /, z długimi tablicami i tekstami skróconymi:
{
"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ść | Dodaje | Szczegóły |
|---|---|---|
ratings | Oceny z IMDb, Kinopoisk, Metacritic, Rotten Tomatoes i TMDB | Oceny |
moods | Mierniki nastroju | Nastroje |
soundtracks | Utwory słyszane w filmie | Ścieżki dźwiękowe |
wikidata | ID Wikidata, budżet, przychody, nagrody, miejsca zdjęć | Wyszukiwanie po zewnętrznym ID |
showtimes | Seanse kinowe, gdzie są znane | Seanse |
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:/ i parametr language.
| Metoda i ścieżka | Zwraca | Dodatkowe parametry |
|---|---|---|
GET / | {id, titles}, często pusta tablica | brak |
GET / | Daty premier i klasyfikacje wiekowe według krajów | brak |
GET / | Lista 20 polecanych filmów | brak |
GET / | Lista 20 podobnych filmów | brak |
GET / | results jest puste dla większości tytułów | brak |
GET / | Publiczne listy zawierające film | page |
GET / | Dostawcy streamingu i wypożyczeń według krajów | brak |
GET /movie/latest | Najnowszy dodany rekord filmu | brak |
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,.
| HTTP | status_code | Kiedy |
|---|---|---|
| 401 | 7 | Brakuje klucza lub jest błędny. |
| 402 | 36 | Okres planu dobiegł końca. |
| 404 | 34 | Brak filmu o tym ID, ścieżka, która nie jest udostępniana, lub tytuł dla dorosłych. |
| 405 | 37 | Wywołano metodę zapisu, na przykład ocenianie filmu. |
| 429 | 25 | Przekroczono 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
idiimdb_idrazem. 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.