👁️ 487
👍 118
📅 2026-06-13 收录
🔄 2026-06-13 更新

正文内容

博客转 Kindle

抓取博客/散文网站内容,生成带封面的 EPUB 文件,并推送至 Kindle 设备。

快速开始

# 1. 从受支持的站点获取散文文章
uv run scripts/fetch_blog.py --site paulgraham --output ./pg-essays

# 2. 生成封面(使用 Nano Banana Pro)
# 封面生成请参阅 nano-banana-pro 技能说明

# 3. 使用封面编译为 EPUB
uv run scripts/compile_epub.py --input ./pg-essays --cover ./cover.png --output essays.epub

# 4. 发送至 Kindle
uv run scripts/send_to_kindle.py --file essays.epub --kindle-email user@kindle.com

工作流(必须严格按此顺序执行)

  1. Fetch(抓取) —— 从博客下载全部散文/文章
  2. Generate Cover(生成封面) —— 通过 nano-banana-pro 技能生成封面(不可跳过)
  3. Compile(编译) —— 将内容与封面整合为嵌入式封面的 EPUB 文件
  4. Send(发送) —— 邮件发送至 Kindle 邮箱地址

⚠️ 务必在发送前完成封面生成并嵌入 EPUB。禁止无封面发送。

支持的网站

网站 标识符(Key) URL 模式
Paul Graham paulgraham paulgraham.com/articles.html
Kevin Kelly kevinkelly kk.org/thetechnium
Derek Sivers sivers sive.rs/blog
Wait But Why waitbutwhy waitbutwhy.com/archive
Astral Codex Ten acx astralcodexten.com

对于未列出的网站,请使用 --site custom --url 参数。

封面生成

使用 nano-banana-pro 技能生成封面。推荐提示词模板如下:

Book cover for '[Author Name]: [Subtitle]'. 
Minimalist design with elegant typography. 
[Brand color] accent. Clean white/cream background. 
Simple geometric or abstract motif related to [topic].
Professional literary feel. No photos, no faces.
Portrait orientation book cover dimensions.

建议输出分辨率为 2K,兼顾画质与文件体积。

Kindle 推送

默认 Kindle 地址(Simon):simonpilkington74_8oVjpj@kindle.com

通过 AppleScript 调用 macOS Mail.app 发送邮件。请确保:

  • 发件邮箱已在 Kindle 的“已批准的发件人列表”中;
  • 附件大小不超过 50MB(EPUB 格式压缩效果良好)。

状态追踪

状态文件存于 ~/.clawdbot/state/blog-kindle/ 目录下:

  • {site}-last-fetch.json —— 上次抓取时间戳及文章总数
  • {site}-sent.json —— 已发送文章 ID 列表

可用于增量更新(仅抓取新增文章)。

手动工作流(不依赖脚本)

若脚本不可用,请按以下步骤操作:

  1. Fetch(抓取)curl 获取归档页 → 解析文章链接 → 逐条抓取 → 转换为 Markdown
  2. Combine(合并):拼接所有 Markdown 文件,并添加 YAML 前置元数据(含 titleauthor 等字段)
  3. Cover(封面):使用 Nano Banana Pro 生成封面
  4. Convert(转换)pandoc combined.md -o output.epub --epub-cover-image=cover.png --toc
  5. Send(发送):通过 AppleScript 调用 Mail.app 发送带附件的邮件

详细步骤请参阅 references/manual-workflow.md