本页内容
从老版本迁移
v1 与老版本接口(无版本号的 /openapi/…)用同一个 API Key、同一套计费,请求参数也没有变。变的是响应:老版本返回的是多年前定下的老形状,v1 直接返回提取引擎的当前形状。本页逐条列出差异,改完这些你的调用方就能切到 v1。
老版本接口会继续保留、不设下线日期,但不再增加新字段。
变了什么
| 项目 | 老版本接口 | v1 |
|---|---|---|
| 地址前缀 | /openapi | /openapi/v1 |
| 鉴权 | X-API-Key 请求头 | Authorization: Bearer <你的 API Key> 请求头 |
| 帖子文案 | 单个 text | title + text |
| 多清晰度列表 | formats | variants,内部字段同步改名 |
| 音视频分离标志 | separate | 已移除,按 video_url 与 audio_url 是否同时存在判断 |
| 作者信息 | user | 帖子里是 author,主页批量里是 profile |
| 平台 id | 无 | 新增 site |
| 错误响应 | { message, code },code 为 PascalCase | { message, code, retryable },code 为 snake_case |
| 查询额度 | GET /available-credits | GET /credits,响应不变 |
| 限流 | 每秒 20 次 | 每个 Key 每分钟 1200 次(同为每秒 20 次),超出返回 429 |
接口地址
| 老版本接口 | v1 |
|---|---|
POST https://api.meowload.net/openapi/extract/post | POST https://api.meowload.net/openapi/v1/extract/post |
POST https://api.meowload.net/openapi/extract/playlist | POST https://api.meowload.net/openapi/v1/extract/playlist |
POST https://api.meowload.net/openapi/extract/subtitles | POST https://api.meowload.net/openapi/v1/extract/subtitles |
GET https://api.meowload.net/openapi/available-credits | GET https://api.meowload.net/openapi/v1/credits |
请求体与老版本完全相同:body 里传 url(主页批量另有可选的 cursor),可选的 Accept-Language 请求头也一样。鉴权头有变化:老版本用 X-API-Key,v1 用 Authorization: Bearer <你的 API Key>,Key 本身不变。
帖子的 text 拆成 title 和 text
老版本只有一个 text,语义是混的:有标题的平台放标题,没标题的平台放正文。v1 拆成两个字段:
| 字段 | 含义 | 何时存在 |
|---|---|---|
title | 标题 | 有标题的平台(YouTube、B 站、小红书、Reddit 等) |
text | 正文 / 文案 / 简介 | 大多数平台 |
两个都是可选的。想得到与老版本大致相同的展示文案,用 title || text。
这条适用于 /extract/post 的响应,以及 /extract/playlist 响应里 posts[] 的每一条。
媒体字段改名
medias[] 里的多清晰度列表从 formats 改名为 variants,因为它对音频媒体表示的是音轨而不是格式。数组内部的字段同步改名:
| 老版本接口 | v1 | 说明 |
|---|---|---|
formats | variants | 数组本身 |
quality_note | quality_label | 展示用清晰度标注,如 1080p、4K、Original |
video_size | video_filesize | 视频文件大小(字节) |
audio_size | audio_filesize | 音频文件大小(字节) |
default | is_default | 是否为推荐档 / 默认音轨 |
separate | 已移除 | 见下一节 |
quality、fps、video_url、video_ext、video_codec、audio_url、audio_ext、audio_codec、language_tag、language_name 名字不变。quality 为 9999 表示原画(真实分辨率不可知的源文件),对应的 quality_label 固定为 Original。
separate 已移除
老版本用 separate: 1 / 0 标记音视频是否分离。v1 不再下发这个字段,判断规则是:
一个变体同时有 video_url 和 audio_url,就是分离流,需要各自下载后合并;只有其中一个就是单文件,直接下载。
def is_split(variant):
return bool(variant.get("video_url")) and bool(variant.get("audio_url"))新增 site
v1 的三个提取接口响应顶层都多了一个可选的 site:这条链接归属的平台 id,如 youtube、tiktok、instagram。你可以据此分流处理逻辑,不必自己维护域名表。无法归类时整个键省略。
错误响应
老版本的错误体文档只写了 message,实际还带一个 PascalCase 的 code。v1 的错误体是:
{
"message": "该内容已被删除或不存在",
"code": "content_deleted",
"retryable": false
}三处变化:code 改为 snake_case;新增 retryable,告诉你同一链接稍后重试是否可能成功;400 保证带 code。18 个错误码的对照:
| 老版本接口(PascalCase) | v1(snake_case) |
|---|---|
Unknown | unknown |
Timeout | timeout |
InvalidURL | invalid_url |
ExtractFailed | extract_failed |
UnsupportedURL | unsupported_url |
UnsupportedSite | unsupported_site |
PrivateContent | private_content |
LiveStreamNotSupported | live_stream_not_supported |
PlaylistNotSupported | playlist_not_supported |
UserNotFound | user_not_found |
NoStory | no_story |
ContentDeleted | content_deleted |
InvalidPlaylistURL | invalid_playlist_url |
MembersOnlyContent | members_only_content |
NotPremiered | not_premiered |
AgeRestricted | age_restricted |
RegionRestricted | region_restricted |
Retryable | retryable |
另有一处状态码统一:老版本里链接格式不合法时,单帖接口返回 422、主页批量与字幕接口返回 400;v1 一律 400 + code: "invalid_url"。422 在 v1 只用于请求体本身不合法(如缺 url)。每个错误码的含义与处理建议见 错误码。
查询额度接口改名
GET /openapi/available-credits 改为 GET /openapi/v1/credits,响应体完全不变:
{ "availableCredits": 282539 }迁移清单
- 地址前缀改为
/openapi/v1,available-credits改为credits - 鉴权头换成
Authorization: Bearer <你的 API Key> - 帖子文案改读
title/text formats改variants,内部quality_note/video_size/audio_size/default换成新名- 删掉对
separate的读取,改为判断video_url与audio_url是否同时存在 - 错误处理改按 snake_case 的
code分支,retryable为true时允许延迟重试 - 为
429加退避逻辑 - 用 API 参考 的在线调试对照一次真实响应
改好后的各语言示例见 Python、JavaScript、PHP、Golang。
查看老版本文档
老版本接口的文档在 GitHub 仓库 MeowLoad/Media-Downloader-API: