问答
we-mp-rss 授权老过期要重新扫码,怎么让公众号订阅一直跑下去?
简短回答
把登录这一环拿掉:用 API key 拉公众号的最新文章,不再依赖扫码得来的后台会话。公众号历史文章接口每次返回 10 篇,每次 $0.04。15 个号每天查两次,一个月 $36.00,没有任何东西会过期。
内容团队盯着 15 个行业号,希望每天中午前把新文章推到群里,周末和节假日没人扫码的时候也照常推。扫码登录恰恰做不到这一点。改用 API key 拉文章列表,登录过期的问题就不存在了:公众号历史文章每次返回一个号最新的 10 篇,整个流程里没有二维码。
为什么总要重新扫码
we-mp-rss 这类工具先用你自己的公众号扫码登录公众号后台(mp.weixin.qq.com),再借后台的搜索功能读别的号的文章列表。这个登录态只能撑几天,一过期所有订阅都停下来,提示你重新授权。后台因为请求太频繁限流的时候,也会弹出同样的提示,所以很难分清到底是过期了还是被限了。
让订阅一直跑
- 用公众号搜索把每个号的原始 ID(gh_ 开头)查一次存下来。
- 每天两次,对每个 ID 调用历史文章接口,留下没见过的链接。
- 把新文章推到群机器人、RSS 文件或者数据库。
import os, requests
API = "https://api.okdata.online"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
WEBHOOK = os.environ["CHAT_WEBHOOK_URL"] # 飞书、企业微信或 Slack 机器人
def new_articles(gh, seen):
body = requests.get(API + "/v1/wechat_mp/accounts/articles/list",
headers=H, params={"id": gh, "fields": "title,url,published_at"},
timeout=60).json()
if body["code"] != "ok":
raise RuntimeError(f"{gh}: {body['code']} {body['message']}")
return [a for a in body["data"]["items"] if a["url"] not in seen]
seen = set() # 实际任务里从磁盘读
for a in new_articles("gh_363b924965e9", seen):
requests.post(WEBHOOK, json={"text": f"{a['title']}\n{a['url']}"}, timeout=30)
费用
| 公众号数 | 每天查几次 | 每月调用 | 每月费用 |
|---|---|---|---|
| 15 | 2 | 900 | $36.00 |
| 15 | 6 | 2,700 | $108.00 |
| 50 | 1 | 1,500 | $60.00 |
大部分公众号一天最多发一次,查得比一天两次更勤,基本也查不到更多新东西。调用失败不扣费。
能拿到什么、拿不到什么
- 只有公开发布的内容:标题、链接、摘要、发布时间,能拿到时还有阅读数和点赞数,拿不到就是 null,并在
meta.unavailable里列出来。 - 全文要另调公众号文章详情,每篇 $0.02。
- 公众号做了账号迁移的话要重新搜一次,迁移后的新号原始 ID 不一样。
什么情况下继续扫码也行
we-mp-rss 免费,几个自己看的订阅,隔几天扫一次码不算麻烦,把它的授权过期通知配好,当天就能知道。如果关心的号就是你自己的,微信官方接口可以直接列出已发布的图文,不需要任何第三方。要给团队每天准时推送的,可以看看竞品监测的做法。
更新于