问答

公众号怎么用 RSS 订阅?

简短回答

微信没有 RSS,只能自己生成:调用公众号历史文章接口(每次 $0.04,返回最新 10 篇),把结果写成 RSS 文件让阅读器去拉。一个号每天刷新两次,每月 $2.40;二十个号是 $48.00。

别的订阅都在 Reeder、Inoreader 或 Folo 里看,唯独关心的那几个公众号只能在微信里刷。微信从来没提供过 RSS,所以订阅源得自己生成。真正需要数据的部分很小:公众号历史文章返回一个号最新的 10 篇文章,带标题、链接、摘要和发布时间,正好一一对应 RSS 的 item。脚本把它写进 feed.xml,阅读器像订阅普通网站一样去拉这个文件。

步骤

  1. 用公众号搜索查一次这个号的原始 ID(gh_ 开头),每返回一个号 $0.058。
  2. 定时跑下面的脚本,用 cron、GitHub Actions 或者一台小服务器都行。
  3. 把 feed.xml 放到阅读器访问得到的地方:静态托管、对象存储,阅读器装在同一台机器上的话放本地文件夹也可以。
import os, requests
from email.utils import format_datetime
from datetime import datetime
from xml.sax.saxutils import escape

API = "https://api.okdata.online"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
GH = "gh_363b924965e9"

body = requests.get(API + "/v1/wechat_mp/accounts/articles/list", headers=H,
                    params={"id": GH}, timeout=60).json()
if body["code"] != "ok":
    raise SystemExit(f"{body['code']}: {body['message']}")

items, name = [], GH
for a in body["data"]["items"]:
    name = a["author"]["name"] or name
    date = format_datetime(datetime.fromisoformat(a["published_at"].replace("Z", "+00:00")))
    items.append(f"<item><title>{escape(a['title'] or '')}</title><link>{escape(a['url'])}</link>"
                 f"<guid>{escape(a['url'])}</guid><pubDate>{date}</pubDate>"
                 f"<description>{escape(a['text'])}</description></item>")

rss = (f'<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel>'
       f"<title>{escape(name)}</title><link>https://mp.weixin.qq.com/</link>"
       f"<description>{escape(name)}(okdata 生成)</description>{''.join(items)}</channel></rss>")
open("feed.xml", "w", encoding="utf-8").write(rss)

多久刷新一次,要花多少

每刷新一次,每个号就是一次调用,不管有没有新文章。

订阅数 每天刷新 每月调用 每月费用
1 2 次 60 $2.40
20 2 次 1,200 $48.00
20 6 次 3,600 $144.00

搜索时加 view=full,每个号都会带 ext.articles_per_week(每周发文数)。一周发两次的号用不着一天刷六次,刷一次就够了。

限制

  • item 的描述是文章摘要,不是全文。想在阅读器里看全文,每篇新文章多调一次公众号文章详情,每篇 $0.02,记得缓存,同一篇别取两次。
  • 只有公开发布的文章。删掉的文章下次刷新就没了,但阅读器里已经拉到的还在。
  • 出错不收费。某次刷新失败的话,保留旧的 feed.xml,别用空文件覆盖。

免费的办法

wewe-rss、we-mp-rss 这类自部署项目也能生成公众号 RSS,不花钱,代价是要一直保持一个微信读书账号或公众号后台的登录。RSSHub 也有过公众号相关的路由,用之前先确认对你关注的号还管用。自己看的几个订阅,用这些项目很合适;别人或者别的系统要依赖的订阅源,走 API 更稳。各接口价格见价格页。

更新于