Logo

Notion转Blog的图片难题解决方案

2025年5年20日 · 749

我习惯用 Notion 写各种内容,包括博客和其他杂项。但从 Notion 转成 markdown 格式发布到博客时,图片处理总是个难题。因为在 Notion 中,我习惯直接复制图片到内容中,这很方便,但这些图片实际上是以 Notion 的临时对象存储形式存在的。当发布到博客后,这些图片就会失效。

解决这个问题有两种方法:一是每次写完后,将图片保存到指定目录,然后修改图片路径;二是将图片上传到对象存储中,再修改图片指向。

我发现网上大多数解决方案都是使用图床上传工具,需要手动上传图片后再插入返回的链接,这样不太方便。因此,我想到开发一个使用 Notion API 的脚本:每次写完内容后运行脚本,自动将图片上传到存储位置、替换 markdown 中的路径,并将内容转换成博客格式。

然后我在想是不是能通过API的方式形成一个自动化的工作流,就让Cursor帮我写了个脚本,个人感觉还是挺方便的。下面就是整个方案的简单教程,算是给大家提供一个思路。

方案源码:https://github.com/armilkchen/NoImageCloudy

1.获取 Notion 集成密钥

图片

图片

按照指示对应填写就好了,然后会拿到一个Secret,保存起来待会会用到。

2. 共享页面权限给集成

  • 打开你要读取的 Notion 页面
  • 点击右上角 “设置” → “集成” → 选择你刚才创建的 Integration
  • 确保它有访问权限

图片

3. 填写相关配置参数到config.py

我是用的cloudflare r2进行存储,如果使用别的存储,自行根据API更改。


# ========== Notion 配置 ==========
# 前面创建的 IntegrationSecret
NOTION_TOKEN = "************"
# 你希望导出的Notion的页面ID
PAGE_ID = "************"

# ========== R2 存储配置 ==========
R2_ACCESS_KEY = "************"
R2_SECRET_KEY = "************"
R2_BUCKET = "chanblog"
R2_ENDPOINT = "https://************.r2.cloudflarestorage.com"

# ========== 输出配置 ==========
# 图片在R2上的存储路径前缀
IMAGE_PREFIX = "notion_images"
# 是否在控制台打印详细日志
VERBOSE_OUTPUT = True
# 自定义图片访问域名、在R2上绑定域名
CUSTOM_IMAGE_DOMAIN = "https://chanblog.xyz" 

4. 下载仓库代码并安装依赖、运行

## 安装依赖

```bash
pip install -r requirements.txt

基本用法

python main.py

默认使用 config.py 中配置的页面 ID。

指定页面 ID

python main.py --page-id 你的页面ID

最后生成的md文件就会在目录下的doc中。

目前其实还是有许多不方便的地方,看看后续还能怎么去优化,以后也会根据自己工作习惯去迭代。

一个小脚本,希望能帮助大家,有任何建议改进的地方随时交流。