微信,毫不夸张的说,简直就是一个爱与恨的结合体,它可能有100种好,但也同时有1000种坏,它的功能满足了中文互联网上亿用户的沟通问题,但不能导出微信聊天记录这一个痛点,不仅让我在备份数据时手足无措,看到手机空间占用时更是要发疯。你的数据不是你的,你可以备份到额外的机器上,但是微信不会有云备份,一次误删除的经历就足够让你感受到人生被刷新时的一瞬间空白,好像自己的过去不复存在。

搜一搜GitHub,你可以看到不少的微信备份工具,你会注意到他们基本上都是为iOS用户而服务,其核心原理大同小异,获取iTunes的备份数据,然后从备份数据中提取出微信的聊天记录数据库,然后以各种作者熟悉的形式导出到本地。这些工具不是不能用,但是他们都有几个类似的问题阻碍了你的脚步:

1. 正确运行需要各种依赖,python,node.js,npm不一而足,你得自己安装,导出个微信记录感觉自己分分钟都要变身开发拯救世界了;

2.  没有UI,大多数只是简单的命令行工具;

3. 导出后根本没有办法好好查看,一堆文本,所有的浪漫都输给了简陋;

4. 作者弃更概率相当高,你可能完全是下载到了一个几年前临时起意所开发的工具。

你根本没有勇气去试一下,两个字,折腾!这些问题总结起来无非就是工具作者只是处于个人的兴趣爱好亦或者临时需求所做的,它不是产品,不是面向用户所开发的。

最近发现了这个软件WX Backup,支持windows和macOS,有个相当完美的UI操作界面,导出后可以在浏览器中查看,完全模仿微信界面,给你最熟悉的味道。官网在此

教程

这个软件使用起来相当的傻瓜化:

1. 打开iTunes;

2. 备份你的iOS设备数据,注意不要选择加密备份,否则这个工具无法读出你的数据,iTunes的备份路径一般不做改动;

不要加密本地备份

3. 打开 WX Backup(免安装),你可以在下方的列表中看到你所有的微信聊天记录,前面是id,后面是聊天记录总数,群聊天记录也支持导出;

4. 选择你想备份的数据,导出到文件夹即可

聊天记录导出界面

5. 打开备份文件夹,内部以微信id做文件夹分类聊天记录,点开你想浏览的id,里面有一个index.html,点击打开,然后根据你的数据量稍等片刻,便可以看到你的聊天记录;

还算不错的浏览器浏览体验

问题

这是一个相对比较成熟的产品了,作者很用心,但是目前还是有一些体验上的问题,请注意:

1. 因为导出后的数据是通过浏览器查看的,如果的你的聊天记录像我一样,高达30w+条,那么请注意,你还是放弃打开它吧,因为根据导出的html代码来看,作者将所有的聊天记录是放置在message.js中,然后直接加载到内存中的,因为不仅仅是文字数据,还有你在聊天时发送的图片,视频数据,所以对内存的开销相当的大,当数据量过大时,浏览器崩溃的几率100%。

2. 我这边语音导出有问题,目前可以显示有语音,文件夹中audio文件夹内不存在任何的数据,因此实际上不能播放,作者放出的demo中语音是正常播放的,应该是微信数据出现了变化有关;

3. 不能分段备份,也就是你只能一次性备份完你选中的用户的所有数据,而不能选择只备份其中的一部分,相当的难受;

4. 目前仍未支持批量导出。

一点点建议

上述的两个问题中,第一点其实是能解决的,我个人的方法是用python写了一个分割脚本,将我那36w条数据分割成了15个子文件,但是因为时间有限,这个脚本目前不具有通用性,我暂时先不做分享(给自己挖个坑)。

basic文件夹被大卸十五块

作者导出的数据文件其实是一段XML数据结构,有一定的代码基础看着数据层次自己写一个简单的分隔脚本还是没有问题的,当然中间其实有很多的坑,我在想自己忙完这段时间的话可能会好好写一个通用型的脚本去实现,当然如果有大神提前搞出来别忘了分享一下哈(^◇^)。

我简单总结了一下message.js中的数据结构,整体的结构类似于一个三明治结构:

用户信息(包含用户id,用户类别,用户名,用户备注名,用户头像等,注意这一段只有对方的信息)

{"id":{"type":"person","from":"wxid_xxxxx"},"owner":{"user":"xxxxxx","name":"用户名","head":"http://wx.qlogo.cn/mmhead/ver_1/vtoyMbjppWdlDlBynwPLTctP5bAhqvXVn2ALvSgFRzrJ68ibuiasvNsJ145kZV9WMzQMdIN0Fp25taSFuawDV4kg/132"}

--------------

 聊天记录(包含消息ID,消息时间,消息类型,消息来源,消息内容),整体在message节点下

注意:消息ID超过某一个数值后会重置

{"m_uiMesLocalID":2,"m_uiMesSvrID":7693408993396497331,"m_uiCreateTime":1567067786,"m_uiMessageType":1,"m_nsFromUsr":"wxid_xhi5co17qizm21","m_nsToUsr":"xxx","m_nsRealChatUsr":"","m_nsContent":"想问问你?[Concerned]"} , {"m_uiMesLocalID":3,"m_uiMesSvrID":6916089004478663355,"m_uiCreateTime":1567067791,"m_uiMessageType":1,"m_nsFromUsr":"xxx","m_nsToUsr":"wxid_xhi5co17ccc1","m_nsRealChatUsr":"","m_nsContent":"可以啊"}

--------------

 用户信息(包含消息双方的信息,其数据结构与第一段一致,此处如果只有两个人聊天的话会是固定的形式)。

"member":{"wxid_xhi5co17qizm21":{"name":"JingX","head":"http://wx.qlogo.cn/mmhead/ver_1/3BpBeIUT5JFroI6Lv9qCX9icdDnnc1t9wiaibop0akUgy3aAvQcAjBRbC5wtDa4uNYTXhliaaQwkOKs2EzhZhhDfTpFeic2LOTwWkQjpUVYfx6d8/132"},"xxxx":{"name":"xxx","head":"http://wx.qlogo.cn/mmhead/ver_1/vtoyMbjppWdlDlBynwPLTctP5bAhqvXVn2ALvSgFRzrJ68ibuiasvNsJ145kZV9WMzQMdIN0Fp25taSFuawDV4kg/132"}

总结

没有产品是完美的,但是这个软件已经迈出了坚实的第一步,它能解决微信数据不能导出的问题,同时还有更多的问题仍需要解决,但是它让我看到了一丝曙光,哪怕只是这一点点的迈进,都已经极大的改善了数据导出的体验,唯一希望的就是作者不会弃坑了,毕竟它也有一段时间没有更新了。