Answers

How do I subscribe to a WeChat Official Account via RSS?

Short answer

WeChat doesn't offer RSS, so you build the feed: call Official Account article history for the account ($0.04 per call, 10 newest articles) and write the items into an RSS file your reader polls. One account refreshed twice a day costs $2.40 a month; twenty accounts cost $48.00.

You read everything else in Reeder, Inoreader or Folo, and the Official Accounts you care about are the one thing stuck inside the WeChat app. WeChat has never offered RSS, so the feed has to be generated. The part that needs data is small: Official Account article history returns an account's 10 newest articles with title, link, summary and publish time, which maps one to one onto RSS items. A script writes that into feed.xml, and your reader polls the file like any other feed.

Steps

  1. Find the account's original ID (gh_…) once with Official Account search, $0.058 per account returned.
  2. Run the script below on a schedule (cron, a GitHub Action, a small server).
  3. Put feed.xml somewhere your reader can reach: a static host, an object storage bucket, or a local folder if your reader runs on the same machine.
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)} via okdata</description>{''.join(items)}</channel></rss>")
open("feed.xml", "w", encoding="utf-8").write(rss)

How often to refresh, and what it costs

Each refresh is one call per account, whether or not anything new was published.

Feeds Refreshes a day Calls a month Cost a month
1 2 60 $2.40
20 2 1,200 $48.00
20 6 3,600 $144.00

Search with view=full tells you ext.articles_per_week for each account. An account that posts twice a week doesn't need six refreshes a day; once is plenty.

Limits

  • The item description is the article's summary, not the full text. For full text in the feed, add one article detail call per new article at $0.02, and cache it so you never fetch the same article twice.
  • Only published, public articles appear. A deleted article disappears from the next refresh, but readers keep what they already fetched.
  • Errors are not charged. If a refresh fails, keep the old feed.xml instead of overwriting it with an empty one.

Free alternatives

Self-hosted projects such as wewe-rss and we-mp-rss produce WeChat RSS feeds at no cost; they rely on a WeChat Reading account or an Official Account backend login that you keep signed in. RSSHub has had WeChat-related routes too; check which still work for your accounts. They are a good fit for a few personal feeds. The API route suits feeds that other people or other systems depend on. Prices for every endpoint are on the pricing page.

Updated