# OMDb API 替代方案

> OMDb 只返回单条记录，免费密钥每日上限 1,000 次（以其网站为准）。amodb 在 /omdb/ 响应 i、t、s、type、y、plot 和 page，字段相同，按分钟限速，同一密钥另有 TMDB v3 接口。仅 JSON，无 XML 和剧集。

## 按调用形态来选

如果你只想要每部作品一条小记录，而且免费密钥够用，就选 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` 以及年份筛选                                                             |
| `plot`       | `short` 或 `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 接口](https://amodb.dev/zh/omdb-endpoint/)页面。

## 示例响应

带有 `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` 需要你自己解析。无论读取多少字段，每次调用都只计为一次请求，计入你的每分钟限制。

## 功能对比

| 功能   | OMDb                                    | amodb                                            |
| ---- | --------------------------------------- | ------------------------------------------------ |
| 定价模式 | 免费密钥加付费支持者层级，请查看其网站                     | 预付，1 至 24 个月                                     |
| 免费额度 | 免费密钥每日上限 1,000 次，请查看其网站                 | 无，也没有试用                                          |
| 认证方式 | `apikey` 参数                             | `/omdb/` 用 `apikey`，`/3` 用 `api_key` 或 Bearer    |
| 响应格式 | JSON 或 XML                              | JSON                                             |
| 语言   | 请查阅其文档                                  | `/3` 路径支持 14 种界面语言                               |
| 电影   | 支持                                      | 支持                                               |
| 电视剧  | 剧集和单集，字段请查阅其文档                          | `/omdb/` 提供剧集记录，`/3` 路径提供季和集                     |
| 人物   | 每条记录中的姓名文本                              | `/3` 路径提供资料、作品列表和图片                              |
| 图片   | 每条记录中的海报链接                              | 海报链接加图片列表，`img.amodb.dev`                        |
| 评分   | `Ratings`、`Metascore` 和 `imdbRating` 字段 | 相同字段，`/3` 路径另有 `ratings` 对象                      |
| 速率限制 | 免费密钥有每日上限，请查看其网站                        | 每个密钥每分钟 20、40 或 120 次                            |
| 商业使用 | 请查看其网站                                  | 作为付费 API 出售，见[定价](https://amodb.dev/zh/pricing/) |
| 兼容性  | 定义了 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`，其余请求保持原样。

```js
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` 一侧读取各季：

```bash
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 风格的一侧，请参阅[认证](https://amodb.dev/zh/authentication/)和[快速开始](https://amodb.dev/zh/quickstart/)。

## 定价

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

## 常见问题

### 我需要重写 OMDb 客户端吗？

如果它只用到 i、t、s、type、y、plot 和 page，就不需要。把基础 URL 改为 https://api.amodb.dev/omdb/，并把你的 amodb 密钥填入 apikey 参数。响应体保留 imdbRating 等 OMDb 字段名。不支持 Season 和 Episode 参数以及 r=xml。

### amodb 的 OMDb 接口会返回 XML 吗？

不会，只返回 JSON。带有 r=xml 的请求会得到 400 响应，错误信息为 Only r=json is supported，因此切换之前请删除 r 参数或设为 r=json。

### OMDb 接口能查询季和集吗？

不能。Season 和 Episode 参数会被忽略，所以带 i 和 Season=1 的请求返回的是剧集记录，type=episode 则查不到任何内容。请用同一个密钥从 /3/tv/{id}/season/{n} 读取剧集。

### 限制与 OMDb 免费密钥有何不同？

OMDb 的文档中，免费密钥每日上限为 1,000 次，当前条款请以其网站为准。amodb 按密钥限制每分钟请求数，根据套餐为 20、40 或 120。

### 海报图片从哪里加载？

Poster 字段指向 img.amodb.dev，尺寸为 w300。把同一 URL 中的 w300 换成 w780 等其他尺寸，即可得到更大的图片。图片无需密钥。

### 同一个密钥可以用于 TMDB 风格的调用吗？

可以。一个密钥同时适用于 /omdb/ 和 /3 路径。这样你可以为某个 imdbID 获取演职员、预告片或译文，而无需第二份订阅。

## 相关页面

- [OMDb 兼容接口](https://amodb.dev/zh/omdb-endpoint/): 位于 api.amodb.dev/omdb/ 的 OMDb 兼容接口。用 i 或 t 查找，用 s 搜索，读取 Ratings 数组，只需更换基础 URL。
- [IMDb API 替代方案](https://amodb.dev/zh/imdb-api-alternative/): IMDb 没有免费的通用 REST API。付费 JSON API 可按 IMDb ID 查找作品，读取已知的 IMDb 评分，并获取演职员、图片和预告片。
- [TMDB API 替代方案](https://amodb.dev/zh/tmdb-api-alternative/): 在找 TMDB API 替代方案？对比条款、限制、语言和评分，再迁移到保留大多数 TMDB v3 读取路径和 JSON 的付费 API，并了解缺口。
- [认证](https://amodb.dev/zh/authentication/): 如何发送 amodb 密钥：查询中的 api_key、Bearer 请求头，或 OMDb 的 apikey。含密钥格式、保管和 401 错误。
- [定价](https://amodb.dev/zh/pricing/): amodb 套餐的区别只在每分钟请求数：20、40 或 120。所有套餐都包含全部兼容 TMDB v3 和 OMDb 的数据。预付，不续费，无试用。

更新于: 2026-10-18. Source: https://amodb.dev/zh/omdb-api-alternative/
