用 GitHub Actions 给 notion 做自动备份

2,123 阅读3分钟

用 GitHub Actions 给 notion 做自动备份

notion.png

notion 是一款笔记软件,很适合做知识管理和任务进度追踪,可以拿来当成是 jira 和 confluence 的集合来使用。但是 notion 是一个国外的产品,总是有可能某天我们放在上面的内容被禁止访问,或者notion被墙掉,或者 notion 自己服务不稳定数据丢失的可能。俗话说 “鸡蛋不能放在一个篮子里”,我们的数据也不能严重依赖一个笔记软件,我们可以定时给他们备份。

Github Actions 可以实现这个任务,定时运行我们的备份脚本,脚本会帮我们把 notion 的页面数据拉取下来,最后打包成一个 zip 文件,我们只需要去 GitHub 下载这个 zip文件就可以了(zip 文件保存在 artifact 里,只有登录了 GitHub 才能点击下载)

备份脚本主体代码的思路是,根据输入的 notion page ID,拉取 notion blocks,遍历 blocks,找到其中 page block,也就是当前 notion page 的子页面,递归获取子页面的 notion blocks,.... ....

获取每个页面的 blocks,把 blocks 渲染成 HTML,HTML 展示的就是这个 notion 页面的内容。

notion 的内容分为一个一个的 blocks,block 中有很多类型,比如 heading block、text block、collection block、page blocks 等等,其中 page block 是子页面,就像网页中的 a 标签,点击 page block 会进到子页面, collection block 常常被人成为 notion 里的数据库,因为它像数据库中的表一样,可以有序的管理数据,还可以像数据库中的联表一样,表中还可以再嵌套一个表。

再来看看怎么实现 “定时备份”,这借助于 GitHub Actions 的 schedule 事件,我们可以定若干个时间点,当国际标准时间(GitHub action 的定时是格林尼治时间,注意和北京时间的换算关系)到达这个时间点的时候,GitHub actions runner 会运行我们指定的脚本。

GitHub actions 依赖我们仓库项目中的 .github/.workflows/xxxx.yml ,在这个 yaml 文件中,我们可以规定一系列规则,执行像自动构建、自动测试、自动部署等等任务。这里我们需要的定时任务就可以通过在 yaml中指定监听 schedule 实现。

Github Actions 就是 GitHub 的 CI/CD 工具。

下面就是执行定时备份 notion 脚本的 GitHub action yaml 文件

name: backup-notion

  on:
  name: backup-notion

  on:
    push:
    schedule:
      - cron: "10 23,4,11 * * *" #在北京时间 早上 7:10、中午 12:10、晚上 19:10 点各备份一次,也就是每天备份三次
  jobs:
    backup-notion:
      runs-on: ubuntu-latest
      steps:
        - name: checkout
          uses: actions/checkout@v2
        - uses: actions/setup-node@v2
          with:
            node-version: "17"
        - run: npm install
        - name: build script
          run: npm run build
          continue-on-error: true
        - run: npm run run-backup ${{ secrets.NOTION_PAGE_IDS }}
        - name: backup as artifact
          uses: actions/upload-artifact@v3
          with: 
            name: notion-backup-zip
            path: backupZip

为了从代码里面隐去一些隐私数据,可以把这些数据放在 GitHub 的 secret 联环境变量里面,然后在像上面那样 ${{ secrets.NOTION_PAGE_IDS }} 注入这些数据。

环境变量在这里定义:Settings → Secrets

IMG_2358.PNG.png

这是实现定时备份 notion 的 github 仓库: ‣ github.com/qumuchegi/n…

附此仓库的介绍视频: player.bilibili.com/player.html…

原文地址:www.chegi.fun/home/articl…

参考

触发工作流程的事件 - GitHub Docs