type
status
date
slug
summary
tags
category
icon
password
前言
截止到现在,已经持续使用了Notion近两年,也基本上将之前在Typora上写的Markdown文章搬运过来了。但是,有个问题,极端一点思考,如果Notion突然不维护了,那么我的这些数据该怎么办?
尽管,Notion 也提供了导出Markdown格式的功能,但是,只能一个一个导出,后期文档数量上去的话,导出都挺折腾时间的。
于是,寻求一种能够批量、快速、自动化导出Notion文章的方法就成了最近关心的事情。好在,在Matrixcore 的帮助下,发现一件神器 —— Elog。
使用 Notion+Elog+Slack+Pipedream 这一套组合拳就解决了持续集成的方式来自动化更新Notion文档。
本地实践开始
因为我的主要目的是能够使用 Elog 定时备份 NotionNext下的文档,并且定期归档,所以实践这块以完成持续集成部署为结果展开流程。
安装依赖
参考快速开始
前置依赖,需要安装好 node
配置Elog
在本地目录执行初始化,我这边是在云服务器上,地址为:
/data/server/Myblog_backup
根据提示初始化成功后,会在根目录生成一份
elog.config.js
配置文件和本地调试用的.elog.env
环境变量配置文件。其中
elog.config.js
是关键的配置文件,而 .elog.env
是用于保存本地关键配置的文件。关于具体参考 目录结构 | Elog (1874.cool)
主要关注以下三个字段的内容:
- write 写作平台详细配置
- deploy 博客平台详细配置
- image 图床平台详情配置
我本地的配置是:
我这边就是需要将 notion 数据库中的
type
字段 为 Post
的文章导出到 ./docs目录下,Markdown名称以 title
字段作为名称,按照 catalog
进行文件夹归类。文章的图片下载到本地 ./docs/images
目录下,并使用相对路径替换掉原始的图片。同步
本地效果【左边为Notion数据库部分截图,右边为生成的MD文档】:


持续集成部署
说了这么多,一直都是本地在操作,如何实现自动化持续集成呢?
需要借助Notion+Slack+Pipedream+GitHub了
notion ⇒ slack ⇒ pipedream ⇒ github action
slack 设置
1、注册好之后,创建频道(channel)

2、添加应用 Notion


notion 设置
1、创建 automation
在数据库页面点击闪电按钮,可以创建
automation
,增加触发器以及执行器
触发器设置为 状态变为
Published
触发。因为在slack上设置添加了应用Notion,所以可以在执行器中看到 推送消息至频道,选择好在Slack中创建的频道,这里是 notion
pipedream 设置
1、注册
2、创建 project

3、在 project 下创建 workflow

4、设置 workflow
trigger 触发器选择 Slack

选择
New Message In Channels

按照如下设置

增加一个Step Python

按照如下编写即可:
配置环境变量,用于 code 中使用,在环境中通过
os.environ['your_token']
来使用
至此,已完成一半的设置。
注意:
以下三个变量需要在 GitHub 获取
github_username: 你的github账户名称
github_repo:你需要同步的 github 仓库,后续会将生成的markdown推送到这个仓库
token:github token
github设置
在Github上新建一个仓库,将本地与远程仓库链接上。
在
.github/workflows/
main.yaml
添加如下添加环境变量:

增加执行权限:
Setting
下 Actions
Tab 的 Workflow permissions 需要选中 Read and write permissions
,否则会报错,没有权限更新。
执行效果:
当在Notion数据库中,将文章的状态从
Draft
转为 Published
,随即触发执行Slack:

Pipedream:

Github:


关于Elog
什么是Elog
Elog
名为Easy Blogging
,简单、轻松的书写&部署博客 它是一种开放式跨端博客解决方案,随意组合写作平台(语雀/飞书/Notion/FlowUs)和博客平台(Hexo/Vitepress/Confluence/WordPress)等
用我的话来说,就是Elog支持从多个写作平台中导出Markdown文件格式,然后生成不同博客平台的静态博客文件部署。就是方便不懂技术的小伙伴也能在不同的写作平台以及博客平台自由切换,体验一条龙服务。
Elog支持的写作平台与博客平台
写作平台:
- Notion
- 语雀
- FlowUs
- 飞书云文档
博客平台:
- Hexo
- Vitepress
- HuGo
- Docusaurus
- Docz
- Confluence
- WordPress
支持图床
- 本地
- 腾讯云COS
- 阿里云OSS
- Github图床
- 七牛云
- 又拍云
注意事项:
【github】如何将本地仓库与远程仓库建立连接
- 【空仓库】创建完空仓库就将本地项目关联到远程
- 如果本地项目已经通过git管理:
- 本地项目未通过git管理:
- 【非空仓库】创建完非空仓库就将本地项目关联到远程
- 远程非空仓库的关联,就要涉及到2个不同项目的关联了;得先将远程的代码合并下来,才能提交;我们先假设项目已经通过git管理了。缺少关联push远程仓库的步骤讲:
【github】如何获取 github token


参考:
- 作者:eachenkuang
- 链接:https://kuangyichen.com/article/elog
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。