微信视频号解析 API 实战:一次调用拿到标题、封面、原画直链与多清晰度备选

简介: 微信视频号解析API,专为破解其封闭生态设计:一次HTTP调用即可同步获取标题、封面、原画直链及多清晰度备用地址(含codec/format),支持口令直传、作者双字段、失败不扣费,适用于监测、审核、归档等合规场景。(239字)

微信视频号解析 API 实战:一次调用拿到标题、封面、原画直链与多清晰度备选

视频号是个"封闭生态":分享链接指向微信自己的页面,常规请求拿不到视频元数据,自己逆向协议又要维护签名和.cookie,一改版就失效。这个接口把这件事收敛成一次 HTTP 调用——传入视频号分享链接或口令,同步返回标题、描述、封面、视频直链、作者与互动数据,还附带多清晰度备用地址列表。

✅ 接口亮点

亮点 说明
同步直返 一次请求拿结果,无任务号、无轮询、无回调
口令直达 整段分享口令直接传,接口自动提取其中的 http(s) 地址
多清晰度备选 video_backup 返回带 label / format / codec 的备选列表,主链失效有退路
作者信息双写 顶层扁平字段 + author 对象都有,取数方便
失败不扣费 参数错误、解析失败、服务端 500 均不计费

一、适用场景

按落地频率排序,第三列是主要依赖字段,对着自己的需求看:

场景 怎么用 主要依赖字段
视频号内容监测 定时解析指定账号的分享链接,追踪点赞/转发趋势 stats.like_count、share_count
爆款拆解 采集高互动视频的标题与文案,分析钩子写法 title、desc、stats
内容审核风控 对转载来源先取作者与元数据,再决定是否进审 author、author_id、stats
素材归档 自有或授权内容的定期备份,含封面 video_url、cover_url、video_backup
播放页元数据补全 在自建内容库中补全视频号来源信息 title、desc、author_name
数据集构建 视频号传播数据抽样,做研究或算法评测 stats 全量 + request_url

两条使用建议:

  1. 互动数据做差值,不做绝对值。 视频号的 play_count 常返回 0(平台不公开播放数),这是正常现象;同一条链接隔天各解析一次取差值,才反映真实增长。
  2. video_backup 是给下载容错用的。 主直链 video_url 有时效,解析后建议立即转存;如果转存失败,按 video_backup 里其他清晰度档位重试一遍,别直接判死。

边界也要先说清:接口仅提供链接元数据解析,不存储、不分发原始内容;解析结果归原作者及原平台所有,适合内容审核、数据分析、备份归档这类合理场景,不要拿去做去水印下载站或公开传播他人作品。


二、接入基础信息

项 值
地址 https://xiaoapis.com/api/video/weixin
方法 GET / POST(表单或 JSON 均可)
鉴权 请求参数 key(控制台 → 密钥管理获取)
模式 同步,无任务号
计费 每次成功解析扣 2 点;失败不扣费

请求参数只有两个:

名称 必填 类型 说明
key 是 string 平台 API 密钥
url 是 string 视频号分享链接,最大 2048 字符;兼容 content、link;可粘贴带网址的分享口令,接口自动提取链接

Key 不要写进代码或提交到 Git,放环境变量:

export XIAOAPIS_API_KEY="你的key"

三、第一次调用:两条 curl

GET 版(最快验证):

curl "https://xiaoapis.com/api/video/weixin?key=$XIAOAPIS_API_KEY&url=视频号分享链接"

POST + JSON 版(日常推荐):

curl -X POST "https://xiaoapis.com/api/video/weixin?key=$XIAOAPIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "6.66 复制打开【微信】观看【示例作者的video】 https://channels.weixin.qq.com/xxxxxxxx"}'

日常用 POST 的理由和大多数解析接口一样:口令里带中文、表情,放 JSON 请求体比拼 query string 少一层编码坑。


四、返回结构:四个值得注意的细节

成功返回的顶层是 code / msg / data,业务数据全在 data 里。完整结构:

{
   
  "code": 200,
  "msg": "解析成功",
  "data": {
   
    "platform": "weixin_channels",
    "type": "video",
    "title": "示例标题",
    "desc": "示例描述",
    "video_url": "https://.../video.mp4",
    "cover_url": "https://.../cover.jpg",
    "quality": "原画",
    "author": {
   
      "name": "作者昵称",
      "id": "xxx",
      "avatar": "https://.../avatar.jpg"
    },
    "author_name": "作者昵称",
    "author_id": "xxx",
    "author_avatar": "https://.../avatar.jpg",
    "video_backup": [
      {
   
        "label": "H.264 原画",
        "quality": "原画",
        "url": "https://.../video.mp4",
        "format": "mp4",
        "codec": "h264"
      }
    ],
    "stats": {
   
      "like_count": 365,
      "comment_count": 26,
      "share_count": 1490,
      "play_count": 0
    },
    "request_url": "https://..."
  }
}

四个动手前要知道的细节:

  1. platform 固定是 weixin_channels,type 是 video。 这是视频号专用接口,返回结构是收敛过的,不用像通用解析接口那样处理图集、实况等多形态——判断逻辑可以写得很简单。
  2. 作者字段双写。 顶层 author_name / author_id / author_avatar 和 author 对象内容一致。建议代码从顶层取,author 对象留作兼容;两边都判空再兜底,别只押一边。
  3. video_backup 是备选清晰度列表,每项带 label(如"H.264 原画")、quality、format、codec。需要指定编码格式(比如只收 h264)或避开高规格编码时,按 codec 筛这列表,而不是盲用主直链。
  4. play_count 是 0 是正常的。 视频号不公开播放数,返回 0 不代表没播放;做报表时把这一列置灰或标注"平台未公开",别当异常告警。

五、Python 单文件工具

可以直接当命令行工具用,也是集成到项目里的底子:

#!/usr/bin/env python3
"""wxparse.py — 微信视频号解析小工具。

用法:
    export XIAOAPIS_API_KEY="你的key"
    python3 wxparse.py "6.66 复制打开【微信】观看… https://channels.weixin.qq.com/xxxx"
    python3 wxparse.py https://channels.weixin.qq.com/xxxxxxxx
"""
import os
import sys

import requests

ENDPOINT = "https://xiaoapis.com/api/video/weixin"


class ParseError(RuntimeError):
    """业务失败:参数错误 / 链接无法解析 / 点数不足,重试无意义。"""


class NetworkError(RuntimeError):
    """网络类失败:值得退避重试。"""


def parse(url_or_text: str, *, timeout: float = 30.0) -> dict:
    """解析一条视频号链接,返回 data 字典。口令整段传入即可。"""
    key = os.environ.get("XIAOAPIS_API_KEY")
    if not key:
        raise ParseError("未设置 XIAOAPIS_API_KEY 环境变量")

    try:
        resp = requests.post(
            ENDPOINT,
            json={
   "key": key, "url": url_or_text},
            timeout=timeout,
        )
    except requests.RequestException as exc:
        raise NetworkError(f"请求失败: {exc}") from exc

    try:
        body = resp.json()
    except ValueError:
        raise NetworkError(f"HTTP {resp.status_code},返回非 JSON: {resp.text[:200]}")

    if body.get("code") != 200:
        raise ParseError(f"[{body.get('code')}] {body.get('msg')}")
    return body["data"]


def pick_video(data: dict) -> list[dict]:
    """主直链 + 备选清晰度,统一成 [{url, label, codec, format}]。

    主直链放第一个;video_backup 里与主直链重复的项去掉。
    """
    items: list[dict] = []
    main = (data.get("video_url") or "").strip()
    if main:
        items.append({
   
            "url": main,
            "label": f"主直链({data.get('quality') or '未知画质'})",
            "codec": "",
            "format": "",
        })
    for b in data.get("video_backup") or []:
        url = (b.get("url") or "").strip()
        if url and url != main:
            items.append({
   
                "url": url,
                "label": b.get("label") or b.get("quality") or "备选",
                "codec": b.get("codec") or "",
                "format": b.get("format") or "",
            })
    return items


def show(data: dict) -> None:
    author = (data.get("author") or {
   })
    name = data.get("author_name") or author.get("name") or "(未知)"
    stats = data.get("stats") or {
   }
    print(f"标题: {data.get('title') or '(无)'}")
    print(f"描述: {data.get('desc') or '(无)'}")
    print(f"作者: {name}(ID: {data.get('author_id') or author.get('id') or '未知'})")
    print(f"互动: 赞 {stats.get('like_count', 0)} / 评 {stats.get('comment_count', 0)}"
          f" / 转 {stats.get('share_count', 0)}"
          f" / 播 {stats.get('play_count', '未公开')}")
    print(f"封面: {data.get('cover_url') or '(无)'}")
    for i, v in enumerate(pick_video(data), 1):
        extra = " ".join(filter(None, [v["codec"], v["format"]]))
        print(f"[{i}] {v['label']} {extra}: {v['url']}")


if __name__ == "__main__":
    if len(sys.argv) < 2:
        print(__doc__)
        sys.exit(1)
    try:
        show(parse(sys.argv[1]))
    except ParseError as exc:
        print(f"解析失败: {exc}", file=sys.stderr)
        sys.exit(2)
    except NetworkError as exc:
        print(f"网络异常: {exc}", file=sys.stderr)
        sys.exit(3)

三个设计点:

  • pick_video 把主直链和备选档统一成一张列表,主直链排第一、去重。下载器只需遍历列表,第一档失败自动落到第二档,不用写两套逻辑。
  • 作者取数走"顶层优先、对象兜底",两种写法都判空,接口哪个字段将来调整都不至于直接崩。
  • 退出码三分类(0 成功 / 2 业务失败 / 3 网络异常),进 cron 或流水线时上游按退出码决定重试策略。

六、计费与限流

项 值
成功解析 扣 2 点/次
失败(400/500) 不扣费
单用户 QPS 10 次/秒
每日请求上限 10000 次

点数单价以控制台实时显示为准。按此上限,单账号日解析上限就是 1 万条,QPS 打满是 10 条/秒——批量任务建议把实际并发压在 5 次/秒以内,留出抖动余量,也避免瞬时流量触发限流。

注意:每日 10000 次是接口层面的上限,点数余额是另一道闸——余额不足时同样会失败,只是返回 400。两条线都要监控。


七、错误码速查

业务码 含义 处理
200 解析成功 正常取数
400 参数错误或未能解析到有效内容 检查 url 是否完整、链接是否有效;不要重试。msg 提示点数不足时去充值
403 认证失败 检查 Key 是否正确、是否被重置;去控制台确认 Key 状态,不要重试
500 服务暂时繁忙或配置异常 不扣费,可退避 1~2 次后重试

监控建议:对 msg 做关键字分类("点数" / "链接" / "认证")再告警,否则凌晨的告警群全是"400"三个字符,什么都看不出来。


八、什么时候用这个接口,什么时候不用

它是视频号专用接口,适合:来源确定是视频号、需要 video_backup 备选清晰度、只要视频形态的场景。

如果你的输入是混合来源——抖音、小红书、B站、微博、YouTube 等杂链一起进来——那就该用通用解析接口在入口做分发:视频号链接走本接口,其他平台走通用接口,各自取数后落到同一张表。通用接口的支持平台清单以其文档为准,这里不展开。

判断来源不需要写复杂逻辑:视频号链接的域名特征是 channels.weixin.qq.com,口令里也带"视频号"或"channels.weixin"字样,一个正则就能路由。


九、FAQ

Q1:口令整段直接传行吗?

行。接口自动提取其中的 http(s) 地址,不用自己写正则,兼容 content、link 参数名。

Q2:能拿到播放量吗?

拿不到完整值。视频号不公开播放数,play_count 返回 0 是常态;点赞、评论、转发三项是有的。

Q3:视频直链能长期保存吗?

不能。直链有时效,解析后立即下载转存自己的对象存储,业务库存自己的地址。转存失败时用 video_backup 的备选档再试。

Q4:图集或实况怎么处理?

本接口面向视频形态,返回 type: video。图文类内容不在本接口范围内。

Q5:失败扣点吗?

不扣。只有 200 扣 2 点;400、500 都不计费。按"2 点/次"算,一千次成功解析的成本是固定的,预算很好做。

Q6:和通用视频解析接口怎么选?

来源只有视频号 → 用本接口,字段更聚焦、带备选清晰度;多平台混合来源 → 入口做域名路由,视频号走本接口、其余走通用接口。


十、上线前检查清单

  1. Key 走环境变量或密钥管理服务,代码与日志无明文;
  2. 批量任务限速 ≤5 次/秒,留出限流余量;
  3. 解析即转存,库里不存平台直链;
  4. 监控成功率与余额阈值,按 msg 分类告警;
  5. play_count=0 不设告警,报表标注"平台未公开";
  6. 来源与版权信息在用户可见界面展示,合规条款对照文档原文。

参考

目录
相关文章
|
14天前
|
Linux 开发工具 iOS开发
Codex保姆级教程(下载+安装+登录+使用,含所有版本,2026最新)
Codex是OpenAI推出的开源AI编程智能体,本地运行,可理解整个代码库,支持自然语言指令改代码、执行命令、跑测试、修Bug,兼容Win/macOS/Linux。(239字)
6020 44
|
14天前
|
JavaScript API iOS开发
DeepSeek Harness下载、安装、配置一篇搞定(2026整理,送常用插件)
DeepSeek Harness(DSH)是DeepSeek于2026年开源的MIT协议AI Agent框架,支持插件化组装模型、工具、沙箱与UI,兼容主流大模型。本文提供免Node.js的桌面端安装包(Win/macOS),含详细图文教程及热门插件推荐。
5054 60
|
9天前
|
Linux 开发工具 iOS开发
2026最新codex下载安装保姆级使用教程(下载+安装+登录+使用,含所有历史版本)
本文详解OpenAI Codex国内快速上手指南:提供Win/macOS/Linux全平台免安装包、npm/Homebrew等多方式安装、账号/API Key双登录、简体中文切换,覆盖下载、安装、汉化、使用及高频避坑(如微软商店失败、npm超时等),10分钟即可跑通。
2399 6
|
7天前
|
人工智能 安全 API
DeepSeek Harness下载、安装、配置一篇搞定(2026整理,送常用插件)
DeepSeek Harness(dsh)是DeepSeek AI于2026年开源的轻量级Agent运行框架,基于Cordis内核,践行“一切皆插件”理念。支持Web/桌面双端,开箱即用;内置多模型接入、丰富插件生态(超3.5万),适配编程、办公、创作等场景。(239字)
1506 0
|
9天前
|
云安全 人工智能 安全
|
2天前
|
云安全 人工智能 安全
|
8天前
|
人工智能 并行计算 调度
本地 AI 一键部署工具 LocModel:Windows 端集成画图、视频生成、Agent 的开源模型运行方案
LocModel 是专为 Windows 设计的一站式本地 AI 工具,支持零配置启动、自动硬件检测、GGUF 模型一键加载、文生图/视频生成及 Agent 自动化任务。适配 8G 显存,内置显存分片调度,轻松实现 AI 漫剧批量创作与离线大模型调用。(239 字)

热门文章

最新文章