![GitHub Repo stars](https://img.shields.io/github/stars/PhiFever/AfdianToMarkdown) ![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/PhiFever/AfdianToMarkdown/total) ## AfdianToMarkdown 爱发电(afdian.com)爬虫,用于下载爱发电作者的动态、作品集和电铺商品并保存为markdown文件 **!!!该软件不能直接帮你免费爬取订阅后才能查看的内容!!!** ### 准备 使用浏览器插件[cookie master](https://chromewebstore.google.com/detail/cookie-master/jahkihogapggenanjnlfdcbgmldngnfl)导出爱发电cookie,如下图所示点击`copy` ![image](https://github.com/user-attachments/assets/d27b0f59-95c0-4080-97b9-d544d5424a33) 将复制到的json文本粘贴进与在RELEASE中下载的可执行文件同级(或git clone的项目根目录)的`cookies.json`即可。 ![image](https://github.com/user-attachments/assets/3c9a4a26-fa94-4c38-a69d-359a536446b1) **注意主站域名可能需要手动指定(默认为afdian.com)** ### 全局参数 | 参数 | 说明 | 默认值 | |------|------|--------| | `--host` | 主站域名,如访问不通可自行更改 | `afdian.com` | | `--dir` | 数据存储目录 | 程序所在目录下的 `data` 文件夹 | | `--cookie` | cookies.json 文件路径 | 程序所在目录下的 `cookies.json` | | `--disable_comment` | 为 true 时不下载评论 | `false` | | `--debug` | 启用调试日志 | `false` | | `--download_media` | 下载post中的音视频资源 | `false` | | `--skip_failed` | 下载post失败后是否跳过,为false时退出 | `false` | ### 构建 如果你不需要对源码进行开发,请跳至下一节。 go version>=1.25.5 - go build ### 帮助 ``` $ .\AfdianToMarkdown.exe -h ``` ### 使用 本程序为命令行程序,需要在`cmd`,`powershell`或`bash`等shell中输入参数调用刚才构建的(或在release中下载的)可执行程序 - 在win11上,直接在已下载的可执行程序目录下右键,点击`open in terminal`或`在终端中打开` ![image](https://github.com/user-attachments/assets/94013988-2579-4fe2-a4b2-5245ad4501da) - 在win10上,情况稍微复杂 1. win+r,输入`powershell` 2. 找到可执行文件所在的路径(如`D:\MyProject\Golang\AfdianToMarkdown\AfdianToMarkdown.exe`) 输入`cd D:\MyProject\Golang\AfdianToMarkdown` 后续所有的指令都将在命令行中执行。在windows平台上进行调用时,有如下示例(即`AfdianToMarkdown.exe -h`): 注:下文提到的`user_id`为作者主页url的最后一部分,如`https://afdian.com/a/user_id/` #### 下载作者的所有动态 ```shell .\AfdianToMarkdown.exe motions --host="ifdian.net" -au "user_id" ``` #### 下载作者所有的作品集 ```shell .\AfdianToMarkdown.exe albums -au "user_id" ``` #### 下载作者电铺的所有商品 下载作者电铺中的商品信息。支持通过标签(Tag)进行筛选 | 标签 (Tag) | 说明 | |------------|------| | (不写) | 默认排序 (全部商品) | | `new` | 最新商品| | `vip_price` | 会员价 (作者不一定有) | | `time_limit_price` | 限时特价 (作者不一定有) | | `(UUID)` | 作者自定义分类的 ID (随机生成的 UUID) | ```shell # 下载所有商品 .\AfdianToMarkdown.exe shop -au "user_id" # 按标签筛选下载 (可选值如上) .\AfdianToMarkdown.exe shop -au "user_id" --tag "new" # 按自定义分类下载 (需从浏览器控制台获取对应的 tag_id) .\AfdianToMarkdown.exe shop -au "user_id" --tag "UUID" ``` #### 更新所有已经下载的作者的动态、作品集和电铺 1. 需要对应的作者目录下至少下载过`motions`、`albums`或者`shop`中的一组,会完全比对已下载的组中所有的post并下载缺失的post。对于已经下载的部分,如果标题或内容发生了变化则不会更新 2. 电铺商品会根据标签进行分类存储:默认商品存放在 `shop/default/` 目录下;如果指定了标签,则存放在 `shop/{tag_id}/` 目录下。 3. 不会覆盖已经下载的文件,所以也不会更新评论。可以通过删除文件来强制更新 ```shell .\AfdianToMarkdown.exe --host="ifdian.net" update ``` **快速更新** 使用 `--quick` 参数,遇到已存在的文件时跳过剩余分页,适合日常增量更新: ```shell .\AfdianToMarkdown.exe update --quick ``` **指定电铺更新标签** 更新电铺商品时,默认更新全量商品列表。你也可以指定特定标签进行批量更新: ```shell .\AfdianToMarkdown.exe update --tag "new" ``` #### 下载任意作者的单个作品集 ```shell .\AfdianToMarkdown.exe album -u https://afdian.com/album/aaa ``` #### 下载视频与音频 在使用motions、albums和album时,使用download_media参数启用下载音视频功能 ```shell .\AfdianToMarkdown.exe album -u https://afdian.com/album/aaa --download_media ``` ### MCP Server 模式 本程序支持作为 [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) 服务器运行,让 AI 助手(如 Claude Desktop)直接检索已下载的文档。 MCP 模式不需要 cookies.json,仅对本地已下载的数据提供只读查询服务。 #### 提供的工具 | 工具 | 说明 | |------|------| | `list_authors` | 列出所有已下载的作者 | | `list_posts` | 列出指定作者的所有文章(动态和作品集) | | `read_post` | 读取指定文章的完整 Markdown 内容 | | `search` | 在已下载文档中全文搜索关键词 | #### stdio 模式(本地使用) 适用于 Claude Desktop 等本地 MCP 客户端: ```shell .\AfdianToMarkdown.exe mcp ``` 使用 Claude Code 添加: ```shell claude mcp add --transport stdio afdian -- /path/to/AfdianToMarkdown --dir /path/to/data mcp ``` 或在 Claude Desktop 的 `claude_desktop_config.json` 中手动配置: ```json { "mcpServers": { "afdian": { "command": "/path/to/AfdianToMarkdown", "args": ["--dir", "/path/to/data", "mcp"] } } } ``` #### HTTP 模式(远程/NAS 部署) 适用于在 NAS 或服务器上长期运行,为远程 MCP 客户端提供服务: ```shell # 默认监听 0.0.0.0:8080 .\AfdianToMarkdown.exe mcp --http # 指定监听地址和端口 .\AfdianToMarkdown.exe mcp --http --addr 127.0.0.1:9090 ``` MCP 子命令参数: | 参数 | 说明 | 默认值 | |------|------|--------| | `--http` | 以 HTTP Streamable 模式启动 | `false`(默认 stdio) | | `--addr` | HTTP 监听地址(格式: `host:port`) | `0.0.0.0:8080` | 使用 Claude Code 添加远程服务器: ```shell claude mcp add --transport http afdian http://:8080/mcp ``` 或在 MCP 客户端配置文件中手动配置: ```json { "mcpServers": { "afdian": { "url": "http://:8080/mcp" } } } ``` #### NAS 部署示例 配合 cron 定时更新内容,并通过 systemd 管理 MCP 服务: ```ini # /etc/systemd/system/afdian-mcp.service [Unit] Description=AfdianToMarkdown MCP Server After=network.target [Service] ExecStart=/path/to/AfdianToMarkdown --dir /path/to/data mcp --http Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target ``` cron 更新任务示例(每天凌晨 3 点更新,然后重启服务): ``` 0 3 * * * /path/to/AfdianToMarkdown --dir /path/to/data --cookie /path/to/cookies.json update && systemctl restart afdian-mcp ``` ### 更新日志 #### v1.3.0 支持音视频资源下载,使用`--download_media `参数以启用 #### v1.2.0 1. **新增电铺(Shop)下载支持**:支持按作者抓取电铺中的商品信息,并保存为 Markdown 2. **支持商品标签筛选**:可以通过 `--tag` 参数筛选"最新"、"限时特价"、"会员价"或指定分类 3. **电铺图片备份**:自动下载商品的封面图片并保存到本地 4. **update 命令增强**:批量更新现在也涵盖了电铺商品 #### v1.1.0 添加mcp server模式以提供ai知识库服务 #### v1.0.0 **Breaking Change:本版本的数据目录结构和文件命名格式与旧版不兼容,无法与之前保存的数据互通,需要重新下载。** 1. 数据目录独立:新增 --dir 和 --cookie 参数,数据存储目录和 cookie 路径可分别指定,数据统一存储在 data/ 目录下 2. 文件命名改进:文件名格式改为 {yyyy-mm-dd_hh_mm_ss}_{标题}.md,避免作者删帖导致序号错位和重复下载 3. 流式下载:列表 API 返回一页后立即下载该页文章,不再等待收集完整列表 4. 快速更新:update 子命令添加 --quick 参数,遇到已存在文件时跳过剩余分页,适合日常增量更新 5. 新增 --debug 全局参数,启用调试日志 #### v0.5.0 1. 添加了下载任意作者的单个作品集的功能 2. 添加在下载时不下载评论区的控制参数 #### v0.4.0 增加了对于含图片作品集的支持 #### v0.3.0 1. 修改默认域名为`afdian.com` 2. 将寻找`cookies.json`的逻辑修改为在程序目录下而非工作目录下 3. 修复了对域名`ifdian.net`解析不正确的问题 #### v0.2.2 缩短了等待时间,加快下载效率 #### v0.2.1 添加了对update指令的支持,修复了Refer中url不正确的问题 #### v0.2 由于主站(afdian.net)在7月15日被屏蔽,添加了对于手动更改临时域名(如afdian.com)的支持