选择哪个 API
TMDB 对符合条件的使用按其自身条款提供免费 API,有 API v3 密钥和 v4 令牌。发布之前,请阅读其关于商业使用和署名的条款。当你需要付费协议、可规划的限制,或每次响应包含更多数据时,可以选择替代方案。amodb 是独立的 API,读取部分遵循 TMDB v3 协议,因此切换只需要新的基础 URL 和新的密钥。它是只读的,少数 TMDB 路径不提供,详见下文。
如果免费条款适合你的项目,而且下一节的情况都不适用,就继续使用 TMDB。
需要替代方案的信号
五项检查可以帮助你决定。请用你自己的流量和合同来检验,而不是对照功能清单。
| 信号 | 要检验什么 | amodb 的回答 |
|---|---|---|
| 商业条款 | 阅读你目前使用的 API 关于商业使用和署名的条款 | 付费套餐,预付,不自动续费 |
| 峰值流量 | 统计你最忙那一分钟的请求数 | 每个密钥每分钟固定 20、40 或 120 个请求 |
| 每屏数据量 | 列出一个作品页背后的额外调用 | append_to_response 还接受 ratings、moods、soundtracks、wikidata 和 showtimes |
| 界面语言 | 检查你发布的每一种语言 | 14 种语言,其余回退到 en |
| 退出成本 | 统计代码中点名某个供应商的行数 | 已提供的接口路径和 JSON 相同,因此离开时同样只需更换基础 URL |
缓存命中也会计数。密钥检查和速率限制先于边缘缓存执行,所以重复的请求仍然占用你每分钟请求数中的一个。请按总请求数来规划,而不是按缓存未命中数。
功能对比
| 功能 | TMDB | amodb |
|---|---|---|
| 定价模式 | 符合条件的使用按其自身条款免费 | 预付 1、3、6、12 或 24 个月 |
| 免费额度 | 有,限符合条件的使用 | 无,也没有试用 |
| 认证方式 | api_key 中的 v3 密钥,或作为 Bearer 的 v4 令牌 | api_key 或 Bearer,32 位十六进制密钥 |
| 响应格式 | JSON | TMDB v3 格式的 JSON |
| 语言 | 请查阅其文档 | 14 种界面语言 |
| 电影 | 支持 | 支持 |
| 电视剧 | 支持 | 支持,含季和集 |
| 人物 | 支持 | 支持 |
| 图片 | 支持,来自其自有图片主机 | img.amodb.dev,尺寸标识相同,无需密钥 |
| 评分 | TMDB 用户评分,其他来源请查阅其文档 | TMDB 评分,另有已知的 IMDb、Kinopoisk、Metacritic 和 Rotten Tomatoes |
| 写入方法 | 账户、列表和评分方法 | 不提供,返回 405 |
| 速率限制 | 请查阅其文档 | 每个密钥每分钟 20、40 或 120 次 |
| 商业使用 | 商业使用和署名要求请查看其条款 | 作为付费 API 出售,见定价 |
| 兼容性 | 定义了 v3 协议 | 大多数 v3 读取路径,另有 OMDb |
amodb 的不同之处
- 看得见的限制。 每个带密钥的响应都包含
X-RateLimit-Limit、X-RateLimit-Remaining和以秒为单位的X-RateLimit-Reset。429 响应还带有Retry-After。这些数字在速率限制页中有说明。 - 一次调用获取额外数据块。 五个来源的评分、情绪指数、原声配乐、Wikidata 事实和影院放映场次都通过
append_to_response返回,因此一个作品页可以只用一次请求。 - 更多外部 ID 来源。
/3/find可解析imdb_id、tvdb_id、wikidata_id和kinopoisk_id,也支持facebook_id、twitter_id和instagram_id。见按外部 ID 查找。 - 同一个密钥使用 OMDb。
https:/通过/ api.amodb.dev/ omdb/ apikey参数响应 OMDb 风格的调用,当你的两个系统使用不同协议时很有用。 - 明确的缓存时间。 详情和演职员在边缘缓存 6 小时,热门趋势和发现 30 分钟,搜索 10 分钟,配置 24 小时,图片 30 天。
TMDB 更适合的场景
- 免费项目。 如果你的使用符合免费条款,TMDB 不花一分钱,这一点 amodb 无法比拟。
- 用户写入方法。 TMDB 提供账户、会话、评分和列表的写入方法。amodb 对它们返回 405 和 status_code 37,因此允许用户登录并给作品评分的应用,应在这一部分继续使用 TMDB。
- 变更动态。 TMDB 会列出发生变化的 ID。amodb 没有这类动态,你需要按自己的计划刷新。
- 超出 14 种的语言。 amodb 不提供德语、日语或韩语的界面文本,会回退到英语。原始片名仍会出现在
original_title和original_name中。TMDB 上其他语言的情况请查阅其文档。 - 已接受的条款。 如果 TMDB 的法务审查已经完成,切换就意味着要再审查一次。
amodb 不提供什么
切换之前,请对照这份清单检查你的代码。完整的表格见 amodb 与 TMDB。
| TMDB 调用 | amodb 的响应 |
|---|---|
| 账户、会话、评分和列表的写入 | 405,status_code 37 |
| 变更、聚合演职员、单条演职员和评论查询、剧集分组内容 | 404,status_code 34 |
| 人物译文,系列合集、公司和电视网的图片与译文 | 404,status_code 34 |
| 电影或剧集的评论列表 | 200,大多数作品为空 |
| 季的图片、视频和译文 | 200,为空 |
| 季和集的外部 ID | 200,全部为 null |
有两种行为不会报错。amodb 不认识的 append_to_response 名称,例如 aggregate_credits,会被忽略而不返回错误。include_adult 参数同样被忽略,因为成人影视作品和人物从不提供。
迁移到 amodb
- 在定价页选择套餐,然后在账户后台创建密钥。
- 在同一个位置替换基础 URL 和密钥,如下所示。
- 从
/3/configuration读取images.secure_base_url,让图片链接使用img.amodb.dev。 - 删除对写入方法和上表所列路径的调用。
- 处理 429:等待
Retry-After指定的秒数。
const config = {
// before: baseUrl held your current TMDB v3 base URL
baseUrl: 'https://api.amodb.dev/3',
apiKey: process.env.AMODB_KEY,
};
const res = await fetch(`${config.baseUrl}/movie/550?language=en-US`, {
headers: { Authorization: `Bearer ${config.apiKey}` },
});
if (!res.ok) throw new Error(`request failed with status ${res.status}`);
const movie = await res.json();
console.log(movie.title, movie.release_date);切换之前,请在两个基础 URL 上分别运行现有测试。结构相同并不保证值完全一致,所以请对比你自己作品的一批样本。完整流程见快速开始,对照表见 amodb 与 TMDB。
错误处理可以沿用
失败的调用返回 TMDB 的响应体 {"success": false,,因此基于 status_code 分支的代码无需重写。
| HTTP | status_code | 常见原因 |
|---|---|---|
| 401 | 7 | 密钥缺失或拼写错误 |
| 401 | 10 | 密钥已停用 |
| 402 | 36 | 预付周期已结束 |
| 404 | 34 | 找不到 ID,或 amodb 不提供的路径 |
| 405 | 37 | 你的代码仍在调用的写入方法 |
| 429 | 25 | 60 秒内的请求数超出套餐允许值 |
请把 402 当作需要手动续费的信号,因为没有任何内容会自动续费。完整列表见错误。
定价
amodb 采用预付方式。可选择 1、3、6、12 或 24 个月的周期,分别享受 0、10、20、30 或 40% 的折扣,并在每分钟 20、40 或 120 个请求的三个套餐中选择一个。所有套餐都能获取全部数据,也都不会自动续费。没有免费额度,也没有试用。当前金额见定价。