按调用形态来选

如果你只想要每部作品一条小记录,而且免费密钥够用,就选 OMDb。如果用量超出范围,或者希望在同一个密钥下把 OMDb 风格的请求与演职员、图片和译文放在一起,就选 amodb。OMDb 返回 JSON 或 XML,使用 apikey 参数,免费密钥每日请求上限为 1,000 次(请以其网站为准),另有付费支持者层级。amodb 只有付费方案,既响应 OMDb 的主要参数,也提供 TMDB v3。

保持不变的部分

OMDb 接口位于 https://api.amodb.dev/omdb/,末尾的斜杠可省略。下面这些元素,你现有的解析代码应该不需要修改。

OMDb 元素在 amodb 上
apikey同一个参数,填入你的 amodb 密钥
i 和 t按 IMDb ID 或按片名查找
s 和 page搜索,每页 10 条结果并带 totalResults 计数,page 最大 100
type 和 y按 movie 或 series 以及年份筛选
plotshort 或 full
r只接受 json
响应体字段与 OMDb 命名一致,从 Title 到 Response
Ratings由 Source 和 Value 组成的数组,包含 Internet Movie Database、Rotten Tomatoes 和 Metacritic(存在时)
错误{"Response":"False","Error":"..."},措辞与 OMDb 相同,HTTP 状态为 200

不会沿用的部分

  • XML。 带有 r=xml 的请求返回 400 和 {"Response":"False","Error":"Only r=json is supported."}。
  • 季和集。 Season 和 Episode 会被忽略,type=episode 查不到任何内容。带有 i=tt0903747&Season=1 的请求返回剧集记录,而不是某一季。剧集请使用 /3/tv/{id}/season/{n}。
  • 其他参数。 callback 会被忽略。
  • 没有数据的字段。 DVD、Production 和 Website 始终为 "N/A"。剧集记录带有 totalSeasons,不包含 DVD、BoxOffice、Production 和 Website。
  • 海报。 Poster 字段指向 https://img.amodb.dev/t/p/w300/...,而不是别的主机。把 w300 换成 w780 即可从同一路径获得更大的图片,图片无需密钥。

完整的参数和错误列表见 OMDb 接口页面。

示例响应

带有 t=Fight Club 的请求返回一个扁平对象。下面的响应是真实的,只缩短了 Plot 文本。

JSON
{
  "Title": "Fight Club",
  "Year": "1999",
  "Rated": "R",
  "Released": "15 Oct 1999",
  "Runtime": "139 min",
  "Genre": "Crime, Drama, Thriller",
  "Director": "David Fincher",
  "Writer": "Chuck Palahniuk, Jim Uhls",
  "Actors": "Brad Pitt, Edward Norton, Meat Loaf",
  "Plot": "A nameless first-person narrator attends support groups in an attempt to subdue his emotional state an...",
  "Language": "English",
  "Country": "United States, Germany",
  "Awards": "Nominated for 1 Oscar. 12 wins & 38 nominations total",
  "Poster": "https://img.amodb.dev/t/p/w300/qkrH7rjYKU4KOwwIl6wF6H3ISvm.jpg",
  "Ratings": [
    {
      "Source": "Internet Movie Database",
      "Value": "8.8/10"
    },
    {
      "Source": "Rotten Tomatoes",
      "Value": "81%"
    },
    {
      "Source": "Metacritic",
      "Value": "67/100"
    }
  ],
  "Metascore": "67",
  "imdbRating": "8.8",
  "imdbVotes": "2,669,989",
  "imdbID": "tt0137523",
  "Type": "movie",
  "DVD": "N/A",
  "BoxOffice": "$38,003,039",
  "Production": "N/A",
  "Website": "N/A",
  "Response": "True"
}

和 OMDb 一样,值都是字符串,因此 imdbRating、imdbVotes 和 Runtime 需要你自己解析。无论读取多少字段,每次调用都只计为一次请求,计入你的每分钟限制。

功能对比

功能OMDbamodb
定价模式免费密钥加付费支持者层级,请查看其网站预付,1 至 24 个月
免费额度免费密钥每日上限 1,000 次,请查看其网站无,也没有试用
认证方式apikey 参数/omdb/ 用 apikey,/3 用 api_key 或 Bearer
响应格式JSON 或 XMLJSON
语言请查阅其文档/3 路径支持 14 种界面语言
电影支持支持
电视剧剧集和单集,字段请查阅其文档/omdb/ 提供剧集记录,/3 路径提供季和集
人物每条记录中的姓名文本/3 路径提供资料、作品列表和图片
图片每条记录中的海报链接海报链接加图片列表,img.amodb.dev
评分Ratings、Metascore 和 imdbRating 字段相同字段,/3 路径另有 ratings 对象
速率限制免费密钥有每日上限,请查看其网站每个密钥每分钟 20、40 或 120 次
商业使用请查看其网站作为付费 API 出售,见定价
兼容性定义了 OMDb 协议上述 OMDb 参数,以及 TMDB v3 读取接口

amodb 的不同之处

  • 按分钟限速。 套餐允许在 60 秒滑动窗口内每分钟 20、40 或 120 个请求。带密钥的每次响应都有 X-RateLimit-Remaining,批处理任务可以在遇到 429 之前自行放慢。
  • 从单条记录向上扩展。 OMDb 的记录里,演员表是一段文本。使用 /3 路径,你可以一次调用同时获取同一作品的演职员、视频和译文,并且 imdbID 可通过 /3/find 找到该记录。
  • 更大的图片。 OMDb 风格的记录只给一个海报链接。图片主机提供十种尺寸标识,从 w92 到 original。
  • 更多评分来源。 /3/movie/{id}/ratings 扩展在已知时增加 Kinopoisk、Metacritic、Rotten Tomatoes 和 TMDB 的数值。

OMDb 更适合的场景

  • 小型或免费项目。 每日上限 1,000 次的免费密钥足以支撑原型或爱好者网站,而 amodb 没有免费额度。
  • 需要 XML 的使用方。 如果旧系统解析 XML,OMDb 支持而 amodb 不支持。
  • 季和集的查询。 amodb 的 /omdb/ 路由没有季或集模式,基于它构建的客户端需要改用 /3 路径。
  • 简单。 一个接口加少量参数,很容易上手。如果你只需要这些,迁移的收益不大。

迁移到 amodb

只需更换基础 URL 和密钥。请先在代码中搜索 r=xml、Season、Episode 和 type=episode,其余请求保持原样。

JavaScript
const OMDB_BASE = process.env.OMDB_BASE_URL; // before: your current OMDb base URL
const AMODB_BASE = 'https://api.amodb.dev/omdb/'; // after

async function lookup(title) {
  const url = new URL(AMODB_BASE);
  url.searchParams.set('apikey', process.env.AMODB_KEY);
  url.searchParams.set('t', title);
  url.searchParams.set('plot', 'short');
  const res = await fetch(url);
  const data = await res.json();
  if (data.Response === 'False') throw new Error(data.Error);
  return data;
}

const movie = await lookup('Fight Club');
console.log(movie.Title, movie.Year, movie.imdbRating, movie.Poster);

和使用 OMDb 时一样,继续检查 Response 字段。当值为字符串 "False" 时,Error 字段包含错误信息。对于剧集,用 /3/find 把 imdbID 映射一次,再从 /3 一侧读取各季:

curl
curl -s "https://api.amodb.dev/3/find/tt0903747?external_source=imdb_id&api_key=$AMODB_KEY"
curl -s "https://api.amodb.dev/3/tv/1396/season/1?api_key=$AMODB_KEY"

TMDB 风格的一侧,请参阅认证和快速开始。

定价

amodb 是付费的,只有在你再购买一个周期时才会续期。三个套餐只在速率上不同,分别为每分钟 20、40 或 120 个请求,且都返回全部数据。周期为 1、3、6、12 或 24 个月,较长的周期可享受 10% 至 40% 的折扣。当前金额请查看定价。