微信文章转存接口最小可运行示例:从一条 curl 到字段验收 适用场景当需要把公众号文章从网页形态转成可检索、可入库的文本时最直接的做法是交给转换接口处理给定文章链接拿回标题、作者、公众号名称、发布时间以及正文的 Markdown/纯文本同时得到正文图片的地址清单。典型用途包括内部知识库归档、内容二次排版、文章摘要抽取前的预处理。本文按「最小可运行示例」来写先确认接口事实再用一条 curl 打通链路然后用脚本封装最后逐块验收返回字段。接口信息如下项目值接口名称微信文章转存请求方法POST请求地址https://v1.apizero.cn/api/wechat-archive分类内容娱乐QPS1 req/s鉴权Authorization: Bearer API_KEY接口能力边界接入前先把边界划清楚可以避免设计返工输入是公众号文章链接不是文章 ID 或标题链接格式需与示例一致。输出包含两部分正文内容content与资源清单images以及元信息meta。正文格式通过format控制取值为markdown、text、both取both时同时返回两种形态。图片以 URL 列表形式返回是否下载、存到哪里由调用方决定。互动数据阅读数、点赞数在示例中为null实际是否有值以文档为准解析时不要假设一定非空。该接口 QPS 为 1 req/s批量转存必须串行排队或加节流。参数与鉴权请求参数参数必填类型说明示例url是string微信公众号文章链接https://mp.weixin.qq.com/s/hy31xZK6FH3H51qh1zeSKAformat否string输出格式markdown/text/bothbothtimeout否int超时秒数20三个参数都放在 JSON 请求体中。format不传时按文档默认行为处理timeout用于约束抓取侧耗时建议略大于本地 HTTP 客户端的超时设置避免两侧同时超时导致无法区分责任方。鉴权请求头携带 Bearer Token密钥从环境变量注入export APIZERO_API_KEY你的密钥最小可运行示例curl 版本下面这条命令可直接复制执行把链接替换成目标文章即可curl -sS \ -X POST \ -H Authorization: Bearer $APIZERO_API_KEY \ -H Content-Type: application/json \ -d {url: https://mp.weixin.qq.com/s/hy31xZK6FH3H51qh1zeSKA, format: both, timeout: 20} \ https://v1.apizero.cn/api/wechat-archivePython 版本把调用封装成函数并在入口处先校验code再取数据import json import os import urllib.request ENDPOINT https://v1.apizero.cn/api/wechat-archive def archive_wechat_article(article_url: str, fmt: str both, timeout: int 20) - dict: payload {url: article_url, format: fmt, timeout: str(timeout)} req urllib.request.Request( ENDPOINT, datajson.dumps(payload).encode(utf-8), headers{ Authorization: fBearer {os.environ[APIZERO_API_KEY]}, Content-Type: application/json, }, methodPOST, ) with urllib.request.urlopen(req, timeouttimeout 5) as resp: body json.loads(resp.read().decode(utf-8)) if body.get(code) ! 0: raise RuntimeError(f转存失败 code{body.get(code)} msg{body.get(msg)}) return body[data] if __name__ __main__: data archive_wechat_article(https://mp.weixin.qq.com/s/hy31xZK6FH3H51qh1zeSKA) meta data[meta] print(meta[title], meta[account_name], meta[publish_time]) print(图片数量:, len(data.get(images, []))) print(data[content][markdown][:200])注意本地超时设为timeout 5这样接口侧先超时返回时本地还能拿到错误响应而不是直接抛连接异常。返回值解读响应顶层是code、msg、request_id、tips业务数据在data下分三块{ code: 0, msg: 成功, data: { meta: { title: GitHub史上最快破10万星项目来了, author: 作者名, account_name: 公众号名, publish_time: 2026-05-01T10:00:0008:00, read_num: null, like_num: null }, content: { markdown: # 文章标题\n\n正文..., text: 文章标题\n\n正文... }, images: [ {url: https://mmbiz.qpic.cn/..., size_bytes: 45000} ] } }meta文章元信息。publish_time为带时区的 ISO 8601 字符串入库前建议统一转成 UTC 或固定时区。read_num、like_num可能为null展示层要留空处理。content正文内容。formatboth时同时含markdown与text只取其中一种时另一个键可能不存在读取要带默认值。images正文图片数组每项有url与size_bytes。图片托管在第三方域名长期归档建议自行转存。常见错误与排查现象可能原因排查方式HTTP 401未带 Token 或密钥无效检查Authorization头与环境变量code非 0链接不是公众号文章、文章已删除或格式不匹配换一条已知可访问的链接验证链路响应等待较久后失败抓取超过timeout适当调大timeout同时调整本地超时限流或 429超过 1 req/s串行调用批量任务加间隔与退避images为空文章本身无图属于正常结果按空数组处理链接格式是排查第一优先级先确认url指向的是公众号文章详情页再考虑参数与鉴权问题。工程化注意事项串行化批量任务QPS 为 1 req/s批量转存请用单线程队列加固定间隔或按令牌桶限流避免并发触发限流。错误分级重试网络超时与 5xx 可做有限次退避重试4xx 与链接无效类错误直接标记失败不要重试。幂等与去重以文章链接或meta.title publish_time作为去重键重复请求前先查本地记录。图片落地images只给地址落库时应保存原始url与本地路径映射便于后续替换失效链接。字符编码正文可能是长文本写文件时显式指定utf-8避免平台差异导致乱码。可追溯日志中记录request_id与目标链接便于和接口侧对齐问题。参考文档文档页https://apizero.cn/aidocs/wechat-archive原始文档https://apizero.cn/aidocs/wechat-archive/raw.md