# MoviePilot 站点 API 接入需求 适用对象:PT 站点开发者及接口维护者 适用范围:通过站点官方 API 接入 MoviePilot(以下简称 MP) 版本:1.0 日期:2026 年 11 月 4 日 本文说明站点需要提供哪些接口,才能支持 MP 的资源搜索、自动订阅、种子下载和用户数据展示。建议先打通“用户授权 → 搜索资源 → 获取种子文件”这一最小闭环,再补齐最新资源列表和用户数据。 **本文中的 URL、字段名、权限名称和 JSON 结构均为建议示例,不是 MP 已发布的统一站点 API 标准。** 站点可以沿用自己的接口,只要提供等价能力和完整文档,MP 侧再编写适配。已有接口满足需求时,无须专门复制一套接口。 ## 1 接入能力与优先级 | 能力 | 优先级 | 用途 | 可以如何提供 | | --- | --- | --- | --- | | 适合后台长期使用的用户授权 | 基础必需 | MP 代表用户访问本人有权限的数据 | 个人 API Key、长期 Token,或可自动续期的授权机制 | | 资源搜索和分页 | 搜索必需 | 手动搜索、订阅补搜 | 关键词搜索接口 | | 获取种子文件 | 下载必需 | 将选中资源交给下载器 | 直接返回 `.torrent`,或先生成下载链接 | | 最新资源列表和分页 | 完整自动订阅所需 | 周期获取新发布资源 | 独立列表接口,或搜索接口支持空关键词与发布时间排序;也可提供可用 RSS | | 当前用户信息和统计 | 用户数据展示所需 | 展示账号等级、上传下载量、做种等 | 一个汇总接口,或拆分为多个接口 | | 种子详情 | 按需必需 | 补齐搜索结果缺少的字段 | 搜索已返回全部所需字段时可省略 | | 分类字典 | 推荐 | 将站点分类映射到电影、电视剧等 | 字典接口,或稳定的分类文档 | | 未读消息、签到、收藏等 | 可选 | 扩展功能 | 按站点实际支持情况提供 | 最小接入不要求提供签到、消息、收藏、发种、账户管理等功能。用户统计不影响基础搜索和下载;缺少这些接口时,相关展示能力无法完整提供。 ## 2 认证与授权 ### 2.1 推荐采用个人 API Key 或 Token 建议用户在站点个人中心完成一次人工登录后,自行生成专门用于 MP 的访问凭据,并填入自己的 MP 实例。API 可以采用以下任一种鉴权方式: ```http Authorization: Bearer ``` 或: ```http X-API-Key: ``` 凭据应绑定具体用户,继承该用户的访问权限和下载限制。建议支持命名、查看使用时间、单独撤销和重新生成。用户主动撤销、账号被禁用或权限被取消后,接口应及时拒绝访问。 这里的“长期使用”不要求 Token 永不过期;关键是 MP 能在无人值守时持续工作。如果采用短期 Access Token,需要提供明确的刷新机制,并说明 Refresh Token 的有效期、轮换规则、并发刷新行为和失效后的重新授权方式。 ### 2.2 建议权限范围 | 示例权限 | 允许的操作 | 需要该权限的能力 | | --- | --- | --- | | `torrent:read` | 搜索、列表、读取种子详情 | 搜索和订阅 | | `torrent:download` | 获取种子文件或生成下载链接 | 下载 | | `user:read` | 读取本人账号信息和统计 | 用户数据展示 | | `message:read` | 读取本人未读消息 | 可选 | | `checkin:write` | 执行本人签到 | 可选 | 权限名称可以不同,也可以沿用站点既有权限模型。基础接入只需要资源读取和种子下载权限,不需要管理员权限。 ### 2.3 请明确自动化访问条件 请说明以下事项: - API 凭据从哪里生成,哪些用户等级可以生成,是否需要额外开通权限。 - 凭据是否过期,如何刷新或撤销,错误码分别是什么。 - 是否绑定 IP、User-Agent 或设备;如果绑定,如何支持 NAS、Docker、代理和公网 IP 变化。 - API 是否存在验证码、浏览器 JavaScript 挑战或必须交互的二次验证。建议用户授权时完成交互验证,正常 API 调用采用可独立校验的机器凭据。 - 下载接口是否沿用同一 API 凭据,还是需要单独的下载凭据。 **能在网页中正常登录,或前端存在某个 Token 页面,并不能单独证明第三方客户端可以长期使用。需要确认实际账号可获得凭据,以及凭据可以访问哪些接口。** 如采用 HMAC 或其他签名鉴权,请提供完整签名文档和不含真实密钥的测试向量,包括签名字符串组成、路径及查询参数规范化、请求体摘要、时间戳单位、允许时钟偏差、Nonce 规则、编码方式、签名算法及密钥获取方式。MP 应能依照公开协议计算签名,不应依赖复制网页内部临时状态。 ## 3 资源搜索接口 ### 3.1 建议请求 ```http GET /api/v1/torrents?keyword=Example&page=1&page_size=50&sort=published_at&order=desc Authorization: Bearer Accept: application/json ``` 也可以采用 `POST` 并传 JSON。HTTP 方法和路径可以不同,请保持参数含义明确。 | 参数 | 要求 | 说明 | | --- | --- | --- | | `keyword` | 必需能力 | 支持中文和英文标题;说明多关键词按 AND、OR 还是整句匹配,以及搜索标题、副标题的范围 | | `page` / `cursor` | 必需能力 | 页码或游标均可;明确页码从 0 还是 1 开始 | | `page_size` / `limit` | 必需能力 | 明确默认值、最大值及实际返回数量 | | `category` | 推荐 | 支持分类筛选;说明是否允许多个分类 | | `sort`、`order` | 推荐 | 至少说明默认排序;最新列表需要可靠的发布时间降序 | | `imdb_id`、`tmdb_id` 等 | 可选 | 按媒体 ID 精确搜索;说明电影与剧集 ID 的区分 | | `free_only` 等促销筛选 | 可选 | 返回当前用户实际可用的促销资源 | 至少提供一种可靠的分页结束标识,例如 `has_more`、`next_cursor` 或 `total`。如果接口存在最多可翻页数、最多返回条数或历史搜索窗口,也请明确说明。 ### 3.2 种子记录字段 以下“必需”是指完成稳定搜索与下载所需的信息,字段可以由搜索或必要的详情请求提供。为降低请求量,建议搜索和列表直接返回常用字段。 | 建议字段 | 要求 | 类型与含义 | | --- | --- | --- | | `id` | 必需 | 站点内稳定、唯一的种子 ID,建议字符串;用于去重、详情及下载 | | `title` | 必需 | 原始发布标题,保留年份、季集、分辨率、来源、编码、发布组等信息 | | `size` | 必需 | 内容总大小,以字节为单位的整数,不是 `.torrent` 文件大小 | | `download_url` 或按 ID 下载规则 | 必需 | 二者至少提供一种;短时链接的生成方式见第 5 节 | | `subtitle` / `description` | 推荐 | 副标题、中文名或补充说明;尽量提供纯文本 | | `details_url` | 推荐 | 用户在浏览器中打开的种子详情页地址;也可以提供可拼接规则 | | `published_at` | 推荐;最新列表需要 | 原始发布时间,明确时区;不要用置顶时间替代 | | `seeders` | 强烈推荐 | 当前做种人数,非负整数,用于判断资源可用性 | | `leechers` | 推荐 | 当前下载人数,非负整数 | | `completed` / `grabs` | 推荐 | 累计完成次数,说明统计口径 | | `category` | 推荐 | 稳定分类 ID 或名称,并提供分类映射 | | `download_factor` | 有促销时需要 | 下载计费倍率,例如免费为 `0`,半价为 `0.5`,正常为 `1` | | `upload_factor` | 有促销时需要 | 上传计费倍率,例如正常为 `1`,双倍上传为 `2` | | `promotion_end_at` | 限时促销时推荐 | 当前有效促销的截止时间,长期有效或未知时按文档约定处理 | | `hit_and_run` | 有 H&R 规则时推荐 | 是否受下载后保种规则约束;最好同时说明规则 | | `labels` | 推荐 | 如中字、国语、官种、DIY、HDR、杜比视界等标签 | | `imdb_id`、`tmdb_id`、`douban_id` | 可选但有帮助 | 辅助媒体识别;保留来源及完整 ID,不同来源不能混用 | | `info_hash` | 可选 | 用于种子身份校验或去重;说明 v1/v2 类型 | 请注意以下语义: - 标题需要保留发布信息。例如 `Example.Movie.2026.2160p.WEB-DL...` 比仅返回中文片名更有利于 MP 识别和筛选。 - 免费是“下载流量不计费”,与双倍上传分别表达。只返回 `FREE`、`2X` 等字符串也可以,但必须提供完整枚举映射。 - 促销数据最好由服务端合并全站活动、种子活动和用户权益后,返回对当前用户实际生效的倍率;否则请提供明确的优先级和计算规则。 - 如果促销规则未知,应允许表达未知,不能把缺失值当成免费。长期有效与截止时间未知也应可区分。 - 是否有权限下载、是否触发 H&R、是否免费是不同概念,不要复用同一个字段。 - 媒体 ID 要注明来源。对于 TMDB,还需说明是电影还是电视剧;单个种子包含多部作品时,不应随意指定其中一部代表全部内容。 ### 3.3 建议响应示例 ```json { "code": "OK", "data": { "items": [ { "id": "123456", "title": "Example.Movie.2026.2160p.WEB-DL.H265-GROUP", "subtitle": "示例电影 / 国语 / 中英字幕", "details_url": "https://tracker.example/torrents/123456", "size": 21474836480, "published_at": "2026-11-04T08:00:00+08:00", "seeders": 50, "leechers": 3, "completed": 120, "category": "movie", "download_factor": 0, "upload_factor": 2, "promotion_end_at": "2026-11-05T08:00:00+08:00", "hit_and_run": false, "labels": ["国语", "中字"] } ], "page": 1, "page_size": 50, "has_more": false } } ``` 该示例采用“按种子 ID 调用下载接口”的方式,因此没有在搜索结果中返回下载链接。`code` 的类型和成功值可沿用站点规范;请提供全部业务错误码。 ## 4 最新资源列表与自动订阅 为了支持 MP 周期性发现新发布资源,需要提供一种可靠的最新资源获取方式。 优先复用搜索接口:允许不传关键词,并按发布时间降序返回资源。 ```http GET /api/v1/torrents?page=1&page_size=50&sort=published_at&order=desc ``` 也可以提供独立接口: ```http GET /api/v1/torrents/latest?page=1&page_size=50 ``` 要求如下: - 返回字段尽量与搜索结果一致,避免为每个新资源额外请求详情。 - 说明置顶、推荐、重复发布、编辑和删除资源的处理方式。 - 排序应稳定。相同发布时间可用种子 ID 作为第二排序键;更推荐使用稳定游标。 - 说明列表能回溯多长时间、最大条数,以及高发布量时如何翻页,避免轮询期间漏过新资源。 - 如支持 `since`、`after_id` 或增量游标,请说明边界是否包含、游标有效期,以及它表示发布时间还是更新时间。 RSS 可以作为替代入口,但需要实际可用的用户授权方式、稳定资源标识和可下载的 enclosure,并说明条数与更新时间。JSON 列表接口和 RSS 的具体使用方式,需要 MP 侧适配,不是新增接口后就自动启用。 如果暂时只能提供关键词搜索,仍可先支持手动搜索及部分订阅补搜;但不能据此认为最新资源轮询能力已经完整。 ## 5 种子下载接口 以下两种方式任选一种即可。**搜索返回一个种子 ID,并提供可按 ID 获取文件的接口,就能满足下载闭环,不要求搜索结果必须带永久下载 URL。** ### 5.1 方式一 直接返回种子文件 ```http GET /api/v1/torrents/123456/download Authorization: Bearer ``` 成功响应示例: ```http HTTP/1.1 200 OK Content-Type: application/x-bittorrent Content-Disposition: attachment; filename="123456.torrent" ``` 要求返回真实、完整、可解析的 `.torrent` 文件。私有站点的种子应包含适用于当前用户的 Tracker 认证信息,能被其下载器正常使用。 ### 5.2 方式二 先获取短时下载地址 ```http POST /api/v1/torrents/123456/download-link Authorization: Bearer Accept: application/json ``` ```json { "code": "OK", "data": { "url": "https://download.example/torrent/123456?ticket=EXAMPLE_ONLY", "expires_at": "2026-11-04T08:05:00+08:00" } } ``` 随后由 MP 访问该 URL,取得实际种子文件。链接可以是签名 URL,不要求永久有效;建议在用户真正执行下载时才生成。 请明确: - 换取链接使用 GET 还是 POST,参数放在何处,JSON 中哪个字段是实际地址。 - 链接有效期、是否单次有效,以及超时或网络失败后是否允许重试。 - 下载地址是否仍需 Header、Cookie、Referer 或特殊 User-Agent;建议签名 URL 本身即可完成授权。 - 是否有 IP 绑定,以及生成链接和下载文件是否必须来自同一出口 IP。 - 是否重定向到其他域名,目标域名和鉴权规则是什么。 - 重复获取文件是否消耗配额、重复登记下载,或产生其他业务副作用。 - 用户无下载权限、等级不足、账号受限、种子被删除、票据过期等场景分别返回什么错误。 **不要在下载失败时返回 HTTP 200 的登录页、验证码页或错误 HTML。** 如果采用 JSON 错误响应,应以内容类型和状态码清晰区分种子文件与错误信息。 仅提供网页详情地址不能完成下载闭环。仅提供不含用户 Tracker 认证信息的磁力链接,对私有站点通常也不足以替代可用的个性化种子文件。 ## 6 当前用户信息与统计 如希望在 MP 中展示完整站点账号数据,建议提供一个当前用户汇总接口: ```http GET /api/v1/me Authorization: Bearer ``` | 建议字段 | 用途及口径 | | --- | --- | | `id`、`username` | 用户唯一标识、显示名称 | | `level` | 用户等级名称,或提供等级 ID 到名称的映射 | | `joined_at` | 注册时间,注明时区 | | `uploaded` | 累计计费上传量,单位字节 | | `downloaded` | 累计计费下载量,单位字节 | | `ratio` | 分享率;下载量为 0 时需约定 `null` 等表达方式,不使用非法 JSON 数值 `Infinity` | | `bonus` | 魔力、积分等数值;多种积分需区分名称和单位 | | `seeding_count` | 当前做种数量 | | `seeding_size` | 当前做种内容总体积,单位字节 | | `leeching_count` | 当前下载数量 | | `unread_message_count` | 未读消息数量,可选 | | `updated_at` | 数据生成或最近更新时间,便于判断统计延迟 | 上传量、下载量请注明是原始流量还是计费流量,建议两者都有时分别返回。做种体积请说明同一种子在多个客户端做种时如何计数。 如果站点不能直接汇总做种体积,可以提供当前用户的做种列表,包含种子大小并支持分页,由 MP 适配后汇总;这会增加请求量,因此优先推荐直接返回汇总值。 这些信息可以拆成 `/me`、`/me/stats` 等多个接口。不需要允许 MP 查询任意用户的私人数据,也不要求开放用户管理接口。 ## 7 分类字典与种子详情 ### 7.1 分类字典 建议提供: ```http GET /api/v1/categories ``` 每个分类至少包含稳定 ID、名称及大类归属,例如电影、电视剧、动漫、纪录片、音乐、综艺等。如果分类稳定且很少变动,提供完整的静态映射文档也可以,不强制增加接口。 ### 7.2 种子详情 ```http GET /api/v1/torrents/123456 ``` 详情接口用于补齐搜索或列表缺少的信息,例如副标题、促销、H&R、媒体 ID 或下载信息。搜索结果已经完整时,无须强制为每个资源调用详情。 如果搜索结果属于“资源合集”,而不是具体种子,请提供从合集展开到具体种子列表的方式。每个可下载种子需要独立 ID、标题、大小和下载能力。 ## 8 可选扩展接口 以下能力可以后续增加,不应阻塞基础接入: - **站内消息**:未读数量、列表和详情;消息提供稳定 ID,方便去重。标记已读属于独立写操作,不能因读取消息而隐式触发,除非文档明确且双方认可。 - **签到**:提供签到接口,明确已签到的返回值、每日时区及重复请求行为。 - **收藏或订阅书签**:查询、添加和删除收藏;需要用户授予独立写权限。 - **用户做种和下载列表**:用于更丰富的数据展示,提供分页和统计口径。 - **字幕**:字幕列表、语言、格式和下载接口。 - **站点公告或活动信息**:便于展示公告、全站促销和维护状态。 - **能力查询**:返回 API 版本、支持功能及限制,方便客户端识别差异。 提供可选 API 并不意味着 MP 会自动获得对应功能;需要另行确认现有模块或插件的适配范围。 ## 9 通用协议与运行约定 ### 9.1 数据格式 - API 使用 HTTPS,JSON 文本使用 UTF-8。 - 大小和流量统一使用字节,人数和次数使用非负整数;积分及倍率允许小数。 - 时间推荐采用带时区的 ISO 8601;使用 Unix 时间戳时明确秒或毫秒。 - ID 建议采用字符串,避免超大整数在不同语言中丢失精度。 - 明确缺失字段、`null`、`0` 和空字符串的含义;未知数据不要伪装成确定的零值。 - 保持响应结构和枚举稳定;新增字段应尽量向后兼容,破坏性变更应提前通知并保留过渡期。 ### 9.2 错误响应 建议同时使用正确的 HTTP 状态码和可供程序判断的业务错误码。例如: ```json { "code": "TOKEN_EXPIRED", "message": "API token has expired", "request_id": "example-request-id" } ``` | HTTP 状态 | 建议含义 | | --- | --- | | `400` | 参数无效 | | `401` | 未认证、凭据无效或过期 | | `403` | 已认证但无相应权限,或账号受限 | | `404` | 资源不存在或已删除 | | `429` | 请求过于频繁,建议返回 `Retry-After` | | `5xx` | 服务端异常或维护 | 如果站点已有不同状态码或统一业务码规范,可以沿用,但需要提供准确对照。搜索没有结果应成功返回空数组,不能与认证失败、限流或接口故障混为一谈。 ### 9.3 请求频率和网络环境 请提供每个用户、Token、IP 的限流维度,统计窗口、允许请求数、并发数和下载频率限制。搜索、最新列表、用户统计和下载接口如果限制不同,请分别列出,并给出建议轮询周期。 MP 为用户自行部署的应用,请求通常由 NAS、Docker 或服务器发起。建议对正式机器 API 采用 Token 鉴权和明确限流策略,避免正常调用被交互式浏览器挑战拦截。IP 限制、地域限制和代理限制应提前说明。 基础接入为 MP 后端调用站点接口,通常不需要站点为 MP 前端单独开放 CORS,也不需要站点回调或主动连接用户的 MP 实例。 ### 9.4 凭据与用户数据 API Token、下载票据和带 passkey 的 URL 都是敏感信息。文档和联调日志使用占位符或脱敏值;真实凭据不应写入公开 Issue、示例代码或公共仓库。接口按当前用户权限返回资源和个性化种子即可,无须共享管理员凭据或用户密码。 ## 10 请站点提供的联调资料 1. **接口文档**:Base URL、HTTP 方法、参数、请求 Header、字段类型、单位、成功及错误示例;OpenAPI 文档更方便,但不是硬性要求。 2. **授权说明**:凭据生成入口、可用账号等级、权限范围、有效期、刷新及撤销方法,以及普通用户能否实际生成凭据。 3. **搜索说明**:关键词匹配规则、分类字典、排序、分页、最大返回条数及历史数据范围。 4. **最新资源说明**:空关键词是否可用、列表排序、增量或 RSS 能力、建议轮询间隔。 5. **下载说明**:直接文件还是临时 URL、所需鉴权、有效期、IP 绑定、重定向和重试约定。 6. **业务枚举**:分类、促销倍率、用户等级、H&R、账号状态和下载权限的解释。 7. **脱敏样例**:至少覆盖普通种子、免费种子、双倍上传、限时促销、H&R、无权限和空搜索结果。 8. **测试安排**:由双方约定私密授权渠道或测试环境,不在公开文档中附带真实 Token、Cookie、密码或 passkey。 9. **运行限制**:限流、并发、维护响应、版本变更通知方式和技术联系人。 ## 11 分阶段联调与验收 ### 第一阶段 搜索和下载 - 用户能够生成、配置并撤销 API 凭据。 - MP 能完成中文、英文关键词搜索,并正确翻页和识别无结果。 - 标题、大小、人数和分类映射正确;有促销时,免费和倍率判断正确。 - MP 能按种子 ID 获取文件,或现场换取短时下载链接并取得文件。 - 下载器能够接受该种子并正常连接 Tracker,用户身份和权限正确。 - 凭据失效、权限不足、资源删除和限流时,MP 能收到可区分的错误。 ### 第二阶段 自动订阅和用户数据 - 最新资源能按约定排序、分页或增量获取;覆盖高发布量和相同发布时间场景。 - 轮询和分页过程中能识别重复资源,并验证是否存在遗漏。 - 普通、免费、双倍上传、促销到期和 H&R 样例与站点页面一致。 - 用户等级、上传下载量、魔力、做种数和做种体积与站点统计口径一致。 - Token 生命周期、正常重试和限流退避能在无人值守条件下工作。 ### 第三阶段 可选功能 按双方约定验收消息、签到、收藏、字幕等能力。 接口可以访问或返回 HTTP 200,仅代表连通性;实际接入完成还需要验证数据解析、用户权限、个性化种子下载和下载器使用结果。 ## 12 MP 侧适配与责任分工 站点负责提供稳定、正式支持第三方客户端的 API、鉴权方式和协议文档。MP 侧负责将站点接口转换为内部搜索结果、下载请求和用户数据,并完成站点配置、索引及必要的专用适配。 MP 已有 API Key 搜索及临时下载地址的实现案例,但不会自动识别任意新站点的 JSON 格式。一般需要检查主后端的站点适配,以及站点资源生成和发布链路。适配工作量取决于接口结构、认证方式及字段完整程度。 建议对方先确认以下五项:**能否签发适合无人值守使用的用户凭据,能否分页搜索,能否按 ID 下载种子,能否获取最新资源,能否读取本人统计。** 前三项形成最小闭环,后两项完善自动订阅和站点数据展示。 ## 附录 MP 当前实现参考 以下链接用于理解 MP 已有数据模型和适配方式,站点无须照搬内部字段或下载请求编码。 - [搜索结果模型 TorrentInfo](https://github.com/jxxghp/MoviePilot/blob/52203041f7be117ddb3ec0ce8fcb7862ade26bda/app/domain/context.py):标题、大小、发布时间、人数、计费倍率、媒体身份等。 - [站点配置与用户数据模型](https://github.com/jxxghp/MoviePilot/blob/52203041f7be117ddb3ec0ce8fcb7862ade26bda/app/schemas/site.py):API Key、Token、站点请求限流及用户统计字段。 - [Rousi API 适配示例](https://github.com/jxxghp/MoviePilot/blob/52203041f7be117ddb3ec0ce8fcb7862ade26bda/app/modules/indexer/spider/rousi.py):个人 API Key 搜索、分页,以及在下载时请求接口取得短时链接。 - [MTorrent 适配示例](https://github.com/jxxghp/MoviePilot/blob/52203041f7be117ddb3ec0ce8fcb7862ade26bda/app/modules/indexer/spider/mtorrent.py):搜索结果转换与下载凭据生成。 实现参考核对日期为 2026 年 11 月 4 日。本文的接口路径、字段设计和验收建议是供双方协商的接入需求,不代表每个现有站点都已实现全部能力。 ### 猪猪实验室适配 猪猪改版后的正式接入使用[实验室 API](https://piggo.me/lab-api),基础地址为 `https://api.piggo.me/v1/api`。 需同时更新包含 `Piggo` 适配器的后端和 `3.0.30` 或更高的站点索引资源。 用户在网页「实验室」生成**长期存取令牌**并填入站点 API Key;API Key 为空时兼容 Token,Cookie 不参与 API 鉴权。 搜索、最新种子、目录和用户资料均使用 POST JSON;完整 IMDb ID 通过 `imdb_id` 精确搜索,其他关键词通过 `q` 搜索。 - 目录按 API 地址和凭据摘要隔离缓存一小时,最多 128 份。按当前分区/分类名称和作品类型映射媒体类型,未知分区保持未知。 - 分类 ID 可以在多个分区复用,按种子的实际分区解释分类成员关系,不把一个 ID 固定归属到单一分区。 - 上游新增的 `tag_ids` 按 `/catalog` 的 `tags` 映射为真实站点标签;有标签的分区按 `section_id` 查询各自字典,未配置分区标签时由站点返回全站字典。标签字典与分类目录共用凭据隔离的一小时有界缓存,未知 ID 不从标题、分类或 `taxonomy_ids` 猜造名称。 - 可见分区均能明确判型时,一个媒体类型涉及多个分区用完整分类并集保持全局分页;有未能判型的分区或所需分类不完整时不强行缩窄查询,避免漏掉纪录片、动漫、少儿等分区的资源。 - 用户资料从 `data.user` 读取,上传/下载容量文本转换为字节并计算分享率;下载量为零时分享率为零,注册时间未知。做种和下载的所有分页成功后才保存统计。 - 搜索、用户资料、连接检测、换票和种子请求共用站点配置的请求间隔与次数窗口,不按域名强制改写配置。按实验室最严格的每分钟 20 次接口限制,建议在站点设置中配置至少三秒访问间隔;远端限流仍使用既有共享冷却机制。 - 仅在执行下载时签发短时 URL;最终 GET 不携带 Bearer 或 Cookie,也不把站点返回的下载主机改为 API 主机。 - 必读公告必须由用户在网页端阅读,不自动确认公告或回退访问旧 PHP 页面。实验室未提供的促销、字幕、站内信接口不作推断。 ### 高清视界 REST API 适配 高清视界使用[官方 API 文档](https://hdarea.club/api_docs.php)中的 `https://hdarea.club/api/v1`。 需同时更新包含 `HDArea` 适配器的后端及 `3.0.32` 或更高的站点索引资源。 在网页「控制面板 → 安全设定 → API Key 存取令牌管理」获取 API Key,填入 MoviePilot 站点 **API Key**。 读取和搜索需 `read` 权限,下载需 `download` 权限,自动签到需额外的 `user` 权限;有 IP 白名单时须允许实例出口 IP。 - 连接检测和用户统计使用 `GET /user/profile`,不使用 Cookie、网页会话或浏览器仿真。 用户等级取 `class_name`,流量取字节字段 `uploaded` / `downloaded`,分享率取 `share_ratio`,魔力取 `seedbonus`, 做种汇总取 `seeding_count` / `seeding_size`,未读数量取 `unread_messages_count`;不自动读取或标记私人消息。 - 搜索和最新列表使用 `GET /torrents`,页码从 0 开始,每页 100 条,按 `added` 降序排列。 普通关键词使用 `keyword`,完整 IMDb ID 使用 `imdb`;分类以 `cat` 多选,显式分类优先于媒体类型。 末页依据 `pagination.has_more`,不把列表的估算 `total` 当成完整总数。 - 直接读取服务端当前有效的 `download_volume_factor` / `upload_volume_factor` 和 `promotion_until`, 不用旧促销枚举覆盖实时倍率。缺失倍率保持未知;纪录片、动漫等共享分类保持未知,由后续媒体识别确定作品类型。 - 搜索结果只保留下载配方,真正下载时才 `POST /torrents/genDlToken` 签发短效 URL。 换票携带 API Key 和 JSON 种子 ID,最终种子 GET 不携带 API Key 或 Cookie。 接口失败、权限不足、非 JSON 和 HTTP 429 不视为成功,限流沿用同站点共享冷却。 - V3「站点自动签到」插件从 `3.0.8` 起使用 `POST /user/signin`;只配置 Cookie 的旧签到方式继续可用。 未配置 API Key 的搜索和用户统计不自动回退到 Cookie。 - 既有字幕页面规则未删除,本次未接入字幕 REST API,字幕搜索仍使用 Cookie。 批量辅种接口接收的是 `info_hash`,不能将青蛙辅种插件的 `pieces_hash` 当成同一种指纹。 离线回归只使用合成凭据并替换网络边界;实际 API 验收结果需另外记录,HTTP 200 本身不能证明种子文件有效。