从为知笔记迁移至 Notion
其实为知笔记其实在 2018 年开始就已经闲置的状态,只是偶尔当作数据库来使用,用来查询数据。最近想着彻底不用为知笔记,主要是笔记形式已经僵化,受限于过去的数据与用户,产品进步幅度也特别慢。
# 一、前言
最近1-2 年「收集」-「阅读」-「笔记输出」流程其实发生巨大的变化,从过去「收集阅读」和「笔记输出」都放在一起,到现在将两者区分。「收集阅读」交给 flomo 和 Cubox,「笔记输出」交给 Notion。
其实为知笔记其实在 2018 年开始就已经彻底闲置的状态,只是偶尔当作数据库来使用,用来查询数据。最近想着彻底不用为知笔记,主要是笔记形式已经僵化,受限于过去的数据与用户,产品进步幅度也特别慢。
# 二、如何将 为知笔记 数据搬迁 Notion
基本思路:「使用 wiz2joplin 导出数据」— 「导入 Joplin」-「Joplin 导出 Markdown」-「使用 md2notion 导入数据」
wiz2joplin 项目地址:https://github.com/zrong/wiz2joplin
Joplin 下载地址:https://joplinapp.org/
md2notion 项目地址:https://github.com/Cobertos/md2notion
# 三、使用 wiz2joplin 导出数据至 Joplin
使用环境
- Python 版本:>= 3.9
- wizNote 版本:2.8.7
需要注意
需要取消加密的笔记。
很多笔记在引用图片的时候,使用的是 url 链接,如果一旦 url 链接失效后,这个图片就找不到了。使用本工具转换时,由于没有考虑到这种情况,所以一旦遇到失效的链接,就会报错,需要自行手动处理。
如果遇到「找不到 note 文件」的问题,是因为笔记没有下载至本地导致的,可以在「index.db」为知笔记数据库中,根据 GUID 查找到标题,根据标题搜索,然后将笔记下载至本地。
遇到的问题
- 网页表格无法转换。因此只能手动添加。
- 附件无法转换。因此只能手动添加。
# 四、使用 md2notion 导入数据
步骤
首先,Joplin 导出 Markdown,在 Joplin 菜单中选择「文件」-「全部导出」-「Markdown + 文章前言」,耐心等待至数据导出完毕。
获取「token_v2」,通过「cookies」-「www.notion.so」-「Cookies」-「token_v2」的 Context 获得。
自己写了一个脚本,完成文件遍历并执行 md2notion 将 Markdown 文件上传至 Notion。
from notion.client import NotionClient from notion.block import PageBlock from md2notion.upload import upload import os import pandas as pd # Follow the instructions at https://github.com/jamalex/notion-py#quickstart to setup Notion.py client = NotionClient(token_v2="<token_v2>") # Replace this URL with the URL of the page you want to edit page = client.get_block("https://www.notion.so/darinlo/Test-c0d20a71c094") # You want to upload all the files in the current directory upload_dir_path = "/Users/darinlo/Desktop/jo" def read_finish_list_file(path): if not os.path.exists(path): df = pd.DataFrame(columns=["file_name"]) df.to_csv(path, index=False) else: df = pd.read_csv(path) return df def upload_md_file(file_path): base_name = os.path.basename(file_path) file_name = os.path.splitext(base_name)[0] with open(file_path, "r", encoding="utf-8") as mdFile: newPage = page.children.add_new(PageBlock, title=file_name) upload(mdFile, newPage) def traversal_md_files(path): for item in os.scandir(path): file_extension = os.path.splitext(item.name)[1] if item.is_file() and file_extension == ".md": df = read_finish_list_file("./finish_list.csv") if item.name not in df["file_name"].values: upload_md_file(item.path) df = df.append({'file_name': item.name}, ignore_index=True) df.to_csv("./finish_list.csv", index=False) elif item.is_dir(): traversal_md_files(item.path) traversal_md_files(upload_dir_path)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
遇到的问题
- 导入的格式有点乱,主要是 Markdown 的标准不统一造成的。因此需要手动调整。
# 五、结语
最后唠叨一句,Markdown 主要问题在于:
- 对 Table 和 Image 的支持都有限;
- 容错率低,一个空格可能都有变化;
本着 Less is more 原则,在当前 Notion 很好解决了我的需求,最终选择了它。