把 QQ 空间说说搬到 Memos
AI使用声明
本文初始框架与流程内容由我本人编写,并使用 AI Agent 对部分内容进行顺序重组与润色。
搭建好个人网站后,我想在上面展示自己的日常动态。过去在 QQ 空间里写过不少说说,把它们迁过来,网站上的动态就能接着以前的记录继续更新,不必从现在开始一点点积攒。
这也正好是一次给 QQ 空间归档的机会。那些记录留了这么多年,我不希望哪天因为平台、账号或其他原因就找不回来了。我一直觉得,自己的数据还是掌握在自己手里更踏实。带着这两个想法,我开始四处寻找合适的方案。
从一份 HTML 归档开始
我选择的去处是 Memos。它可以自建,以时间线组织短笔记,也能为每条记录设置可见范围。说说原有的篇幅和形式,放进去正合适。
迁移的起点是 QzoneArchive 导出的 HTML 文件。

归档文件中保留了说说正文、时间戳、图片链接和评论,脚本就从这些内容里提取数据。

我把文字和图片迁入 Memos,点赞与评论留在原始归档里。这样,Memos 中是一条条自己的记录,想回看当时的互动时,还可以打开那份 HTML。
归档文件本身也要留下。不过,HTML 里存着图片链接,并不等于图片已经保存在本地;转存图片仍是迁移中单独的一步。
先检查那些对不上的时间
这次最让我意外的,是一批说说挤在同一天的几分钟内,还有一些说说的评论早于正文显示的日期。如果直接采用这些时间导入,错乱也会原样进入 Memos。
为此,我在脚本里加入了 audit,先离线检查归档,生成一份 audit_report.md。除了没有文字、图片和视频的空条目,它还会挑出两类值得回看的记录:
- 最早的评论比说说显示的时间早两天以上。
- 同一分钟内出现至少八条说说。
这两个筛选条件把需要核对的范围缩小了。拿着报告回到 QQ 空间,按内容找到对应说说,再核对日期,比从头翻完整条时间线省事得多。
评论在这里提供了一个很有用的参照:如果评论时间准确,那么说说至少在那时就已经存在。它能帮助判断先后,却不能直接替代发布时间。导入后,我曾用最早评论的时间近似安放一部分记录,再把能够查到原始日期的条目逐条改正。
时间会决定一段文字落在人生的哪个阶段。同一句话,放在毕业前后,读起来可能就是两回事。因此,导入前先把异常记录列出来,导入后再按核对结果修正。
把文字、图片和时间一起迁过去

完整脚本放在了 Gist 中,文件名是 qzone_to_memos.py。它使用 Python 3.9 及以上版本的标准库,提供 audit、import、review 和 delete 四个子命令。
使用前,准备好 HTML 归档和 Memos 的个人访问令牌,把实例地址与令牌分别放入 MEMOS_BASE_URL、MEMOS_API_KEY 环境变量,并通过 --html 指定归档文件。脚本通过 Memos 的 /api/v1 接口创建笔记,使用 /attachments 上传附件。
检查完归档后,先给 import 加上 --dry-run 做一次预演。它只解析文件,列出可导入的条目数、图片数和部分内容,方便与归档核对。确认读取正确,再正式导入。
图片要成为附件
把 QQ 图床链接贴进 Memos,眼下也许能显示,但链接失效后,笔记里就只剩文字了。
脚本会先下载每张图片,再上传到 Memos 并与笔记绑定。一条说说的图片全部处理成功后,才创建对应笔记;有图片下载失败,就把这条记入失败列表,留待处理。视频则保留原链接,需要另外保存的原视频要单独归档。
发布时间与修改时间一起处理
创建笔记时,脚本把归档中的时间写入 createTime,随后再将 updateTime 调整到同一时刻。这样,旧说说按归档日期排列,也不会全部带着迁移当天的修改时间。
核准后的日期需要在导入后另行修改,同时调整这两个字段。
私密导入与结果核对
这份迁移脚本不读取 QQ 空间原有的可见范围,因此默认把笔记设为 PRIVATE。导入后再看一遍,愿意公开的记录逐条调整。
同样需要保留的是导入日志 qzone_import_log.jsonl。它记录成功写入的笔记,后面的审阅页靠这份日志区分本次迁入的说说和 Memos 里原有的内容。
中途失败后可以重新运行导入。脚本会读取 Memos 现有记录,发布时间或非空正文任一相同,就跳过对应条目。这个规则也会把同文不同日期、同一时间不同内容的记录视为重复,因此核对导入结果时,要把跳过的数量与原始归档一起看。
如果使用 AI Agent,可以让它按“审计、预演、导入、汇总”的顺序执行,把成功、失败、跳过的数量,以及需要核对时间的条目整理出来。图片下载、接口调用和日志整理交给它,核对日期与决定公开范围仍由自己完成。
重新读一遍,再决定留下什么
导入完成后,我还想把这些说说重新看一遍:有些值得公开,有些留作私密记录,也有些已经不想继续放在日常时间线里。
为方便集中整理,脚本的 review 会生成本地审阅页。页面可以按来源、年份、关键词和有无图片筛选,勾选后导出删除清单。整理这次迁入的说说时,先把来源限定为“导入内容”,就能集中查看这一批记录。

清单交给 delete 后,先不加 --confirm 做一次预演,保存待删笔记的正文、时间和附件信息,并尝试从原归档链接下载图片。对照原笔记,逐一核对备份中的文字、图片数量和内容;缺图的条目先从清单移出,另行保存好图片后再处理。核对完备份,再加确认参数执行删除。
做到这里,旧说说才算在 Memos 里安顿下来。图片有了自己的副本,日期经过核对,可见范围也重新选过。以后再翻到它们时,我希望还能读懂那时的自己,为什么会写下这些话。