迁移 Mydiary 数据到 侠客日记

我使用 Mydiary 这个日记 app 好多年了,至今里面的日记有几百篇。

但是这个 app 的最后一次更新,是在 2017 年,虽然在现在最新的 Android 15 手机上,还可以正常使用,但我一直想寻找更好用的替代品。

我对于新的日记软件,最主要的需求是:

  • 开源的
  • 支持内容搜索

终于,我找到了《侠客日记》。

我简单了解一下,发现它不仅满足我的需求,而且还有很多亮点。例如支持 webdav 备份、多平台客户端、使用 markdown 语法……

所以我决定将原本的日记内容,迁移过来。

实际操作

首先在 Mydiary 导出数据,得到一个 zip 压缩包,里面是一个 backup.json 文件。

我接着研究「侠客日记」的导出导入,然后得知,只要把旧的日记数据,处理转换为一篇篇的 md 文件,再把它们压缩到一个 zip 压缩包里,就可以导入到「侠客日记」中。

于是我是弄了一个 python 脚本,来将 backup.json 转换为多个 md 文件的。脚本内容如下。

# -*- coding: utf-8 -*-
import json
import os
from datetime import datetime


def extract_diaries(json_data):
# 解析JSON数据
data = json.loads(json_data)

# 获取日记主题列表
for topic in data['backup_topic_list']:
if topic['topic_type'] == 1: # 1表示日记类型
diaries = topic['diary_topic_entries_list']
break

# 创建output文件夹存放日记
if not os.path.exists('output'):
os.makedirs('output')

# 处理每篇日记
for diary in diaries:
# 转换Unix时间戳为日期时间格式
timestamp = diary['diary_entries_time'] / 1000 # 转换为秒
dt = datetime.fromtimestamp(timestamp)
filename = dt.strftime("%Y%m%d%H%M%S") + ".md"

# 构建日记内容
content = f"# {diary['diary_entries_title']}\n\n"
# content += f"- 日期: {dt.strftime('%Y-%m-%d %H:%M:%S')}\n"
# if diary['diary_entries_location']:
# content += f"- 地点: {diary['diary_entries_location']}\n"

# 添加日记条目内容,并确保换行符合Markdown规范(\n\n)
for item in diary['diary_item_list']:
if item['diary_item_type'] == 0: # 0表示文本内容
# 替换单换行符为双换行符(符合Markdown段落要求)
item_content = item['diary_item_content'].replace('\n', '\n\n')
content += f"\n{item_content}\n"

# 写入文件
with open(os.path.join('output', filename), 'w', encoding='utf-8') as f:
f.write(content)

print(f"已保存日记: {filename}")

# 执行提取
with open('backup.json', 'r', encoding='utf-8') as f:
json_data = f.read()
extract_diaries(json_data)

幸好当初选择的是一个,开源并且可以轻松导出数据的日记 APP,否则可能就没法像今天这样轻松地迁移数据了。