公众号文章抓取

作者:鹿Sir内容创作v1

按公众号名称和日期范围抓取微信公众号文章,转换为本地 Markdown 文件并下载图片,抓取后记录所有文件路径供后续总结问答。当用户需要抓取公众号、获取公众号文章、下载微信文章、保存公众号内容或按名称和日期范围获取某个号的文章时触发。触发词:抓取公众号、公众号文章、微信文章下载、公众号内容保存。

下载量
389
点赞
94
价格
免费

技能文档

---
name: wxpublic-fetch
title: 公众号文章抓取
category: 内容创作
description: 按公众号名称和日期范围抓取微信公众号文章,转换为本地 Markdown 文件并下载图片,抓取后记录所有文件路径供后续总结问答。当用户需要抓取公众号、获取公众号文章、下载微信文章、保存公众号内容或按名称和日期范围获取某个号的文章时触发。触发词:抓取公众号、公众号文章、微信文章下载、公众号内容保存。
---

# 微信公众号文章抓取(wxpublic-fetch)

从微信公众号抓取指定时间范围内的文章,转换为 Markdown 并下载图片到本地,输出带日期索引的文件清单,方便后续直接对文章内容提问总结。

## 使用示例

```text
抓取公众号「拆神」最近 7 天的文章
抓取公众号「拆神」2026-04-01 到 2026-04-21 的文章,保存到 ~/articles
```

## 技能工作流

### 步骤1:解析参数

从用户输入中提取:

- `name`(必填):公众号名称
- `startDate`(可选):格式 `yyyy-MM-dd`,默认为今天往前 7 天
- `endDate`(可选):格式 `yyyy-MM-dd`,默认为今天
- `--output <dir>`(可选):文章保存目录,默认为 `~/wxpublic_articles/<name>`
- `--app-id <AppID>`(可选):平台 AppID,未提供时读取环境变量 `WXPUBLIC_APP_ID`
- `--secret <SecureKey>`(可选):平台 SecureKey,未提供时读取环境变量 `WXPUBLIC_SECURE_KEY`

缺少公众号名称时告知正确用法并停止。`app_id` 与 `secure_key` 均为空(参数和环境变量都未设置)时,向用户说明可通过参数或环境变量提供;尚未拥有凭证的,请前往 https://wxpub.aibana.art 注册并生成,然后停止等待用户提供。

今天的日期从系统获取:

```bash
date +%Y-%m-%d
```

计算起止日期天数差:

```bash
python3 -c "from datetime import date; print((date.fromisoformat('<endDate>') - date.fromisoformat('<startDate>')).days)"
```

如果天数差 **大于 60 天**(约 2 个月),**必须先向用户发出提示并等待确认,不得自动继续**:

> ⚠️ 您查询的时间跨度为 **X 天**(`<startDate>` ~ `<endDate>`),超过 2 个月,可能涉及大量分页请求,**产生较高费用**。是否继续?

用户肯定回复则继续,否定回复则停止并告知已取消。

### 步骤2:获取文章 URL 列表

```bash
python3 "<scripts_dir>/wxpublic_list.py" "<app_id>" "<secure_key>" "<name>" "<startDate>" "<endDate>"
```

`<scripts_dir>` 为本技能 `scripts/` 目录的绝对路径。脚本以 JSON 输出到 stdout:

```json
{
  "urls": ["https://mp.weixin.qq.com/s/...", ...],
  "date": ["2026-08-04", ...],
  "count": 3
}
```

`date` 中每一项是对应文章的发布时间(`yyyy-MM-dd`),与 `urls` 按相同下标一一对应。

解析 stdout 中的 JSON:

- 包含 `"error"` 字段且值为 `"Insufficient balance"`:提示用户「账户余额不足,请前往凭证所在平台充值后重试」,然后停止
- 其他错误:向用户报告错误详情并停止
- `count` 为 0:告知用户该时间范围内没有找到文章并停止
- 正常:告知用户找到几篇文章,即将开始处理

### 步骤3:准备保存目录

```bash
mkdir -p "<output_dir>/images"
```

### 步骤4:并行抓取所有文章的 Markdown

先将步骤2 返回的 `urls` 与 `date` 按下标绑定为清单,写入 `<output_dir>/.wxpublic-articles.json`:

```json
[
  {"index": 0, "url": "https://mp.weixin.qq.com/s/...", "date": "2026-08-04"}
]
```

不得只传 URL 后再按并发完成顺序对应日期;每个清单项的 `date` 必须来自同下标的 `date[index]`。

```bash
python3 "<scripts_dir>/wxpublic_fetch.py" "<output_dir>" --manifest "<output_dir>/.wxpublic-articles.json"
```

- 转换并发 **5** 线程,图片下载并发 **8** 线程
- 每篇文章转换失败时自动重试 **1 次**;第二次仍失败才记录为失败
- 从输出中解析 `RESULT:<json>`。每条结果包含 `index`、`url`、`date`、`ok`、`path` 和 `error`;用 `ok=true` 且 `path` 非空的记录收集成功路径并保留其 `date`;对 `ok=false` 使用同一条记录的 `url` 和 `error`

### 步骤5:汇总报告

所有文章处理完毕后,输出汇总:

```
✓ 已保存 N 篇文章到 <output_dir>

保存的文件:
1. 2026-08-04 | /path/to/article1.md
2. 2026-08-03 | /path/to/article2.md
...

(如有跳过)以下文章处理失败:
- https://mp.weixin.qq.com/s/... (原因)
```

**重要**:将所有成功记录的 `.md` 文件路径与 `date`、`url` 一起存入对话上下文,便于用户后续直接问「帮我总结这些文章」或「这些文章讲了什么」时,能直接读取对应文件内容作答。

## 注意事项

- 微信图片 URL(`mmbiz.qpic.cn`)有防盗链,下载时加上 `-L` 跟随重定向,如果失败则保留原始 URL
- 文件名中不能含有 `/ \ : * ? " < > |` 等字符
- 如果公众号名称包含特殊字符,在 JSON 请求体中正确转义
- 图片文件夹 `images/` 统一放在文章保存目录下,所有文章共享该目录(避免重复下载相同图片)

使用说明

# 公众号文章抓取

按公众号名称和日期范围抓取微信公众号文章,自动转换为本地 Markdown 并下载图片,输出带日期索引的文件清单,抓取结果可直接用于总结与问答。

## 使用

```text
抓取公众号「拆神」最近 7 天的文章
抓取公众号「某公众号」2026-04-01 到 2026-04-21 的文章,保存到 ~/articles
```

需要平台凭证:通过 `--app-id` / `--secret` 参数或环境变量 `WXPUBLIC_APP_ID` / `WXPUBLIC_SECURE_KEY` 提供;尚未拥有的前往 https://wxpub.aibana.art 注册生成(有免费额度,超过 60 天的大范围查询会先确认费用)。

## 工作原理

先调用文章列表接口按名称与时间范围取得文章 URL 与发布日期,再以 5 线程并发转换 Markdown、8 线程并发下载图片(微信图片带防盗链,自动跟随重定向),单篇失败自动重试一次,最后输出「日期 + 文件路径」汇总清单并存入上下文供后续问答。

如何安装此技能?

访问技能市场,点击「安装」按钮,按提示将技能包放入 AI 编程助手的 skills 目录即可。

浏览技能市场

支持平台:Qoder · QoderWork · Claude · Codex 等 AI 编程助手