内容提要
该项目介绍notion2markdown-action,一个将Notion数据库页面转换为Markdown的GitHub Action,支持图片上传图床、自动部署Hexo博客。文章详述配置方法,包括Notion集成、GitHub Secrets设置、工作流文件编写及图床参数(如腾讯云COS、七牛、阿里云、GitHub)。还讨论同步频率、文章更新删除、链接稳定性、HTML嵌入等常见问题,并分析耗时优化,最后介绍通过Vercel Webhook实现实时同步的方案。
延伸解读
同步机制与实时性权衡
文章提到GitHub Actions的schedule触发可能延迟甚至跳票,因此作者提供了Vercel Webhook方案实现实时同步。用户需根据对实时性的需求选择:定时轮询简单但可能延迟,Webhook更及时但需额外部署。同时,GitHub Actions有每月3000分钟的配额限制,高频同步会消耗配额,建议触发间隔不小于10分钟。
图床配置与性能瓶颈
图片上传是同步过程中的主要耗时环节,速度受图片数量和GitHub Actions执行机器网络影响。文章建议使用pic_base_url参数检测图片是否已存在,避免重复上传,可显著提升更新效率并节省CDN流量。不同图床(腾讯云COS、七牛、阿里云、GitHub)配置方式类似,但需注意各平台的参数差异。
文章管理与链接稳定性
文章状态控制发布:仅“已发布”状态的文章会被转换,修改状态即可更新或删除(需配置clean_unpublished_post)。为保证更新后链接不变,可手动设置abbrlink或使用hexo-abbrlink插件自动处理。此外,Notion中的属性会同步到Markdown的YAML头部,自定义属性时需避免特殊字符。
HTML嵌入的注意事项
在Notion中嵌入HTML(如iframe)时,需确保粘贴为纯文本,否则Notion会自动为URL添加超链接,导致Markdown渲染出错。建议粘贴后检查链接是否被转换。此外,外链图片需确认允许跨域,否则可能无法显示。
Q&A
notion2markdown-action 是什么?它有什么作用?
notion2markdown-action 是一个 GitHub Action,用于将 Notion 数据库中的页面转换为 Markdown 文件,并支持图片上传到图床,可配合 Hexo 等静态博客实现自动化部署。
如何配置 GitHub Secrets 中的 NOTION_DATABASE_ID?
在 Notion 数据库主页点击 Copy Link,链接中类似 397943b2d0384e15ba69448900823984 的部分就是数据库 ID,将其添加到 GitHub 仓库的 Secrets 中,变量名为 NOTION_DATABASE_ID。
如何配置腾讯云 COS 作为图床?
在 GitHub Secrets 中设置 PICBED_CONFIG,内容为 JSON 格式,包含 uploader 字段设为 "tcyun",以及 tcyun 对象中的 secretId、secretKey、bucket、appId、area、path、customUrl、version 等参数。
如何更新已发布的 Notion 文章?
直接修改 Notion 中的文章内容,插件会自动更新对应的 Markdown 文件,无需手动操作。
如何删除已发布的文章?
将文章状态从“已发布”改为其他状态,并在 Notion2Hexo.yml 中配置 clean_unpublished_post: true,即可自动删除对应的 Markdown 文件。
如何保证更新文章后链接不变?
可以手动为 Notion 文章设置 abbrlink 字段,或使用 hexo-abbrlink 插件自动生成,插件会读取原 Markdown 文件中的 abbrlink 并同步到 Notion,从而保持链接稳定。
如何修改同步频率?
在 notion_sync.yml 中修改 schedule 配置,使用 cron 表达式,建议间隔不小于 10 分钟,避免消耗过多 GitHub Actions 时间。
如何嵌入 HTML 代码(如 iframe)?
在 Notion 中直接粘贴 HTML 代码,但需确保 Notion 没有自动给 URL 添加超链接,否则会导致渲染错误。建议粘贴为纯文本。
哪些图片会被上传到图床?
只有 Notion 存储的图片会被上传,外链图片和已经位于自己图床的图片不会被上传。
如何实现实时同步?
通过部署 notion2markdown-vercel 项目,使用 Webhook 触发 GitHub Actions,实现实时同步。部署时需要配置 GITHUB_REPO、GITHUB_USERNAME、GITHUB_TOKEN、NOTION_DATABASE_ID、NOTION_SECRET 等环境变量。