问答

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 方案免费,前提是你能一直维持它的微信读书登录。和其他平台怎么配合,见内容调研方案。

更新于