问答
Jina Reader 这类网页读取工具为什么读不了公众号文章?AI 流程里该怎么换?
简短回答
微信对 mp.weixin.qq.com 的自动化访问,大多只回一个「环境异常」验证页,文章本身拿不到,所以通用的网页读取工具交给 AI 流程的要么是验证页文字,要么什么都没有。把公众号链接单独交给文章接口,其他网站继续用原来的读取工具:okdata 按链接返回全文、公众号名和发布时间,每篇 $0.02。
设想一个调研智能体:团队每天往群里丢 40 个链接,它每天早上读完写一份简报。大部分链接走 Jina Reader 或自建爬虫,回来的是干净的 Markdown;公众号文章回来的却只有几行字,让你「完成验证」。智能体要么说读不了,要么更糟,把验证页当正文总结了,还顺手存进了知识库。Jina Reader 的 issue 里有好几条一模一样的反馈。解决办法很小:mp.weixin.qq.com 的链接改走公众号文章详情,其他网站照旧用你现在的读取工具。
按域名分流
import os
import requests
from urllib.parse import urlparse
API = "https://api.okdata.online"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
BLOCK_SIGNS = ("环境异常", "完成验证")
def read_wechat(url):
body = requests.get(API + "/v1/wechat_mp/articles/get", headers=H,
params={"url": url}, timeout=60).json()
if body["code"] != "ok":
return {"url": url, "error": body["code"], "retry": body["retry"]}
a = body["data"]["item"]
return {"url": url, "title": a["title"], "text": a["text"],
"account": a["author"]["name"], "published_at": a["published_at"]}
def read_other(url):
text = requests.get("https://r.jina.ai/" + url, timeout=60).text
if any(sign in text[:500] for sign in BLOCK_SIGNS):
return {"url": url, "error": "blocked_page"}
return {"url": url, "text": text}
def read_url(url):
host = urlparse(url).hostname or ""
return read_wechat(url) if host == "mp.weixin.qq.com" else read_other(url)
就算公众号已经分流出去,检查前 500 个字符这一步也值得留着。别的网站同样会给机器人返回验证页,流程不检查就入库,向量库里会悄悄混进一堆噪音。
费用
| 量级 | 调用次数 | 费用 |
|---|---|---|
| 一篇文章 | 1 | $0.02 |
| 每天 20 个公众号链接,跑 30 天 | 600 | $12.00 |
| 一次性补读 2,000 个收藏链接 | 2,000 | $40.00 |
失败的调用不扣费,列表里混着已删除的文章也不会多花钱。
需要知道的限制
- 正文是纯文本,不含图片、图表和图注。如果一篇文章主要靠长图表达,拿到的文字会很少。
- 被作者删除或被平台处理的文章返回
not_found,这类不要重试。 - 阅读数、点赞数在微信展示时才有,否则为空,返回里会写明原因。
- 想要一个号的全部历史文章,先用公众号历史文章列出来。
- 只能读公开文章。内容版权归作者,可以总结、引用,不要整篇转载。
其他办法
只读一两篇的话,把正文复制进对话框最省事,也最稳。在家用宽带上跑无头浏览器有时能过验证,但微信一改规则就得跟着修。微信官方接口只能取你自己公众号的文章,整理自家历史内容时它是正解。要长期跟踪整个号,wewe-rss 这类 RSS 方案免费,前提是你能一直维持它的微信读书登录。和其他平台怎么配合,见内容调研方案。
更新于