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
- 下一篇: python 编写一个函数来验证输入的字