适逢岁末,恋旧心思勃发,欲取微信中一年之点滴并酒温之,不得法。尝依互联网所得之法行之,亦未果,遂挑灯精研数夜,略有所得,作文以记之。
翻译成白话文就是:快过年了天天吃的比较多,就想把微信聊天记录拿出来看看,不会搞,在网上搜到的教程也过时了,不好使,就自己研究了一下,现在整理一下发出来,供后人乘凉。
在开始之前
1. 这篇文章会偏折腾一点,如果只是想单纯的导出一份聊天记录,那么微信聊天记录导出这篇文章应该就够用了,作者提供了windows和macOS双版本导出工具,缺点是不能批量导出和对数据量比较大的聊天记录展示效果不是很好。
2. 本文章对传统聊天记录导出工作的改进:读取聊天记录时查找“message.sqlite”表而不是“DB.sqlite”表。
适用范围
IOS+macOS:按理说windows上同理,但是我手边没有设备,没测试过。
微信版本:8.0.15:上文说的教程过时主要是针对微信,暂时还不清楚到底是从哪个版本过时的,下文尽量把各种版本的解决方案都列出来。
开始
首先获取备份文件
iPhone连接Mac(或者PC),做一个无加密备份,然后在“/Users/username/Library/Application Support/MobileSync/Backup”路径下就可以看到备份了。注意**username**换成你的用户名。
进入备份文件
目录下可能有多个备份文件,根据修改时间比较一下。
备份文件目录下会有一个叫“Manifest.db”的数据库文件,**把它复制到桌面或者你的工作区,或者给备份文件夹访问权限(不建议)**,不然数据库操作可能出错,然后用你顺手的工具打开它,Navicat或者SQLite Expert等都行,文件很大,所以需要新建个查询或者筛选,务必不要直接搜索,那玩意只检索当前页。
`SELECT * from Files where relativePath like '%/message_%' and domain = 'AppDomain-com.tencent.xin'`
最后可能搜索到多个sqlite文件(如下图所示),图中打码部分是微信号('wxid_'的这个)的md5值,如果你的手机上登陆过多个微信号,那么数据库文件可能更多。
略过带后缀的文件,拿‘message_1.sqlite‘对应的fileID去备份文件夹里搜索,备份文件夹里的两位数文件名是fileID的前两位数。
这里插一嘴,苹果在编码时的逻辑是`domain-relativePath`然后取个md5作为fileID,所以一些系统文件比如信息和通讯录的fileID都是固定的,但是微信不行,因为微信的relativePath里多了打码的部分,是根据微信号来的,因此每个人的聊天记录文件名都不一样。
获取聊天记录文件
找到备份文件后,可以先看一下大小,根据自己的聊天能力进行一个评估,如果明显不匹配的话,可以再看看‘message_2.sqlite‘、‘message_3.sqlite‘等对应的备份文件大小。各个数据库的差距还没比较过,因为我想要的聊天记录在第一个库里就找到了
对于感觉差不多的文件,老规矩复制出来,然后改个名字,后缀改成'.sqlite',打开,里面有一堆‘Chat_‘开头的表,后面依旧是md5。
结束
简书的编辑器真难用。