问答
公众号怎么用 RSS 订阅?
简短回答
微信没有 RSS,只能自己生成:调用公众号历史文章接口(每次 $0.04,返回最新 10 篇),把结果写成 RSS 文件让阅读器去拉。一个号每天刷新两次,每月 $2.40;二十个号是 $48.00。
别的订阅都在 Reeder、Inoreader 或 Folo 里看,唯独关心的那几个公众号只能在微信里刷。微信从来没提供过 RSS,所以订阅源得自己生成。真正需要数据的部分很小:公众号历史文章返回一个号最新的 10 篇文章,带标题、链接、摘要和发布时间,正好一一对应 RSS 的 item。脚本把它写进 feed.xml,阅读器像订阅普通网站一样去拉这个文件。
步骤
- 用公众号搜索查一次这个号的原始 ID(gh_ 开头),每返回一个号 $0.058。
- 定时跑下面的脚本,用 cron、GitHub Actions 或者一台小服务器都行。
- 把
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 更稳。各接口价格见价格页。
更新于