Skip to content

PhiFever/AfdianToMarkdown

Repository files navigation

GitHub Repo stars GitHub Downloads (all assets, all releases)

AfdianToMarkdown

爱发电(afdian.com)爬虫,用于下载爱发电作者的动态和作品集并保存为markdown文件。

!!!该软件不能直接帮你免费爬取订阅后才能查看的内容!!!

准备

使用浏览器插件cookie master导出爱发电cookie,如下图所示点击copy

image

将复制到的json文本粘贴进与在RELEASE中下载的可执行文件同级(或git clone的项目根目录)的cookies.json即可。

image

注意主站域名可能需要手动指定(默认为afdian.com)

全局参数

参数 说明 默认值
--host 主站域名,如访问不通可自行更改 afdian.com
--dir 数据存储目录 程序所在目录下的 data 文件夹
--cookie cookies.json 文件路径 程序所在目录下的 cookies.json
--disable_comment 为 true 时不下载评论 false
--debug 启用调试日志 false

构建

如果你不需要对源码进行开发,请跳至下一节。

  • go build

帮助

$ .\AfdianToMarkdown.exe -h

使用

本程序为命令行程序,需要在cmd,powershellbash等shell中输入参数调用刚才构建的(或在release中下载的)可执行程序

  • 在win11上,直接在已下载的可执行程序目录下右键,点击open in terminal在终端中打开

    image

  • 在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/

下载作者的所有动态

.\AfdianToMarkdown.exe motions --host="ifdian.net" -au "user_id" 

下载作者所有的作品集

.\AfdianToMarkdown.exe albums -au "user_id" 

更新所有已经下载的作者的动态和作品集

  1. 需要对应的作者目录下具有motions目录,会完全比对所有已发布的动态和作品集,下载缺失的部分。对于已经下载的部分,如果标题或内容发生了变化则不会更新。
  2. 不会覆盖已经下载的文件,所以也不会更新评论。可以通过删除文件来强制更新
.\AfdianToMarkdown.exe --host="ifdian.net" update

快速更新

使用 --quick 参数,遇到已存在的文件时跳过剩余分页,适合日常增量更新:

.\AfdianToMarkdown.exe update --quick

下载任意作者的单个作品集

.\AfdianToMarkdown.exe album -u https://afdian.com/album/aaa

MCP Server 模式

本程序支持作为 MCP (Model Context Protocol) 服务器运行,让 AI 助手(如 Claude Desktop)直接检索已下载的文档。

MCP 模式不需要 cookies.json,仅对本地已下载的数据提供只读查询服务。

提供的工具

工具 说明
list_authors 列出所有已下载的作者
list_posts 列出指定作者的所有文章(动态和作品集)
read_post 读取指定文章的完整 Markdown 内容
search 在已下载文档中全文搜索关键词

stdio 模式(本地使用)

适用于 Claude Desktop 等本地 MCP 客户端:

.\AfdianToMarkdown.exe mcp

使用 Claude Code 添加:

claude mcp add --transport stdio afdian -- /path/to/AfdianToMarkdown --dir /path/to/data mcp

或在 Claude Desktop 的 claude_desktop_config.json 中手动配置:

{
  "mcpServers": {
    "afdian": {
      "command": "/path/to/AfdianToMarkdown",
      "args": ["--dir", "/path/to/data", "mcp"]
    }
  }
}

HTTP 模式(远程/NAS 部署)

适用于在 NAS 或服务器上长期运行,为远程 MCP 客户端提供服务:

# 默认监听 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 添加远程服务器:

claude mcp add --transport http afdian http://<server-ip>:8080/mcp

或在 MCP 客户端配置文件中手动配置:

{
  "mcpServers": {
    "afdian": {
      "url": "http://<server-ip>:8080/mcp"
    }
  }
}

NAS 部署示例

配合 cron 定时更新内容,并通过 systemd 管理 MCP 服务:

# /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.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)的支持

About

爱发电爬虫(afdian.com)

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •