问答

we-mp-rss 授权老过期要重新扫码,怎么让公众号订阅一直跑下去?

简短回答

把登录这一环拿掉:用 API key 拉公众号的最新文章,不再依赖扫码得来的后台会话。公众号历史文章接口每次返回 10 篇,每次 $0.04。15 个号每天查两次,一个月 $36.00,没有任何东西会过期。

内容团队盯着 15 个行业号,希望每天中午前把新文章推到群里,周末和节假日没人扫码的时候也照常推。扫码登录恰恰做不到这一点。改用 API key 拉文章列表,登录过期的问题就不存在了:公众号历史文章每次返回一个号最新的 10 篇,整个流程里没有二维码。

为什么总要重新扫码

we-mp-rss 这类工具先用你自己的公众号扫码登录公众号后台(mp.weixin.qq.com),再借后台的搜索功能读别的号的文章列表。这个登录态只能撑几天,一过期所有订阅都停下来,提示你重新授权。后台因为请求太频繁限流的时候,也会弹出同样的提示,所以很难分清到底是过期了还是被限了。

让订阅一直跑

  1. 用公众号搜索把每个号的原始 ID(gh_ 开头)查一次存下来。
  2. 每天两次,对每个 ID 调用历史文章接口,留下没见过的链接。
  3. 把新文章推到群机器人、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 免费,几个自己看的订阅,隔几天扫一次码不算麻烦,把它的授权过期通知配好,当天就能知道。如果关心的号就是你自己的,微信官方接口可以直接列出已发布的图文,不需要任何第三方。要给团队每天准时推送的,可以看看竞品监测的做法。

更新于