# wechat2md **Repository Path**: biwei_nb/wechat2md ## Basic Information - **Project Name**: wechat2md - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-21 - **Last Updated**: 2026-01-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # wechat2md 将微信公众号文章转换为 Markdown 的命令行工具,支持图片本地化下载,实现完整离线保存。 ## ✨ 特性 - 🔄 **完整转换**:提取文章标题、作者、发布时间和正文内容 - 📸 **图片本地化**:可选下载所有图片到本地 `assets/` 目录 - 🖥️ **双模式操作**:支持命令行和图形界面两种使用方式 - 🛡️ **智能容错**:图片下载失败时自动回退到远程链接 - 🚫 **反爬检测**:识别访问限制并友好提示 - 📁 **灵活输出**:支持自定义文件名和输出路径 ## 🚀 快速开始 ### 安装 ```bash # 克隆仓库 git clone https://github.com/your-username/wechat2md.git cd wechat2md # 安装依赖并构建 go mod tidy go build -o wechat2md ``` ### 使用方法 #### GUI 模式(推荐) ```bash # 无参数启动图形界面 ./wechat2md ``` #### 命令行模式 ```bash # 基础转换(图片保持远程链接) ./wechat2md https://mp.weixin.qq.com/s/xxxx # 下载图片到本地(推荐) ./wechat2md -d https://mp.weixin.qq.com/s/xxxx ./wechat2md --download https://mp.weixin.qq.com/s/xxxx # 指定输出文件名 ./wechat2md -d -o "我的文章.md" https://mp.weixin.qq.com/s/xxxx ``` ## 📁 输出结构 ``` ./ ├── 我的文章.md # 转换后的 Markdown 文件 └── assets/ # 图片资源目录 └── 我的文章/ # 以文章名命名的子目录 ├── a1b2c3d4.jpg # 图片文件(MD5 命名) ├── e5f6g7h8.png └── ... ``` ## 🎨 GUI 字体配置 GUI 使用 Fyne 框架,支持中文显示: - **自动检测**:程序会自动尝试加载 `fonts/` 或 `assets/fonts/` 目录下的字体 - **环境变量**: ```bash WECHAT2MD_FONT=/path/to/NotoSansSC-Regular.otf ./wechat2md # 或 FYNE_FONT=/path/to/your-font.ttf ./wechat2md ``` - **支持格式**:`.ttf` 和 `.otf` 字体文件 ## 🔧 技术实现 ### 项目结构 ``` wechat2md/ ├── cmd/ # CLI 入口和参数解析 ├── gui/ # GUI 界面实现 ├── internal/ # 核心业务逻辑 │ ├── app/ # 应用程序协调层 │ ├── fetcher/ # HTTP 请求和重试机制 │ ├── parser/ # HTML 解析和内容提取 │ ├── converter/ # Markdown 转换核心 │ ├── downloader/ # 图片下载器 │ └── utils/ # 工具函数 ├── docs/ # 文档和实现日志 └── main.go # 程序入口 ``` ### 核心特性 - **智能解析**:使用 `goquery` 精确提取微信公众号文章结构 - **并发下载**:支持多线程图片下载,提升处理速度 - **格式识别**:通过 HTTP `Content-Type` 头识别图片格式 - **文件命名**:使用 MD5 哈希避免文件名冲突 - **错误处理**:完善的错误处理和日志记录机制 ## ⚠️ 注意事项 - 图片文件扩展名通过 HTTP 响应头 `Content-Type` 自动识别 - 遇到"访问过于频繁"或验证码页面时会自动停止并提示 - 单个图片下载失败不会影响整体转换流程 - 日志输出使用标准库 `log`,支持 INFO/WARN/ERROR 分级 ## 🤝 贡献 欢迎提交 Issue 和 Pull Request! ## 📄 许可证 MIT License