获取公众号历史文章:从微信读书开始

之前写公众号时使用一些浏览器插件能方便转载其他公众号文章,但现在功能已经无法使用;发现是因为微信官方已经关闭相关接口wechat-article/wechat-article-exporter。目前的解决方案是通过微信读书接口获取文章,但也有风控问题,只有最新文章能稳定获取。

项目链接

核心思路

微信读书根据公众号查看文章

微信读书风控相对没那么严,每个公众号可以视作一个bookId,通过/web/mp/articles接口,参数bookId + offset获取文章,但目前测试来看只能获取很少部分文章,甚至获取不了。可以通过/api/mp/cover接口兜底。

首先通过/web/shelf/bookIds检查是否登录,登陆后获取bookId。

微信公众号的bookId以MP_WXS_开头,登录微信助手后可以过滤掉非MP_WXS_开头的bookId。

image-20261011222554164

/web/mp/articles接口拿到reviewId拆解得到公众号文章,解析得到链接

image-20261011222700707

另外还有通过文章链接解析得到公众号的bookId

1
2
bookId = 'MP_WXS_' + base64解码(__biz)
例:__biz=MzA5NTQ0NjU3Mw== → 解码 "3095446573" → MP_WXS_3095446573

通过文章链接的__biz解码得到公众号id,拼接得到公众号信息,这样可以在某篇文章处关注公众号。通过POST /mp/shelf/addToShelf添加公众号

公众号添加

公众号后台图文编辑器里「账号名片 / 超链接」的搜号入口,底层接口是 cgi-bin/searchbiz

1
2
3
4
5
GET mp.weixin.qq.com/cgi-bin/searchbiz?action=search_biz&scene=1
&query=<名字>&begin=0&count=5&token=<后台token>&lang=zh_CN&f=json&ajax=1

未登录 → HTTP 200 + {"base_resp":{"ret":200003,"err_msg":"invalid session"}}
对照组 /cgi-bin/searchbizzzz → HTTP 404

返回的 fakeid 就是 __biz 的 base64 → 直接套上的换算公式 bookId = 'MP_WXS_' + atob(__biz)。

相关接口

#接口方法归属干什么关键请求参数关键响应字段错误协议
1/web/shelf/bookIdsGET微信读书书架列表 兼登录探针无bookIds / data.bookIds / ids / books / shelf平铺 errCode:-2010 未登录、-2012 超时
2/web/book/infoGET微信读书取号名bookIdtitle / bookName / name / bookInfo.title同上
3/web/mp/articlesGET微信读书文章列表(主路径)bookId、offset(步长 50)reviews[].review.mpInfo.title、reviewId、mpInfo.time-2041 风控、-2042 未收录
4/api/mp/coverGET微信读书单篇兜底bookId同 3,但外面套了一层嵌套 statusCode>=400 + data.errcode
5/web/mp/contentGET微信读书单篇正文(已封装,界面暂未用)reviewId正文 HTML平铺 errCode
6/mp/shelf/addToShelfPOST微信读书加入书架,唯一的写操作body {"bookIds":["MP_WXS_…"]}—平铺 errCode
7/cgi-bin/searchbizGET公众号后台按名字搜号

通过微信读书获取关注的公众号(bookId)并获取文章标题、reviewId(用于解析文章链接),同时有添加关注读书公众号功能。

公众号提供按名称搜索功能,这样不完全依赖微信读书关注公众号

image-20261011233644389

核心换算

1
bookId = 'MP_WXS_' + atob(__biz)

bizToFakid() 做了完整防御:decodeURIComponent 处理 %3D → 去空白 → URL-safe base64 转标准(-→+、_→/)→ 补 padding → atob → 用 /^\d{5,20}$/ 校验结果像不像 fakid。离线样本验证过三组,例如 MzU1MjI5MDk3Nw== → MP_WXS_3552290977。__biz 又有三个来源:URL 查询串、页面 DOM(window.biz / cgiData.biz / #js_name 的 href / 最后兜底扫源码正则)、以及后台搜索返回的 fakeid——三条入口在这里汇流。

做了个插件,欢迎使用,喜欢请点个star

VibeProjects/wechat_article_explorer at main · drowning-in-codes/VibeProjects

相关项目

  1. wechat-article/wechat-article-exporter: 一款在线的 微信公众号文章批量下载 工具,支持导出阅读量与评论数据,无需搭建任何环境,可通过 在线网站 使用,支持 docker 私有化部署和 Cloudflare 部署。 支持下载各种文件格式,其中 HTML 格式可100%还原文章排版与样式。
  2. WeRSS ‐ 微信公众号订阅助手 · rachelos/we-mp-rss Wiki
-------------本文结束感谢您的阅读-------------
感谢阅读.

欢迎关注我的其它发布渠道