利用GitHub Action自动备份Notion数据到仓库

近期因为一些笔记软件的服务崩溃导致大家都在说要Local first,但Notion确实有一些令人无法割舍的功能,所以这里提供了一种折中的方案,通过设置GitHub Action,定期自动备份Notion数据至GitHub仓库。这种做法不仅提高了数据安全性,也实现了有效的容灾措施,降低了因依赖单一服务而导致数据丢失的风险。(其实Notion本身的可用性还是可以的, 详见Notion Status)

1. 获取相关Token

我们想要备份Notion,肯定是需要一些token来获取到Notion文章和相关权限的,我们需要3个token

1.1 token_v2

首先打开Notion,F12打开控制台,随便进入一个自己的文章页面,找到getSpaces 这个请求,在Cookie里面找到token_v2 复制备用
利用GitHub Action自动备份Notion数据到仓库

1.2 space_id

还是getSpaces 这个请求,查看他的请求返回值,我们要的space_idspace 对象里面的一个属性名,注意要的是属性不是属性值, 复制属性名备用
利用GitHub Action自动备份Notion数据到仓库

1.3 file_token

    1. 随便打开一篇文章,点右上角三个点,然后点Export
利用GitHub Action自动备份Notion数据到仓库
点击Export后浏览器应该会开始下载压缩包
    1. 打开浏览器的下载管理,右键复制他的下载链接
利用GitHub Action自动备份Notion数据到仓库
  1. 先打开F12控制台,再在浏览器的地址栏中粘贴这个下载链接,回车进行访问
    1. 此时你的浏览器会再次下载这个文件,你会在控制台看见下方这个请求,点开这个请求的Cookie,找到file_token ,三击它的值,全选复制备用
利用GitHub Action自动备份Notion数据到仓库

2. 使用 Github Actions 自动备份

2.1 在Github创建一个新仓库

新建仓库要选Private, 不然你的Notion内容将会公开

2.2 配置权限

在新建的仓库中点击 Setting ⇒ Actions ⇒ General, 如图所示的修改Workflow permissions
利用GitHub Action自动备份Notion数据到仓库

2.3 配置secrets

还是在Settings页面里,点击Secrets and variables ⇒ Actions, 添加三个secrets
  • NOTION_TOKENtoken_v2
  • NOTION_SPACE_IDspace_id
  • NOTION_FILE_TOKENfile_token
利用GitHub Action自动备份Notion数据到仓库

2.4 创建自动任务

打开 Actions 标签页, 点击 Simple workflowConfigure 按钮创建一个任务
利用GitHub Action自动备份Notion数据到仓库
将默认代码全部删除,粘贴以下代码,然后点击右上角的Commit Changes按钮
name: "Notion backup"

on:
  push:
    branches:
      - master
  schedule:
    - cron: "0 0 * * *"

  workflow_dispatch:

jobs:
  backup:
    runs-on: ubuntu-latest
    name: Backup
    timeout-minutes: 15
    steps:
      - uses: actions/checkout@v3

      - uses: actions/setup-node@v2
        with:
          node-version: '18'

      - name: Delete previous backup
        run: rm -rf markdown html *.zip

      - name: Setup dependencies
        run: npm install -g notion-backup

      - name: Run backup
        run: notion-backup
        env:
          NOTION_TOKEN: ${{ secrets.NOTION_TOKEN }}
          NOTION_FILE_TOKEN: ${{ secrets.NOTION_FILE_TOKEN }}
          NOTION_SPACE_ID: ${{ secrets.NOTION_SPACE_ID }}
          NODE_OPTIONS: "--max-http-header-size 15000"

      - name: Delete zips
        run: |
          rm -f *.zip
          rm -f markdown/*-Part*.zip
          rm -f html/*-Part*.zip

      - name: Commit changes
        run: |
          git config user.name github-actions
          git config user.email github-actions@github.com
          git add .
          git commit -m "Automated snapshot"
          git push
点击提交就可以了,这个任务会在每天的UTC 0点触发,也就是北京时间8:00 AM触发,如果你想更改执行时间/间隔,可以自行修改代码中的cron

2.5 手动触发

我们可以按图里的步骤尝试着手动触发一下这个任务,运行整个任务大约需要2-3分钟
利用GitHub Action自动备份Notion数据到仓库执行成功后,仓库中有两个文件夹, 分别是html和markdown两个格式的导出文件
注意: Notion 的 token 大概 90 天左右会失效, 到时候需要重新用上面的方式获取 token, 再到 Secrets 中修改

给TA打赏
共{{data.count}}人
人已打赏
技术教程

自建Docker Hub镜像方法

2024-6-25 11:38:59

技术教程

前端持续更新⭐收集有特色的库

2024-6-25 11:45:32

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索