自动化 Notion 备份
2023 年 9 月 16 日

自动化 Notion 备份 - Artur Burtsev - Medium

Artur Burtsev (opens new window)

多年来,我一直在使用 Gitlab (opens new window) 管理我的笔记。它是免费、安全、弹性的,并得到了成千上万家公司的信任。GitLab 基于 git (opens new window),意味着可以轻松与任何基于 git 的服务或您的本地副本进行同步。

最近,我发现了 Notion (opens new window),它使编辑内容如此愉快。而让我舒适地将所有笔记迁移到 Notion 的原因是它具有“导出所有工作区内容”的功能,可以生成高质量的 Markdown。

我唯一缺少的是定期自动备份。我对 Notion 的备份功能进行了一些调查,并设置了每天将备份导出到 GitLab。在过去的两周里,它一直运行良好, ## 1. 注册GitLab账号

前往https://gitlab.com/ (opens new window)注册一个免费账号,如果你还没有一个账号,这个账号应该足够备份高达10GB的数据。

可选。如果你想要额外的安全性,可以设置双因素认证 (opens new window)

2. 提取Notion的令牌和空间ID #

这可能是最复杂的一步。由于Notion目前还没有API,我们需要在我们的备份脚本中模拟Notion的行为。为此,我们需要从“导出所有工作区内容”请求中提取_token_v2和_spaceId。

我将解释如何在Google Chrome中完成:

  • 打开http://notion.so/ (opens new window),进入“设置和成员”→“设置”
  • 打开Chrome DevTools (opens new window) 通过按下Command+Option+J(Mac)或Control+Shift+J(Windows、Linux、Chrome OS),将以下Markdown翻译成中文,并删除第一级标题:
  • 转到网络选项卡,如下图所示
  • 启用“XHR”筛选器(1),清除控制台(2),开始导出(3),选择“enqueueTask”(4)

在打开的“Headers”选项卡中,您需要向下滚动,直到看到“cookie:”和大量文本,在这段文本中,您需要找到一个类似于(5)的部分:

token_v2=xxx;

其中xxx是一个非常长的字母和数字序列,可以跨多行。将“token_v2=”和“;”之间的所有内容复制并保存在某个地方。将其标记为NOTION_TOKEN_V2,我们稍后会用到。

现在向底部滚动,在“Request Payload”部分下,您将看到类似于(6)的内容:

spaceId: “4489c211-09d6-4069-ae3b-1665e25d6c03”

保存引号内的值,将其标记为NOTION_SPACE_ID。

3. 在GitLab中创建推送令牌 #

为了允许脚本更新您的备份,我们需要生成一个具有适当权限的令牌。在GitLab上执行以下操作 请前往设置 → 访问令牌 (opens new window)并按照截图上的示例填写表格。

点击“创建个人访问令牌”后,您将只能看到一次“您的新个人访问令牌”,请复制并保存它,将其标记为CI_PUSH_TOKEN,我们稍后会用到。

  1. 创建一个GitLab存储备份的仓库

创建新项目 (opens new window),选择您喜欢的“项目名称”,确保勾选了“私有”框,这样只有您可以访问您的备份,点击“创建项目”。

  1. 设置CI/CD脚本

创建项目后,您将被重定向到空白项目页面。点击“设置CI/CD”按钮。

它将打开一个用于.gitlab-ci.yml文件的编辑器。粘贴我为您准备的脚本:https://gitlab.com/aburtsev/notion-backup-script/-/raw/master/.gitlab-ci.yml (opens new window)

该脚本模拟了Notion备份功能的行为, 但是不要将zip文件下载到您的计算机上,而是将其上传到您的GitLab项目。

点击“提交更改”

6. 安排备份作业 #

脚本准备好后,从左侧菜单中选择“CI / CD” → “计划”。

点击“新计划”

这将打开“安排新的流水线”表单,让我们逐个字段进行设置。

  • 描述:你喜欢的任何内容(例如Notion备份)
  • 时间间隔模式:你想要运行备份的时间。例如,我的每天凌晨4点运行一次。请选择从0到59的随机分钟和从0到23的小时,你想要运行备份的时间。例如,如果你想要在上午5:42运行它,你应该输入“42 5 * * *”。请不要只是复制粘贴这个值,以确保不会同时访问Notion服务器。您可能会发现这个计划编辑器 (opens new window)有用。
  • Cron时区:只需选择您的时区
  • 目标分支:保留主分支
  • 变量:这是我们迄今收集到的值, 以下是一些常量:
NOTION_TOKEN_V2     从步骤2中粘贴token_v2
NOTION_SPACE_ID     从步骤2中粘贴spaceId
CI_PUSH_TOKEN       从步骤3中粘贴token
EXPORT_FILENAME     /tmp/export.zip
PYTHONUNBUFFERED    1
TZ                  从https://en.wikipedia.org/wiki/List_of_tz_database_time_zones选择你的时区("TZ database name"列)

就这样,现在你可以“保存管道计划”了,新的管道将出现在列表中。

现在按下“播放”按钮手动运行它并确保它正常工作。等待几分钟,直到进度圆圈变为绿色。

可选。如果你想查看日志,可以点击“最后一个管道”列中的链接,然后选择一个正在运行的任务。

一旦备份任务完成,你可以转到项目主页并注意到一个备份文件夹,你可以进入那里并浏览通过Notion生成的内容。

如果你已经到达这一点 - 恭喜!你已经设置好了自动备份,并且它们将在选择的时间每天运行。希望这对你有帮助。 如果这对您的项目有足够的帮助,欢迎 给我买杯咖啡 (opens new window),祝您好运!