内容提要
文章介绍通过微信读书接口获取公众号历史文章的方法:将公众号的__biz经base64解码后拼接为bookId(加MP_WXS_前缀),再调用/web/mp/articles等接口获取文章列表与正文,并用/api/mp/cover兜底。作者开发了配套插件,并提醒存在风控限制,仅最新文章较稳定。
延伸解读
核心换算:从 __biz 到 bookId
文章指出,微信读书将每个公众号视为一个 bookId,其格式为 MP_WXS_ 前缀加上 __biz 的 base64 解码结果。例如 __biz=MzA5NTQ0NjU3Mw== 解码后得到 3095446573,拼接为 MP_WXS_3095446573。作者还实现了 bizToFakid() 函数,处理 URL 编码、URL-safe base64 转换、补全 padding,并用正则校验结果是否为 5 到 20 位数字,确保转换的健壮性。
接口调用与风控限制
获取文章列表主要依赖 /web/mp/articles 接口,参数为 bookId 和 offset,步长 50。但作者提醒,该接口存在风控,错误码 -2041 表示触发风控,-2042 表示未收录。实际测试中,只能稳定获取最新文章,历史文章获取很少甚至失败。可用 /api/mp/cover 接口作为单篇兜底,但需注意其返回结构嵌套,且 statusCode 大于等于 400 时可能包含错误码。
登录检查与公众号添加
调用 /web/shelf/bookIds 可检查微信读书登录状态,未登录时 errCode 为 -2010。登录后,可过滤出以 MP_WXS_ 开头的 bookId。若需添加公众号,可通过 POST /mp/shelf/addToShelf 接口,body 为 {"bookIds":["MP_WXS_…"]}。此外,文章还提到利用公众号后台的 searchbiz 接口按名称搜索公众号,返回的 fakeid 可直接转换为 bookId,作为不完全依赖微信读书的补充方案。
Q&A
为什么现在很多浏览器插件无法转载其他公众号文章了?
因为微信官方已经关闭了相关接口,例如 wechat-article/wechat-article-exporter 所依赖的接口已失效,导致这些插件功能无法使用。
如何通过微信读书获取公众号的历史文章?
核心思路是将公众号的 __biz 经 base64 解码后拼接为 bookId(格式为 MP_WXS_ + 解码结果),然后调用 /web/mp/articles 接口,传入 bookId 和 offset 参数获取文章列表,再用 /api/mp/cover 接口兜底。
微信读书获取公众号文章时有哪些风控限制?
微信读书风控相对没那么严,但仍有风控问题,只有最新文章能稳定获取,通过 /web/mp/articles 接口测试来看只能获取很少部分文章,甚至获取不了。
公众号的 bookId 是怎么计算出来的?
bookId = 'MP_WXS_' + base64解码(__biz)。例如 __biz=MzA5NTQ0NjU3Mw== 解码为 '3095446573',则 bookId 为 MP_WXS_3095446573。
如何通过文章链接找到对应的公众号并关注?
通过文章链接解析得到公众号的 __biz,解码后拼接得到 bookId,从而获取公众号信息,这样可以在某篇文章处关注公众号。也可以通过 POST /mp/shelf/addToShelf 添加公众号到书架。
获取公众号文章时,/web/mp/articles 接口返回哪些关键字段?
该接口返回 reviews 数组,其中包含 reviewId、mpInfo.title、mpInfo.time 等关键字段,reviewId 可用于拆解得到公众号文章并解析链接。