可以从他们的appdata中提取某个人的Skype聊天记录到我的地址吗?

时间:2016-10-14 08:37:22

标签: database chat history skype

我刚刚意识到在格式化我的电脑时我没有备份我的Skype应用数据文件夹。我喜欢的某个人的聊天记录现在已经丢失了。我知道有办法通过数据库查看器检查聊天记录(例如:Is there a way to access Skype IM logs?),但这不是我所追求的。

有问题的人是否可以与我分享我们的聊天记录,以便我可以将其插入我的Skype应用数据文件夹中,以便我可以在Skype中恢复我们的历史记录?

任何帮助表示感谢。

编辑:凭借我有限的数据库知识,我正在思考这样的事情:按联系人排序其他人的main.db文件(消息),过滤掉我的名字,提取它们并以某种方式将这些记录插入我的拥有自己的main.db文件。但当然记录会被颠倒过来。

1 个答案:

答案 0 :(得分:2)

Skype数据库文件的位置取决于您使用的OS和Skype版本,但是您始终可以搜索一部分消息,该消息必须位于DB文件中。

例如,我有Windows 10,我知道在数据库中必须有一个字符串“我们可以使用一个新的Droplet”,所以我使用了TotalCommander ALT + F7(在“查找文本”下方打勾,然后输入字符串) 。但是您也可以在Windows fileseek.ca或任何其他工具中使用。在Linux grep -rnw '/' -e 'your string here'(和其他操作系统Google)中。

From here我们获得了许多有用的信息,例如较旧的Skype版本默认位置为:C:\Users\Admin\AppData\Roaming\Skype\yourname,而我最新的Skype版本的DB文件位于:C:\Users\MYNAME\AppData\Local\Packages\Microsoft.SkypeApp_kzf8qxf38zg5c\LocalState\s4l-myusername.db

然后使用SQLite浏览器-例如sqlitebrowser.org并打开该文件。在较旧的Skype中,您需要浏览表“消息”,在较新的Skype表中"messagesv12"。您可以只导出所需的聊天,然后将其导入另一个数据库文件。您可能需要的大多数有用数据都位于JSON格式的第二列“ nsp_data”中。您可以在该列的过滤器区域的顶部键入,例如,您想要聊天记录的Skype用户名。使用此工具,您可以导出,也可以导入到另一个数据库文件。

我个人比较喜欢将所有数据都发送到MySQL,这样我就可以在日期/时间,消息的作者,对话伙伴和消息内容的各个列中使用不同的列。 In this answer,我获得了用于更新的Skype聊天记录的PHP代码,但是由于我还拥有一些较旧的Skype db格式,因此我还编写了一个从那里获取数据的代码:

$db = new SQLite3('db/main.db');
$results = $db->query('SELECT id, chatname, author, from_dispname, timestamp, body_xml FROM Messages');
while ($row = $results->fetchArray()) {
    if (strpos($row[5], $row[1]) !== false) $empty = 1; //In Skype there's many body XML's that just contain chat name. Maybe just adding contact or call?
    else {
        $empty = 0;
        $datetime = date("Y-m-d H:i:s", $row[4]); //I need date/time instead timestamp
        echo 'ID: ' . $row[0] . ', Chatname: ' . $row[1] . ', Author: ' . $row[2] . ', From displayname: ' . $row[3] . ', Date/time: ' . $datetime . ', Message: ' . $row[5] . '<br>---------<br>';

        //var_dump($row);
    }
}