java导出excel_如何导出你和女票的微信聊天记录
正文共:2497 字 16 图
预计阅读时间:7 分钟
前言
Sun和Star已经在一起将近两年了。
从两年前的夏天高考结束两个人加了微信,到现在,已经产生了不计其数的聊天记录.......
就在某一天,当Star打算看一看之前的聊天记录而因为聊天记录太多微信崩溃的时候,他觉得,是时候把微信聊天记录导出到电脑上了。
更何况,这样相当于有了一个备份,降低了这么多珍贵的聊天记录丢失的风险~
经过观察,Star发现,不像QQ一样可以方便的在应用内直接导出,微信的聊天记录是无法导出成一些方便可视化查看的格式的。目前支持的功能,似乎只有在不同设备之间同步聊天记录:
于是Star开始Google相关信息,发现在网上的大部分攻略都是针对IOS的......即使有针对安卓手机的教程,它们的年代都相对久远,看起来不太靠谱。
最终,Star定位了两篇相对有用的攻略(链接放在文末)。最终目标是,把聊天记录导出到excel中,其中包含消息发送时间,发送人以及聊天具体文字内容。
1.提取原始数据库
一般来讲,在使用安卓文件系统的手机里(Star的手机是小米),微信聊天记录应当存储在:
根目录/data/data/com.tencent.mm/MicroMsg
之中,如下图:
一般加密的数据库文件在两个长名字文件夹之一,需要自己寻找,于是Star查看了一下两个文件夹的大小:
显然聊天记录在后面的文件夹里......打开文件夹,会找到EnMicroMsg.db这个文件,这是一个数据库文件,但是它没法直接打开,因为它是加密的。
2.获取数据库密码
那么怎么得到密码呢?目前各种资料得出的密码获取方式是 的MD5码前七位。也就是上图中提到的第一种方法。
我们可以手动去寻找这些信息来得到密码,简单来讲就是:
手机IMEI号:拨号界面输入*#06#即可,(双卡双待手机两个串号,需要自行尝试)
微信UIN号:这个号存储在如下文件中:
/data/data/com.tencent.mm/shared_prefs/system_config_prefs.xml
打开文件,找到:
value的值就是微信的UIN号。
但是!Star在Github上找到了现成的java代码(连接在文末,需要相应环境才能运行)。
将CompatibleInfo.cfg和systemInfo.cfg以及EnMicroMsg.db复制出来,然后和IMEI.java放到同一目录下,运行代码即可得到密码:
3.打开并导出
输入密码,打开数据库(可以使用sqlcipher):
这个软件支持直接导出csv格式,File-Export-Table as CSV file,找到message导出即可:
4.处理数据
到了这一步,Star本以为大功告成,但实际上还远远没有QAQ。
最主要的两个问题:
1.目前导出的数据是微信中的全部聊天记录,而不仅仅是Sun和Star的聊天记录。
2.现在这个文件太大了,里面有很多我们不需要的信息,需要进一步处理。
既然都导出csv文件了,那直接用excel处理不就好了?确实,Star一开始也是这么想的......然鹅,在打开这么大的一个文件的过程中,Star的电脑死机了......
好吧,既然先打开浏览不可取,那就只能直接处理了,Star首先在攻略中看到了网上其他人打开这个csv文件后总结出的数据存储规律:
如图可以看到,我们主要关注的是四个信息:
1.isSend:0则为对方发的消息,1是自己发的消息
2.createTime:10位UNIX时间戳,可以算法转换为标准时间
3.talker:这个是关键,你与某个联系人的对话就为一个taker id,锁定了它就锁定了你与她的所有对话
4.content:聊天文字内容
好,那么我们的思路就很清晰了,只要找到对应的talker值,然后提取出来,然后再提取对应的四列数据就可以了!
实际操作中,可以用matlab或者python的pandas、csv库来实现对数据的直接处理。
但是!Star在知乎上找到了一个读数据神器——EmEditor!(emeditor.com)Emeditor具有专门针对大文件的优化,内置了大文件控制器,用它打开这个将近200MB的csv文件只需要几秒钟!
Star热泪盈眶地打开了message文件,一眼就看到了他和Sun的第一段聊天记录。
那么现在的显示方式是纯文本显示,我们可以按照逗号分隔来显示表格(在上方工具栏“CSV/排序”中):
现在已经一目了然了,Emeditor内置了查找提取等操作,于是把“talker”对应的值为你想要的联系人的行全部提取出来,导出到一个新的csv文件中,就可以啦!
导出之后的文件果然小多了,可以成功地用excel打开:
接下来,Star发现,时间显示格式还是UNIX时间戳,非常不方便。还有,在聊天记录中其实有很多内容是没用的(比如红包、表情包、图片,在数据库里都是按一串链接的格式存储的)。
要做的事情:把UNIX时间戳转换成北京时间;把聊天记录“content”一栏中真正包含文字的行提取出来。
转换时间:对应excel公式(B为存储时间的栏):
=(B+8*3600)/86400+70*365+19
转换之后,再调整单元格日期显示格式为日期加时间就可以了。
提取文字:对应excel条件(D为存储内容的栏):
LENB(D)>LEN(D)
LENB对单元格内容计数时,会把汉字当成2字节来算,而LEN计数时,无论什么字符都按1字节来算。如果LENB的值大于LEN的值,就代表单元格内含有汉字。
最后:导出效果是这样的:
基本已经成功了!接下来就可以对聊天记录一通分析了hhhh......比如统计什么词出现次数最多啊之类的。甚至还可以制作一个年度总结~
相关攻略:
https://zhuanlan.zhihu.com/p/28935173
https://github.com/Heyxk/notes
Excel时间戳转换:
https://blog.csdn.net/u013347671/article/details/78062601
总结
以上是生活随笔为你收集整理的java导出excel_如何导出你和女票的微信聊天记录的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: iphone双卡_内部消息:iPhone
- 下一篇: android 蓝牙 鼠标 app_邂逅