Notion到博客的自动化更新
在notion写文章,自动化更新到git 代码仓库,再自动化部署到网站
我在上周的文章《程序员一定要有自己的博客》中写了我博客工具链的5步:
- 在趁手的工具写笔记(Notion PC端、移动端)
- 工具将笔记转化为md文档
- 自动推送md文档到我的博客git仓库
- git仓库更新,触发部署工具(netlify、vercel、jenkins)自动部署
- 更新博客
当时只实现了其中1245步,经过两天的探索我完成了第3步,让这个工具链实现了完整的自动化,这篇文章大致介绍一下。
从Notion到Git仓库
我的博客代码仓库使用Github托管,Github提供了一个十分有用的自动化工作流的工具:Github Actions。
Github Actions 可以定时执行我提供的脚本,通过脚本,实现了从Notion到代码仓库的更新。大致逻辑是这样的:
- Github Actions 负责每天凌晨00:00执行脚本
- 在脚本中,使用Notion API接口获取Notion特定数据库的数据,筛选出前一天更新的文章
- 为每一篇文章,在代码仓库创建一个md文件
- 将文章的attributes,转化为博客md文件的frontmatter
- 将文章正文的md字符串,转化为md文件的正文内容
- 将所有md文件通过git命令提交到github仓库中
- 如果脚本执行失败,github会发邮件通知我
通过以上脚本,实现了 notion文章数据库到git仓库的更新。
脚本执行的频率是可以自由更改的,我偏向于损失一些时效性,保证环境稳定性,所以选择了一天一更新。
以上脚本可以在我的博客开源仓库中看到,链接在这里 和 这里。
由于我们的notion数据库字段、md文件的frontmatter配置很可能不同,我的脚本无法直接被你复用,有几个需要考虑变更的点:
- 在你的git仓库中,需要配置几个脚本中需要使用的secrets。配置的地方在
你的github仓库首页 - settings - secrests and variables - actions
,参数名是NOTION_DATABASE_ID
和NOTION_KEY
,前者是你在Notion中文章所在数据库的id(可以通过copy link获得),后者是你开通的notion api的key(notion api的开通详见这个文档)。 - 从notion page attributes到md frontmatter的映射,可以在这个脚本的
postToMDFile
中找到,逻辑比较简单,按照你的需求修改即可。 - 脚本中的git信息,例如name、email、branch 可以按照你的需求修改。
- 按照你的需求筛选notion数据,filter写在这个脚本的
getPosts
中。 - 有一个可能踩坑的点在于,必须要将workflow读写仓库的权限开启,否则脚本会因为缺少git push权限而报错,开启权限的地方在:
github仓库首页-settings-actions-general-workflow permission - 开启read and write permissions
- 脚本的执行周期,可以在上述yml脚本的cron字段中配置,注意脚本中的时间使用的是UTC时间,要考虑当地时区的时间差,例如UTC=北京时间-8,我希望在凌晨0点执行,所以写的小时是16。
从Git仓库到博客网站
这一步我使用的是Vercel工具,监听Git仓库的push事件,自动拉取代码更新,打包部署到网站。
这一步Vercel的配置很简单,推荐查看官方文档,不做赘述。
上次更新: