文章目录
前言
前段时间突然发现,有道云笔记禁止导出笔记了。
以前好歹还是可以批量导出的,虽然只能导出成有道云的独有格式或者是pdf,但是好歹还是能导出的,结果现在是彻底禁止导出了。
去搜索了下有道云笔记导出,没想到真的有第三方的插件可以把有道云笔记里的笔记导出成markdown文件(下称md文件),再加上我最近正好接触到了一个免费笔记管理软件Obsidian,虽然这个软件没有云备份功能,但是他的文件都是本地存储,且是通用的markdown格式,也方便未来万一需要换软件的情况。(国内的大部分软件,就算能导出也都是独有格式,猜测是为了防止用户跑路吧)
思索之后,决定趁现在赶紧把有道云笔记里的东西迁移出来,防止之后彻底无法导出就完蛋了。
于是就有了这个教程。
这个教程主要分为两部分:
- 导出有道云笔记里的内容为markdown文件
- 修改导出的文件的创建时间和修改时间,与有道云笔记内匹配。
当然第二点只是针对于有强迫症的用户,对于一般用户来说,这点完全可以不用考虑。
那么总之,教程开始。
有道云笔记导出
关于有道云笔记导出为md文件,其实github上已经有一个相当好的软件了:youdaonote-pull
这个软件的功能有:
- 可将所有笔记(文件)按原格式下载到本地
- 由于「笔记」类型文件下载后默认为 Xml 格式,不是正常笔记内容,默认将其转换为 Markdown 格式
- 由于有道云笔记图床图片不能在有道云笔记外显示,默认将其下载到本地,或指定上传到 SM.MS
嗯……具体的使用方法在原网页上写的非常详细,我在这里就不搬了,大家自己去原网页看就行了。
我在这里就说两点:
- 原网页里的第一步,如果没有git,也不想下载的话,可以不用按照原网页里说的使用git clone项目,只需要点击code内的Download ZIP按钮,即可下载全部文件,然后在本机上解压即可使用。
- 如果在软件执行的过程中出现
转换为 Markdown 失败!请检查文件!
的错误,请自行检查文件名是否出错。(我自己是因为有道云的文件名里不知道为啥会包含两个换行符,所以报错了)
执行完这个程序,大家就能得到一个包含所有嵌套文件夹、笔记、图片文件(在根目录下的youdaonote-images文件夹内)、附件文件(在根目录下的youdaonote-attachments文件夹内)的文件夹了。
这个文件夹其实已经可以当成Obsidian的库被识别了,只需要在Obsidian内选择『打开库文件夹』,选择这个导出的根目录,就可以使用了。
如果没有强迫症的话,这个教程看到这里就结束了。但是,我有强迫症啊!
有道云笔记里,每一篇笔记都会记录他的创建时间和修改时间,但是使用youdaonote-pull导出的笔记,创建时间全部为导出的当天,这样就丢失了重要的时间信息。
于是才有了接下来的教程。
有道云笔记信息导出
如果想要导出有道云笔记的信息(如时间等),就需要另一个软件了:YoudaoNoteExport
这个软件稍微有点年头了,2018年的,但是仍然可以使用。他的主要功能是导出有道云笔记,保存为JSON和DOCX/XML文件。DOCX/XML文件是笔记的内容,JSON文件是笔记的其它信息(包括标题、创建时间、修改时间等)。
我们正好需要这个软件导出的JSON文件,里面包含了文件的创建时间和修改时间。(这个软件导出DOCX有点问题,我用word无法打开,不过无所谓了,我们也不需要这个功能。)
这个软件导出的笔记默认文件名是笔记的id(一串数字和字母构成的字符串),我本来想把它改成以原笔记的名称作为文件名,但是遇到了一些问题,所以最后还是保留了id文件名,反正到时候遍历json文件的时候也不需要看这个文件名。
Python2和Python3共存
但是因为这个软件运行的环境是在Python2.7里的,而之前的youdaonote-pull是运行在Python3内的,这里就有一个问题就是需要Python2和Python3在同一个电脑内共存。
这个问题可以参考下面这两篇文章:
Windows10下python3和python2同时安装(一)安装python3和python2
Windows10下python3和python2同时安装(二)python2.exe、python3.exe和pip2、pip3设置
整体的做法按照这两篇文章内的设置就行,不过实际上,我自己只修改了python2和pip2。也就是命令python对应的是python3,而python2对应的就是python2,pip同理。(因为我准备做完这个导出就把python2卸载,然后保留python3的,所以我python3就没有做修改。)
总之不管怎么修改,现在的电脑内已经有了python2和python3两个版本了。不过在下载之前,还需要在python2内也安装requests库,如果大家按照之前两篇文章更改的话,那么安装的方式就是在命令提示符内输入:
pip2 install requests
然后接下来就是下载YoudaoNoteExport,和之前一样,只需要点击code里的Download ZIP下载所有文件,然后解压,得到一个名为YoudaoNoteExport-master的文件夹。
修改原代码
在使用之前,还需要对源码做一些修改。
也不知道为啥,下载下来的源码如果直接使用,会有非常多的错误,这也是我之前导出的时候遇到的问题。所以要对原代码进行一些修改。
打开之前解压的YoudaoNoteExport-master文件夹,然后右键main.py文件,选择Edit with IDLE,或者打开方式记事本,然后参照下文修改程序即可。(建议安装一个sublime编辑器)
这个程序的问题主要集中在函数getFileRecursively
内,代码如下:
def getFileRecursively(self, id, saveDir, doc_type):
data = {
'path': '/',
'dirOnly': 'false',
'f': 'false',
'cstk': self.cstk
}
url = 'https://note.youdao.com/yws/api/personal/file/%s?all=true&f=true&len=30&sort=1&isReverse=false&method=listPageByParentId&keyfrom=web&cstk=%s' % (id, self.cstk)
lastId = None
count = 0
total = 1
while count < total:
if lastId == None:
response = self.get(url)
else:
response = self.get(url + '&lastId=%s' % lastId)
print('\n------')
# print('getFileRecursively:' + response.content)
jsonObj = json.loads(response.content)
total = jsonObj['count']
for entry in jsonObj['entries']:
fileEntry = entry['fileEntry']
id = fileEntry['id']
name = fileEntry['name']
print('%s' % (id))
# print('%s %s' % (id, name))
if fileEntry['dir']:
subDir = saveDir + '/' + name
try:
os.lstat(subDir)
except OSError:
os.mkdir(subDir)
self.getFileRecursively(id, subDir, doc_type)
else:
with open('%s/%s.json' % (saveDir,