简要对比
amodb 是一个独立的 API,使用与 TMDB v3 相同的协议。只要不调用下面“不提供”表格里的路径,为 TMDB 编写的客户端在更换基础 URL 和密钥后就能从 amodb 读取数据。因此选择取决于条款、附加功能和少数缺口。TMDB 对符合条件的使用按其自身条款提供免费 API。amodb 是只读的付费 API,提供 14 种语言、五个额外数据块,限制按密钥计算。
接口兼容度
下表每一行给出一个 TMDB v3 读取路径,以及它在 https:/ 上的表现。
| 领域 | TMDB v3 路径 | 在 amodb 上 |
|---|---|---|
| 电影详情 | /movie/{movie_id} | 相同,另有五个 append_to_response 取值 |
| 电视剧详情 | /tv/{series_id} | 相同,但没有 type 字段,且大多数剧集的 created_by 为空 |
| 季和集 | / | 结构相同。季的图片、视频和译文为空,季和集的 external_ids 为 null |
| 人物 | /person/{person_id} | 相同,另有 combined_credits、movie_credits、tv_credits、external_ids 和 images(仅人物照片) |
| 演职员 | / | 相同。单集的 cast 为空 |
| 搜索 | /search/multi | 相同,缓存 10 分钟 |
| 发现 | /discover/movie | 相同,缓存 30 分钟 |
| 热门趋势 | / | 相同,缓存 30 分钟 |
| 列表 | /movie/popular | 相同,page 取值 1 到 500 |
| 图片 | / | 结构相同,文件从 img.amodb.dev 加载 |
| 视频 | / | 相同 |
| 译文 | / | 相同,提供 14 种语言 |
| 关键词 | / | 相同 |
| 评论 | / | 返回 200,但只有少数作品有评论,因此空列表属于正常情况 |
| 系列合集 | / | 相同,parts 按上映日期排序 |
| 公司和电视网 | /company/{company_id} | 键相同。公司的 description 为空,parent_company 为 null |
| 类型 | /genre/movie/list | 相同 |
| 配置 | /configuration | 键相同,图片主机为 img.amodb.dev |
| 按外部 ID 查找 | /find/{external_id} | 同一接口,另支持 kinopoisk_id。tv_episode_results 和 tv_season_results 始终为空 |
| 剧集分组 | / | 列出一部剧的分组,不含分组内容 |
amodb 未提供的功能
这些 TMDB v3 调用没有对应项。未知路径返回 404,status_code 为 34;写入方法返回 405,status_code 为 37。
| TMDB v3 调用 | amodb 的响应 |
|---|---|
/movie/changes、/tv/changes、/person/changes 以及单个 ID 下的 changes | 404,status_code 34 |
剧集或某一季下的 aggregate_credits | 404,status_code 34 |
/credit/{credit_id} 和 /review/{review_id} | 404,status_code 34 |
/tv/episode_group/{id} | 404,status_code 34 |
/、tagged_images 和 /person/latest | 404,status_code 34 |
系列合集、公司和电视网的 images、translations 和 alternative_names | 404,status_code 34 |
/ | 404,status_code 34 |
account、authentication、guest_session 和 list 下的全部内容,以及任何 /rating 或 /account_states 路径 | 405,status_code 37 |
如果你把 aggregate_credits 或 changes 加到 append_to_response,amodb 会忽略这个名称且不报错,因此响应体中就是缺少对应的键。
功能对比
| 功能 | TMDB | amodb |
|---|---|---|
| 定价模式 | 符合条件的使用免费,遵循 TMDB 条款 | 预付,每次购买 1 至 24 个月 |
| 免费额度 | 有,限符合条件的使用 | 无,也没有试用 |
| 认证方式 | api_key 中的 v3 密钥,或作为 Bearer 的 v4 令牌 | api_key 或 Bearer,密钥为 32 位十六进制 |
| 响应格式 | JSON | JSON,所提供路径上的字段相同 |
| 语言 | 请查阅其文档 | 提供 14 种,其他标签回退到 en |
| 电影 | 支持 | 支持 |
| 电视剧 | 支持 | 支持 |
| 人物 | 支持 | 支持 |
| 图片 | 支持 | img.amodb.dev,尺寸从 w92 到 original |
| 评分 | TMDB 用户评分,其他来源请查阅其文档 | 已知时在一个对象中提供五个来源 |
| 写入方法 | 账户、列表和评分方法 | 无,返回 405 |
| 速率限制 | 请查阅其文档 | 每个密钥每分钟 20、40 或 120 次 |
| 商业使用 | 商业使用和署名要求请查看其条款 | 付费套餐,见定价 |
| 兼容性 | 定义了 TMDB v3 | 大多数 TMDB v3 读取路径和一个 OMDb 路由 |
具体差异
- 条款。 TMDB 要求你阅读其关于商业使用和署名的条款。amodb 按预付周期销售,不会自动续费,没有免费额度,也没有试用。
- 语言。 amodb 提供 en、ru、uk、be、zh、pt、bg、he、cs、ro、fr、pl、it 和 es。它接受
ru-RU、pt-BR这类 TMDB 标签。德语、日语和韩语会回退到en,而original_title保留原始标题。TMDB 的语言覆盖范围请查阅其文档。见语言。 - 扩展。
append_to_response还接受moods、soundtracks、ratings、wikidata和showtimes,它们在电影和剧集下各有自己的路径。 - 外部 ID。
/3/find可解析imdb_id、tvdb_id、wikidata_id、kinopoisk_id、facebook_id、twitter_id和instagram_id。freebase_mid、freebase_id、tvrage_id、tiktok_id和youtube_id这几个来源会被接受,但返回空数组。缺少或未知的external_source返回 400,status_code为 22。 - 按设计为空。 季的图片、视频和译文,以及公司的
description始终为空。评论和剧集的created_by只对少数作品有内容。季和集的external_ids全部为 null。 - 成人内容。
include_adult会被忽略。成人影视作品和人物从不提供,请求时返回 404。 - 图片。 CDN 路径为
https:/。无需密钥,文件缓存 30 天。/ img.amodb.dev/ t/ p/ {size}/ {file} - 限制。 窗口是按密钥计算的 60 秒滑动窗口。响应头会显示剩余次数,缓存命中同样计数,因为限制检查先于缓存执行。
- 独立性。 目录数据来自公开和开放的来源以及我们自己的补充整理。结构相同并不保证每部作品的每个字段取值都一致。
TMDB 更适合的场景
- 符合条件的免费使用。 无需付费,这一点 amodb 无法比拟。
- 写入。 给作品评分、创建列表和账户会话在 TMDB 上可用,在 amodb 上返回 405。
- 变更动态。 TMDB 会列出发生变化的 ID,amodb 没有这类动态,你需要按自己的计划刷新。
- 聚合演职员和单条演职员查询。 这两者在 amodb 上都返回 404。请在作品上使用
/credits。 - 更广的语言需求。 如果你的界面需要这 14 种之外的语言,请先查看 TMDB。
- 已有的审批。 已经通过法务审查接受 TMDB 的团队,应当权衡再做一次审查的成本。
迁移到 amodb
每个请求只需改一行。
# before: TMDB_BASE is your current TMDB v3 base URL
curl -s "$TMDB_BASE/movie/550?api_key=$TMDB_KEY"
# after
curl -s "https://api.amodb.dev/3/movie/550?api_key=$AMODB_KEY"切换前,请并排对比几个响应的结构。下面的脚本会打印一侧返回而另一侧没有的顶层键。
async function topLevelKeys(base, key, path) {
const res = await fetch(`${base}${path}?api_key=${key}`);
if (!res.ok) throw new Error(`${path} returned ${res.status}`);
return Object.keys(await res.json()).sort();
}
for (const path of ['/movie/550', '/tv/1396', '/person/31']) {
const current = await topLevelKeys(process.env.TMDB_BASE, process.env.TMDB_KEY, path);
const next = await topLevelKeys('https://api.amodb.dev/3', process.env.AMODB_KEY, path);
const missing = current.filter((k) => !next.includes(k));
console.log(path, missing.length ? `missing: ${missing.join(', ')}` : 'same keys');
}对于某部作品,可选字段可能不同,因此请把缺失的键当作需要检查的线索,而不是结论。然后按下面的清单逐项处理:
- 在定价页选择套餐,然后在账户后台创建密钥。
- 把基础 URL 和密钥移入配置。
- 从
/3/configuration读取images.secure_base_url。 - 在代码中搜索写入调用,以及“不提供”表格中的路径。写入继续使用 TMDB,其余部分替换掉。
- 添加 429 处理,等待
Retry-After秒。见速率限制和错误。
定价
amodb 采用预付方式。可选择 1、3、6、12 或 24 个月,分别享受 0、10、20、30 或 40% 的折扣,并在每分钟 20、40 或 120 个请求的三个套餐中选择一个。所有套餐返回的数据相同,也都不会自动续费。具体金额见定价。