哼哼猫文档
本页内容

从老版本迁移

v1 与老版本接口(无版本号的 /openapi/…)用同一个 API Key、同一套计费,请求参数也没有变。变的是响应:老版本返回的是多年前定下的老形状,v1 直接返回提取引擎的当前形状。本页逐条列出差异,改完这些你的调用方就能切到 v1。

老版本接口会继续保留、不设下线日期,但不再增加新字段。

变了什么

项目老版本接口v1
地址前缀/openapi/openapi/v1
鉴权X-API-Key 请求头Authorization: Bearer <你的 API Key> 请求头
帖子文案单个 texttitle + text
多清晰度列表formatsvariants,内部字段同步改名
音视频分离标志separate已移除,按 video_urlaudio_url 是否同时存在判断
作者信息user帖子里是 author,主页批量里是 profile
平台 id新增 site
错误响应{ message, code }code 为 PascalCase{ message, code, retryable }code 为 snake_case
查询额度GET /available-creditsGET /credits,响应不变
限流每秒 20 次每个 Key 每分钟 1200 次(同为每秒 20 次),超出返回 429

接口地址

老版本接口v1
POST https://api.meowload.net/openapi/extract/postPOST https://api.meowload.net/openapi/v1/extract/post
POST https://api.meowload.net/openapi/extract/playlistPOST https://api.meowload.net/openapi/v1/extract/playlist
POST https://api.meowload.net/openapi/extract/subtitlesPOST https://api.meowload.net/openapi/v1/extract/subtitles
GET https://api.meowload.net/openapi/available-creditsGET 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说明
formatsvariants数组本身
quality_notequality_label展示用清晰度标注,如 1080p4KOriginal
video_sizevideo_filesize视频文件大小(字节)
audio_sizeaudio_filesize音频文件大小(字节)
defaultis_default是否为推荐档 / 默认音轨
separate已移除见下一节

qualityfpsvideo_urlvideo_extvideo_codecaudio_urlaudio_extaudio_codeclanguage_taglanguage_name 名字不变。quality9999 表示原画(真实分辨率不可知的源文件),对应的 quality_label 固定为 Original

separate 已移除

老版本用 separate: 1 / 0 标记音视频是否分离。v1 不再下发这个字段,判断规则是:

一个变体同时有 video_urlaudio_url,就是分离流,需要各自下载后合并;只有其中一个就是单文件,直接下载。

def is_split(variant):
    return bool(variant.get("video_url")) and bool(variant.get("audio_url"))

新增 site

v1 的三个提取接口响应顶层都多了一个可选的 site:这条链接归属的平台 id,如 youtubetiktokinstagram。你可以据此分流处理逻辑,不必自己维护域名表。无法归类时整个键省略。

错误响应

老版本的错误体文档只写了 message,实际还带一个 PascalCase 的 code。v1 的错误体是:

{
  "message": "该内容已被删除或不存在",
  "code": "content_deleted",
  "retryable": false
}

三处变化:code 改为 snake_case;新增 retryable,告诉你同一链接稍后重试是否可能成功;400 保证带 code。18 个错误码的对照:

老版本接口(PascalCase)v1(snake_case)
Unknownunknown
Timeouttimeout
InvalidURLinvalid_url
ExtractFailedextract_failed
UnsupportedURLunsupported_url
UnsupportedSiteunsupported_site
PrivateContentprivate_content
LiveStreamNotSupportedlive_stream_not_supported
PlaylistNotSupportedplaylist_not_supported
UserNotFounduser_not_found
NoStoryno_story
ContentDeletedcontent_deleted
InvalidPlaylistURLinvalid_playlist_url
MembersOnlyContentmembers_only_content
NotPremierednot_premiered
AgeRestrictedage_restricted
RegionRestrictedregion_restricted
Retryableretryable

另有一处状态码统一:老版本里链接格式不合法时,单帖接口返回 422、主页批量与字幕接口返回 400;v1 一律 400 + code: "invalid_url"422 在 v1 只用于请求体本身不合法(如缺 url)。每个错误码的含义与处理建议见 错误码

查询额度接口改名

GET /openapi/available-credits 改为 GET /openapi/v1/credits,响应体完全不变:

{ "availableCredits": 282539 }

迁移清单

  1. 地址前缀改为 /openapi/v1available-credits 改为 credits
  2. 鉴权头换成 Authorization: Bearer <你的 API Key>
  3. 帖子文案改读 title / text
  4. formatsvariants,内部 quality_note / video_size / audio_size / default 换成新名
  5. 删掉对 separate 的读取,改为判断 video_urlaudio_url 是否同时存在
  6. 错误处理改按 snake_case 的 code 分支,retryabletrue 时允许延迟重试
  7. 429 加退避逻辑
  8. API 参考 的在线调试对照一次真实响应

改好后的各语言示例见 PythonJavaScriptPHPGolang

查看老版本文档

老版本接口的文档在 GitHub 仓库 MeowLoad/Media-Downloader-API