首先来看好友列表。好友列表在WCDB_Contact.sqlite文件中。这个库里面有6张表,好友列表在Friend表里。
看一下建表语句:CREATE TABLE Friend(userName text primary key on conflict replace, type integer default 0, certificationFlag integer default 0, imgStatus integer default 0, encodeUserName text, dbContactLocal blob, dbContactOther blob, dbContactRemark blob, dbContactHeadImage blob, dbContactProfile blob, dbContactSocial blob, dbContactChatRoom blob, dbContactBrand blob, _packed_DBContactTable blob, dbContactOpenIM BLOB, extFlag INTEGER DEFAULT 0, openIMAppid TEXT)
[消息类型1][消息长度1][消息内容1][消息类型2][消息长度2][消息内容2][……]
消息类型占一个字节,消息长度占1个字节,消息内容占的字节即为消息长度;
先取第i位(i=0),获取消息的类型。取后一位(i 1),这个说明的是后面正文的长度len,假设你取得的值是15然后从(i 2)开始,截取len=15个字节,转换成字符串就是正文了设置i=i 1 len 1,重复重复1-4,直至读取完所有字节为止
找到了好友列表,那么我们再来看聊天记录。聊天记录存储在MM.sqlit和message_1.sqlit~message_4.sqlite这几个文件中。这几个文件的结构是相同的,都保存了好友的聊天记录,每个好友的聊天记录在一张表里。
2.备份手机数据
备份好数据后,我们可以先预览一下数据的格式,看看数据的格式。
2.1查看备份文件
这个软件虽然收费, 但是其免费功能对我们来说已经够用了. 打开这个软件, 可以看到如下界面:
这里我们需要导出WCDB_Contact.sqlite,MM.sqlite,message_1.sqlite~message_4.sqlite这些数据库文件。
2.2SQLITE查看备份数据库使用SQLITE查看导出的sqlite文件。如WCDB_Contact.sqlite中的Friend表
3.程序导出聊天记录
确定好了实现路线后,开始在github上查找可用的开源软件。查找的标准是项目最后更新时间越新越好,需要能在windows系统上运行,如果能开箱可用最好。
3.1 Python版
程序本身只有一个py程序文件和一个配置文件。按照使用说明进行配置,发现读出来的聊天记录很少。果然还是不能开箱即用,但是至少读出了聊天的好友信息。于是开始debug之路。
3.1.1缺失的聊天记录
虽然Python不会写,但是阅读别人的代码和进行简单的修改还是没问题的。
解决了上面的两个问题后,就能够完成聊天记录导出了。程序执行过程如下:
导出的结果是每个好友、群的聊天记录都在一个excel文件中。
Contacts文件里面是好友信息,也就是Friend表里面的信息解析出来的内容。
Group文件夹里面存储了一些群的聊天记录,包括未保存到联系人列表的群聊也在里面。
而实际聊天记录导出的结果如下:
可以看出,它按时间顺序就聊天记录显示在excel,从一个互联网产品角度来看,它只实现了导出聊天记录的功能,并没有其他的特色,表情也没有显示,只是一个刚及格的产品。
3.2C#版本
虽然是2017年写的程序,但是看说明,是可以导出图片和语音为HTML格式,如果能用,那应该是极好的。下载源代码,本地运行。
开始运行的时候,不出意料,还是聊天记录缺少的问题。因此,对代码进行小修改,使得所有聊天记录都能正确加载。
导出的结果是一个html的页面和文件,有一个账号的导航页面。只是自己的头像不知道为什么是很早之前的。
头像未显示的是群聊或者同样不知原因未显示出来的好友头像。来看一下导出的结果:
看上去效果是不是高大上了一点,基本上已经达到90分了。剩下的一些小问题也就有缘再改了。整体上来说,修改开源代码花的时间还不如前期查找资料、寻找可用的开源代码所花的十分之。虽说编程语言只是工具,但工具的使用还是有熟练与否的区别。而像Python这种脚本语言,做这种一次性的项目有着天然的优势,不需要复杂的项目环境配置,也不需要一系列的编译器、IDE等。但是带来了问题就是程序调试、排查问题很困难。
4.写在最后
参考文献https://zhuanlan.zhihu.com/p/22474033http://www.voidcn.com/article/p-abaigxpj-bqh.htmlhttps://github.com/12425/wechat-exporterhttps://github.com/stomakun/WechatExport-iOShttps://www.cnblogs.com/felixnet/p/8019446.html