哼哼猫文档
本页内容

快速开始

本文档是当前版本(v1)接口。仍在使用老版本(无版本号 /openapi/…)接口的开发者,文档见 GitHub Media-Downloader-API,迁移指南见 从老版本迁移

v1 是当前的开发者接口版本。接口地址统一以 https://api.meowload.net/openapi/v1 开头,鉴权只需要在 Authorization 请求头里带上 Bearer <你的 API Key>。完整的端点、参数与响应结构见 API 参考,本页只带你把第一个请求调通。

获取 API Key

前往 开发者管理中心 获取你的 API Key。它是一个不透明字符串,请当作密码保管,不要写进前端代码或公开仓库。

下文所有示例里的 <你的 API Key> 都是占位符,需要替换成你自己的 Key。

第一个请求

以单个帖子提取为例:

curl -X POST https://api.meowload.net/openapi/v1/extract/post \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <你的 API Key>" \
  -H "Accept-Language: zh" \
  -d '{"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"}'

三个请求头的作用:

请求头必填说明
Content-Type固定 application/json
AuthorizationBearer <你的 API Key>Bearer 与 Key 之间有一个空格
Accept-Language错误消息语言,默认 en,支持 zhenjaesde

读响应

成功时 HTTP 状态码为 200,响应体直接就是提取结果:

{
  "site": "youtube",
  "id": "dQw4w9WgXcQ",
  "title": "Rick Astley - Never Gonna Give You Up (Official Video)",
  "text": "The official video for “Never Gonna Give You Up” by Rick Astley.",
  "medias": [
    {
      "media_type": "video",
      "resource_url": "https://rr3---sn-example.googlevideo.com/videoplayback?expire=1757300000&id=o-AbC",
      "preview_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg",
      "duration": 213,
      "variants": [
        {
          "quality": 1080,
          "quality_label": "1080p",
          "video_url": "https://rr3---sn-example.googlevideo.com/videoplayback?itag=137&expire=1757300000",
          "video_ext": "mp4",
          "video_filesize": 58203122,
          "audio_url": "https://rr3---sn-example.googlevideo.com/videoplayback?itag=140&expire=1757300000",
          "audio_ext": "m4a",
          "audio_filesize": 3451212,
          "is_default": true
        },
        {
          "quality": 720,
          "quality_label": "720p",
          "video_url": "https://rr3---sn-example.googlevideo.com/videoplayback?itag=22&expire=1757300000",
          "video_ext": "mp4",
          "video_filesize": 31776500
        }
      ]
    }
  ],
  "author": {
    "username": "RickAstleyVEVO",
    "display_name": "Rick Astley",
    "avatar_url": "https://yt3.ggpht.com/example=s176-c-k-c0x00ffffff-no-rj"
  },
  "stats": {
    "view_count": 1600000000,
    "like_count": 18000000
  },
  "created_at": "2009-10-25T06:57:33Z",
  "post_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
}

读它时记住几件事:

  • titletext 都是可选的。 有标题的平台(YouTube、B 站、小红书、Reddit 等)两个都可能有;没有标题的平台(推特、Instagram、抖音、TikTok 等)只有 text。取展示用文案可以写 title || text
  • 没有值的字段整个省略,不会给 null 或空串。 读任何非必填字段都要做缺省处理。
  • medias[].variants[] 是同一媒体的多个清晰度或音轨。 quality 是高度像素(9999 表示原画),quality_label 是展示用标注;多档时 is_defaulttrue 的那档是推荐档。一个变体同时有 video_urlaudio_url 就表示音视频分离,需要各自下载后合并。
  • 媒体直链是短效的,请拿到后尽快下载,不要长期保存或直接嵌进页面
  • headers 的媒体下载时要原样带上这些请求头,否则会被平台拒绝
  • site 是这条链接所属的平台 id(如 youtubetiktok),无法归类时省略

主页批量提取(/extract/playlist)与字幕提取(/extract/subtitles)的响应结构见 API 参考

处理失败

任何非 200 的响应体都是同一种形状:

{
  "message": "该内容已被删除或不存在",
  "code": "content_deleted",
  "retryable": false
}
  • message 是给人看的说明,语言由 Accept-Language 决定,不要拿它做逻辑判断
  • code 是机器可读的错误码,400 一定带,429 固定为 too_many_requests
  • retryable 表示同一个链接稍后重试是否可能成功

按状态码分支:

状态码含义怎么处理
400提取失败coderetryabletrue 可延迟重试,false 是确定性失败,换链接
401API Key 无效检查 Authorization 请求头是否为 Bearer <你的 API Key>
402额度用尽前往 开发者管理中心 充值
422请求体不合法如缺 url 或不是 JSON,detail 里列出校验问题
429触发限流每个 Key 每分钟 1200 次,codetoo_many_requests,退避后重试
500服务器错误稍后重试,持续出现请联系我们

提取失败(400)不扣费。 全部 18 个错误码及含义见 错误码

计费与额度

只有 200 才扣费,扣多少取决于接口与平台。具体规则见 开发者管理中心 的「计费规则」,查询额度不扣费。

随时可以查询剩余额度:

curl https://api.meowload.net/openapi/v1/credits \
  -H "Authorization: Bearer <你的 API Key>"
{ "availableCredits": 282539 }

系统会在剩余额度低于 10000、2000、300、100、0 时发送邮件和短信预警,你也可以用这个接口自建监控。

下一步