Install
openclaw skills install zsxq-post-fetch知识星球帖子抓取助手 — 自动抓取指定星球的最新帖子,支持全部/仅精华两种筛选模式,支持通过帖子链接或 ID 获取单条帖子详情,支持多星球配置,支持图片和文件附件自动下载到可配置目录。本 Skill 应在用户需要查看、汇总或检索知识星球内容时使用。
openclaw skills install zsxq-post-fetch从指定知识星球抓取最新帖子内容,支持全部帖子与仅精华两种筛选模式,支持通过帖子链接或 ID 查看单条帖子详情,支持多星球配置管理,支持图片和文件附件自动下载到指定目录。所有输出使用中文。
export ZSXQ_TOKEN="你的token值"
执行前必须检查 $ZSXQ_TOKEN 是否已设置。
未设置时提示:
请先设置知识星球 Token:
export ZSXQ_TOKEN="your_token"获取方式:浏览器打开 wx.zsxq.com → 登录 → F12 → Application → Cookies → 复制zsxq_access_token的值。
无第三方依赖,仅需 Node.js >= 18。首次使用运行一次即可:
bash {baseDir}/install.sh
{baseDir}/config.json — 附件下载配置(新增){
"attachment_dir": "~/.openclaw/workspace/zsxq",
"download_attachments": true
}
字段说明:
attachment_dir:附件与 Markdown 保存根目录(附件按 group_id/YYYY-MM-DD/ 自动组织子目录)download_attachments:是否开启自动下载(true | false)也可通过环境变量覆盖附件与 Markdown 保存根目录:
export ZSXQ_ATTACHMENT_DIR="~/.openclaw/workspace/zsxq"
优先级:ZSXQ_ATTACHMENT_DIR → ATTACHMENT_DIR → config.json 的 attachment_dir。
{baseDir}/groups.json — 多星球配置[
{
"group_id": "YOUR_GROUP_ID",
"name": "星球名称",
"scope": "digests",
"max_topics": 20
}
]
字段说明:
group_id:从星球 URL wx.zsxq.com/group/{group_id} 获取name:星球名称(展示用)scope:digests(仅精华)| all(全部),推荐 digestsmax_topics:每个星球最多抓取的帖子数当用户的请求与知识星球内容获取、汇总、检索、导出或附件下载有关时使用本 Skill。默认假设用户希望读取其 ZSXQ_TOKEN 对应账号有权限访问的内容,不要尝试绕过权限、猜测 token、读取仓库中的凭证文件或输出完整认证信息。
groups.json,按每个星球的 scope 和 max_topics 抓取并汇总。digests 或 scope=digests。topics <group_id> <count> all。wx.zsxq.com/topic/... 链接或纯 topic_id:使用 topic <group_id> <topic_id_or_url> 查询单条帖子;如果缺少 group_id,先从 groups.json 查找,仍无法确定时询问用户。YYYY-MM-DD 后使用 topics-by-date;相对日期要按当前环境日期解释。--markdown,并说明保存路径。groups 子命令,但要提醒该操作会暴露当前账号加入的星球列表。用户可以这样提问:
帮我汇总知识星球最近 20 条精华帖,按星球分组。
抓取 YOUR_GROUP_ID 从 2026-06-01 到 2026-06-13 的帖子,导出 Markdown 并下载附件。
查看这个帖子详情:https://wx.zsxq.com/topic/82811454228448260
列出我当前账号加入的知识星球,帮我找到对应 group_id。
all/digests、数量、日期范围、是否导出 Markdown。ZSXQ_TOKEN、Cookie、临时下载签名 URL 或其他认证材料。{baseDir}/fetch_topics.js提供四个子命令:
node {baseDir}/fetch_topics.js topics <group_id> [count] [scope]
group_id:星球 IDcount:帖子数,默认 500scope:all(全部)| digests(精华),默认 allconfig.json 中 download_attachments 为 true,自动下载帖子中的图片和文件附件--markdown 时导出 Markdown,按日期保存到 <attachment_dir>/<group_id>/<YYYY-MM-DD>.md输出格式(stdout):
{
"group_id": "123456",
"scope": "digests",
"count": 5,
"topics": [
{
"topic_id": "789",
"type": "talk",
"title": "",
"text": "帖子内容...",
"create_time": "2026-03-01T10:30:00.000+0800",
"owner": { "user_id": "111", "name": "作者" },
"likes_count": 10,
"comments_count": 5,
"reading_count": 200,
"readers_count": 180,
"digested": true,
"image_count": 2,
"file_count": 1,
"images": [
{
"image_id": "xxx",
"type": "jpg",
"large": { "url": "https://...", "width": 1200, "height": 800 },
"thumbnail": { "url": "https://..." }
}
],
"files": [
{
"file_id": "xxx",
"name": "report.pdf",
"size": 1024000,
"url": "https://..."
}
],
"attachments_local": [
{
"type": "image",
"filename": "789_image_1.jpg",
"path": "/Users/.../zsxq-attachments/123456/2026-03-01/789_image_1.jpg",
"size": 125000
}
]
}
]
}
node {baseDir}/fetch_topics.js digests <group_id> [count]
等价于 topics <group_id> [count] digests。
加 --markdown 时同样导出 Markdown。
node {baseDir}/fetch_topics.js topic <group_id> <topic_id_or_url>
支持两种输入形式:
node fetch_topics.js topic YOUR_GROUP_ID 82811454228448260node fetch_topics.js topic YOUR_GROUP_ID https://wx.zsxq.com/topic/82811454228448260通过翻页帖子列表匹配目标 topic_id,最多搜索最近 300 条,文本截断上限 5000 字。
加 --markdown 时导出到该帖发布时间对应的日期 Markdown 文件。
node {baseDir}/fetch_topics.js topics-by-date <group_id> <start_date> [end_date] [count]
start_date:开始日期,YYYY-MM-DDend_date:结束日期,YYYY-MM-DD(可选,默认今天)count:最多抓取数量(可选,默认不限制)start_date 的帖子自动停止翻页config.json 中 download_attachments 为 true)--markdown 时按帖子日期切分成多个 Markdown 文件示例:
# 抓取 2026-06-01 到 2026-06-13 的所有帖子
node fetch_topics.js topics-by-date YOUR_GROUP_ID 2026-06-01 2026-06-13
# 只抓取 2026-06-01 当天的帖子(最多 50 条)
node fetch_topics.js topics-by-date YOUR_GROUP_ID 2026-06-01 2026-06-01 50
# 抓取并导出 Markdown
node fetch_topics.js topics-by-date YOUR_GROUP_ID 2026-06-01 2026-06-13 50 --markdown
输出格式:
{
"group_id": "YOUR_GROUP_ID",
"date_range": { "start": "2026-06-01", "end": "2026-06-13" },
"count": 15,
"topics": [ ... ]
}
node {baseDir}/fetch_topics.js groups
返回当前账号已加入的所有星球信息(group_id、名称、成员数、帖子数等)。
attachment_dir/group_id/YYYY-MM-DD/ 目录结构存放topic_id 前缀,例如 789_image_1.jpg、789_report.pdf,避免同一天不同帖子附件重名download_url/url;若只有 file_id,先请求 /v2/files/{file_id}/download_url 获取临时签名链接后再下载attachments_local 的 error 字段config.json 或 download_attachments 为 false 时,不下载附件,保持 v1.0.0 兼容行为--markdown 显式开启,默认仍输出 JSON 到 stdout<attachment_dir>/<group_id>/<YYYY-MM-DD>.md 相对路径引用[filename](YYYY-MM-DD/filename) 相对路径引用markdown_paths 字段,列出本次写入的 Markdown 文件步骤 1:检查环境
$ZSXQ_TOKEN 已设置{baseDir}/config.json(附件下载配置){baseDir}/groups.json(星球配置)步骤 2:抓取帖子
对 groups.json 中每个星球,按配置的 scope 和 max_topics 执行:
node {baseDir}/fetch_topics.js topics <group_id> <max_topics> <scope>
多个星球依次抓取,间隔 1.5 秒。
步骤 3:输出摘要
按星球分组,每条帖子输出:
https://wx.zsxq.com/topic/{topic_id}当用户提供帖子链接或 ID 时,直接执行:
node {baseDir}/fetch_topics.js topic <group_id> <topic_id_or_url>
输出帖子完整内容,包括作者、时间、正文、互动数据、附件列表及本地保存路径。
当用户不确定 group_id 时,执行:
ZSXQ_TOKEN=xxx node {baseDir}/fetch_topics.js groups
列出账号已加入的所有星球供用户选择。
| 错误场景 | 检测方式 | 处理 |
|---|---|---|
| Token 未设置 | $ZSXQ_TOKEN 为空 | 提示用户设置并说明获取方法 |
| Token 过期 | HTTP 401 | 提示重新获取 token |
| 未加入星球 | HTTP 403 | 提示用户需先加入该星球 |
| API 限流 | HTTP 429 | 自动重试(指数退避 2s/4s/8s) |
| 非官方客户端风控 | API 错误码 1059 | 脚本已携带浏览器化请求头;若仍触发,提示可能需要真实浏览器上下文(如 Playwright)请求 |
| 星球不存在 | API 返回 succeeded=false | 跳过该星球,报告中标注 |
| 帖子不存在 | API 返回 succeeded=false | 返回 topic_not_found 错误 |
| 附件下载失败 | 文件写入/网络错误 | 记录到 attachments_local.error 字段,不中断主流程 |
原则:部分失败不中断整体流程。 单个星球失败或附件下载失败仍处理其他星球/帖子。
API 和附件下载请求统一使用接近 Chrome 浏览器的请求头,包括 sec-ch-ua、Sec-Fetch-*、Accept-Language、Origin、Referer、动态 X-Timestamp、X-Request-Id 等。
这不能保证完全消除 1059。若知识星球继续返回非官方客户端风控错误,说明服务端可能还检查浏览器/TLS 指纹或网页端动态参数,应升级为真实浏览器上下文请求方案。
如需了解 API 完整参数、响应结构、错误码等,参阅 {baseDir}/references/api-reference.md。