问答
公众号文章链接里的 __biz 是什么?
简短回答
__biz 标识发文的公众号:一串 Base64,比如 MzA5NTI3MjIwMA==,同一个号的每篇文章都一样,解码后是一个普通数字。/s/ 短链里看不到它。okdata 的文章详情两种链接都收,每次 $0.02,返回公众号的 gh_ 原始 ID;公众号搜索会在 ext.biz 里直接返回 __biz。
在浏览器里打开一篇公众号文章,长链接的样子是 mp.weixin.qq.com/s?__biz=MzA5NTI3MjIwMA==&mid=2650412873&idx=1&sn=…。第一个参数 __biz 说明是哪个公众号发的。这个号的每篇文章都带着同一个值,公众号主页链接(mp.weixin.qq.com/mp/profile_ext?action=home&__biz=…)里也是它。老一些的爬虫和 RSS 工具之所以要“biz”,就是因为它是网页链接里唯一明摆着的账号标识。
长什么样
- 一串 Base64,几乎都是 16 个字符、以
==结尾,比如MzA5NTI3MjIwMA==。从 HTML 或别的链接里复制出来时,可能被百分号编码成MzA5NTI3MjIwMA%3D%3D。 - 解码后是一个十进制数字:
MzA5NTI3MjIwMA==就是3095272200。这个数字没有别的公开用途,保存时用 Base64 原样,各种工具要的都是这个形式。 - 短链
mp.weixin.qq.com/s/加一串短码的形式里没有它。两种链接打开的是同一篇文章;长链接里其余几个参数,见 mid、idx 和 sn。
和其他几个账号 ID 的区别
| ID | 长什么样 | 在哪里看到 |
|---|---|---|
__biz |
MzA5NTI3MjIwMA== |
文章长链接、主页链接 |
| 原始 ID | gh_ 加 12 位十六进制 |
公众号后台设置、网页源码、各类接口 |
| 微信号 | 短的英文数字,比如 brand_news |
微信里的公众号资料页 |
这几个 ID 互相算不出来,只能查表对应。从名称查这些 ID,见查公众号的 biz 和原始 ID。
接口和它的关系
- 公众号文章详情长链接、短链接都收,返回全文和
author.id,也就是公众号的原始 ID(gh_…)。返回的url一般是长链接,__biz可以从里面读出来。 - 公众号历史文章认原始 ID 或微信号,不认
__biz。列表里每篇文章的url都是带__biz的长链接。 - 公众号搜索加
view=full,每个搜到的号都带ext.biz,url是用它拼出来的主页链接。
| 任务 | 调用次数 | 费用 |
|---|---|---|
| 一条文章链接换全文和 gh_ ID | 1 | $0.02 |
| 一个公众号名称换 gh_ ID 和 biz | 1 | 每个搜到的号 $0.058,最多 $0.58 |
| 按 gh_ ID 取最新 10 篇 | 1 | $0.02 |
示例:从任意文章链接读出 __biz
import base64, os, requests
from urllib.parse import urlparse, parse_qs
r = requests.get("https://api.okdata.online/v1/wechat_mp/articles/get",
headers={"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"},
params={"url": "https://mp.weixin.qq.com/s/k3Vq8ZtYwLr2PxN0aHd5Fg",
"fields": "id,url,title,author.id,author.name"},
timeout=60)
item = r.json()["data"]["item"]
biz = parse_qs(urlparse(item["url"]).query).get("__biz", [None])[0]
print(item["author"]["id"], biz, base64.b64decode(biz).decode() if biz else None)
限制
- 做过账号迁移的公众号会换成新的一套 ID,别再用旧的 biz,重新查一次。
- 已删除的文章返回
not_found,不扣费。 - 只想拿文章正文,见用代码获取公众号文章全文。
资料来源
- V2EX:公众号文章由 biz + mid + idx 确定,mid 在同一账号内唯一
- ClearURLs rules: a WeChat article link only needs __biz, mid, idx and sn (issue #13)
这个问题出现过的地方(读取于 2026-11-12)
更新于