微信公众号 → 精美 DOCX 导出技能 (sqsmile 定制版)
触发条件
当用户提及以下请求时触发此技能:
- "把这篇公众号文章导出为 Word / DOCX"
- "保存微信文章,要带图片"
- "帮我导出这几篇公众号文章"
- 提供
mp.weixin.qq.com链接并要求下载/导出/保存 - 任何包含微信公众号文章链接且要求转为文档的请求
触发示例:
- "导出这篇文章 https://mp.weixin.qq.com/s/xxx"
- "把这几篇公众号文章保存为带图片的 Word 文档"
- "帮我下载这篇微信文章,做成 DOCX"
能力概述
此技能将整个工作流封装为一个脚本,一步到位:
微信公众号 URL
│
▼
抓取 HTML → 解析正文 + 提取元数据
│
▼
下载文章中所有图片(本地缓存)
│
▼
解析正文结构(标题 / 段落 / 图片 / 代码块 / 引用 / 列表)
│
▼
生成 DOCX(图片内嵌 + 代码块格式化 + 自动标题编号 + 统一样式)
│
▼
含页眉(文章标题)+ 页脚(页码)
统一字体微软雅黑 / 1.5 倍行距 / 首行缩进
Consolas 代码块 / 浅灰背景 / 左边框
自动标题编号
| 层级 | 格式 | 示例 |
|---|---|---|
| 一级标题 (H1) | 一、二、三、 | 一、 引言 |
| 二级标题 (H2) | {chap}.{sec}、 | 2.1、 研究背景 |
| 三级标题 (H3) | {chap}.{sec}.{sub}、 | 2.1.1、 相关工作 |
- 原文已带中国数字编号(一、二、三)→ 保留原文,仅更新内部计数器
- 原文已带阿拉伯编号(1. 2.)→ 保留原文,不重复添加
- 无编号原文 → 自动按层级添加编号
脚本位置
- 基础目录:
~/.workbuddy/skills/wechat-to-docx-sqsmile/ - 主脚本:
scripts/wechat_to_docx.py
依赖项
| 包名 | 用途 |
|---|---|
| requests | HTTP 请求获取文章 |
| beautifulsoup4 + lxml | HTML 解析 |
| python-docx | 生成格式化 DOCX |
安装命令:
pip install requests beautifulsoup4 lxml python-docx
执行步骤
步骤 1:提取 URL
从用户请求中提取所有 mp.weixin.qq.com 链接。有效格式:
- https://mp.weixin.qq.com/s/xxx
- http://mp.weixin.qq.com/s/xxx
步骤 2:确定输出目录
- 默认:当前工作目录
- 规则:用户指定的任意目录(优先使用工作空间内文件夹)
步骤 3:运行导出脚本
# 单个链接
python3 ~/.workbuddy/skills/wechat-to-docx-sqsmile/scripts/wechat_to_docx.py \
"https://mp.weixin.qq.com/s/xxx" \
--output "/path/to/output"
# 多个链接
python3 ~/.workbuddy/skills/wechat-to-docx-sqsmile/scripts/wechat_to_docx.py \
"https://mp.weixin.qq.com/s/xxx" \
"https://mp.weixin.qq.com/s/yyy" \
--output "/path/to/output"
步骤 4:报告结果
向用户报告:
- 成功导出的文章标题与文件路径
- 每篇文章包含的图片数量
- 任何失败的链接及原因
- 最终文件列表
DOCX 输出规格
| 项目 | 规格 |
|---|---|
| 页面 | A4,2.54cm 等距页边距 |
| 正文字体 | 微软雅黑 11pt,#333 |
| 标题 1 | 微软雅黑 18pt 粗体,#1A1A1A,编号 一、二、三 |
| 标题 2 | 微软雅黑 14pt 粗体,#2C2C2C,编号 2.1、2.2 |
| 标题 3 | 微软雅黑 13pt 粗体,#444444,编号 2.1.1、2.1.2 |
| 行距 | 正文 1.5 倍,标题 1.25 倍 |
| 首行缩进 | 正文 0.74cm |
| 图片 | 嵌入正文,居中,宽度 5.2 英寸 |
| 代码块 | Consolas 9pt,#333333,浅灰背景 #F5F5F5,左边框 |
| 页眉 | 文章标题(居中,灰色小字) |
| 页脚 | 自动页码("第 X 页") |
| 引用 | 微软雅黑 10pt,#666,左缩进 |
文件命名
格式:{文章标题}.docx
特殊字符 \ / : * ? " < > | 会自动替换为下划线,标题过长时会截断。
图片处理
- 图片下载到输出目录下的
.images/缓存目录 - 按
a1_0.jpg,a1_1.png命名,按文章内顺序排列 - 已缓存的图片不会重复下载
常见问题与限制
| 问题 | 原因 | 解决方案 |
|---|---|---|
| "未找到文章正文" | 文章需登录或已删除 | 先在浏览器中验证链接 |
| 连接超时 | 网络问题或微信限流 | 等待后重试 |
| 图片下载失败 | 链接过期或防盗链 | 不影响文档生成,图片位置留空 |
| 图片在 Word 中显示过大/过小 | 原图分辨率差异 | 默认统一宽度 5.2 英寸,可调整 |
输出格式(供 AI 解析)
使用 --list 参数时,脚本输出 JSON 格式结果:
[
{
"url": "https://mp.weixin.qq.com/s/xxx",
"title": "文章标题",
"docx": "/path/to/文章标题.docx",
"images": 5,
"status": "ok"
}
]