电影详情 API
电影详情接口按 ID 返回一部电影(GET /3/movie/{movie_id})。JSON 与 TMDB v3 一致,现有客户端只需换基础 URL。用 append_to_response 一次请求加入演职员、视频、图片,以及评分、情绪等扩展。
获取电影详情
GET / 返回一部电影的核心记录:标题、简介、时长、类型、上映日期、预算、收入、制作公司和图片路径。ID 就是 TMDB 使用的数字 ID,所以你已经存为 550 的电影在这里仍是这个 ID。
下面的示例以英语请求这部电影,并在同一次调用中追加它的评分。
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查询en-US、ru-RU或pt-BR这样的 TMDB 标签。提供 14 种基础语言。默认en-US。append_to_response查询最多 20 个子资源,用逗号分隔,合并进响应。
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
id | integer | 电影 ID。 |
imdb_id | string 或 null | 形如 tt0137523 的 IMDb ID。 |
title、original_title | string | 本地化标题和原始标题。 |
original_language | string | 形如 en 的语言代码。 |
overview、tagline | string | 本地化文本,没有译文时为空。 |
homepage | string | 官方网站,未知时为空。 |
release_date | string | YYYY-MM-DD,未知时为空。 |
status | string | 上映状态,例如 Released 或 In Production。 |
runtime | integer | 分钟。 |
budget、revenue | integer | 美元,未知时为 0。 |
genres | array | 带有 id 和 name 的对象。 |
belongs_to_collection | object 或 null | id、name、poster_path、backdrop_path。见系列合集。 |
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 | 形如 US 的国家代码。 |
poster_path、backdrop_path | string 或 null | 拼接到 https:/。见图片。 |
popularity | number | 热门列表使用的相对分数。 |
vote_average、vote_count | number、integer | 用户评分汇总。 |
adult、video | boolean | 二者都是 false。成人作品永远不会提供。 |
示例响应
GET /,较长的数组和文本已缩短:
{
"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 | 电影中出现的曲目 | 原声配乐 |
wikidata | Wikidata ID、预算、票房、奖项、拍摄地点 | 按外部 ID 查找 |
showtimes | 已知的影院放映场次 | 放映场次 |
每个追加的数据块都算作同一次 HTTP 请求的一部分。追加了十个值的请求仍然只占用你每分钟 20、40 或 120 个请求中的一个。追加的 ratings、moods 和 soundtracks 数据块省略了独立路径所返回的 id 键。
相关的电影接口
下面所有路径共用基础地址 https:/ 和 language 参数。
| 方法和路径 | 返回内容 | 额外参数 |
|---|---|---|
GET / | {id, titles},通常为空数组 | 无 |
GET / | 各国的上映日期和分级 | 无 |
GET / | 20 部推荐电影的列表 | 无 |
GET / | 20 部相似电影的列表 | 无 |
GET / | 大多数作品的 results 为空 | 无 |
GET / | 包含该电影的公开列表 | page |
GET / | 各国的流媒体和租赁平台 | 无 |
GET /movie/latest | 最新添加的电影记录 | 无 |
推荐和相似列表始终返回第 1 页的 20 项。lists 响应用 page 分页,每页 20 个列表。API 其他位置的分页列表,page 取 1 到 500。
演职员、图片、视频、译文、关键词和外部 ID 有各自的页面:演职员、图片、视频与预告片、译文、关键词和按外部 ID 查找。amodb 不提供 TMDB 的 changes 路径。
错误
错误使用 TMDB 的响应体,例如 {"success": false,。
| HTTP | status_code | 何时出现 |
|---|---|---|
| 401 | 7 | 密钥缺失或错误。 |
| 402 | 36 | 套餐周期已结束。 |
| 404 | 34 | 没有该 ID 的电影、不提供的路径,或成人作品。 |
| 405 | 37 | 你调用了给电影评分这类写入方法。 |
| 429 | 25 | 你超过了每分钟请求数。请等待 Retry-After 秒。 |