我已经解析了Skype数据库main.db几天了,这是我还没想到的。当然,这个问题将特别针对Skype main.db结构。(免责声明)
似乎我需要的所有必要信息都在表Conversations
,Messages
,Participants
中。
Message
表包含已经说过的实际日志,收件人,时间戳和convo_id
外键(虽然没有强制执行)以连接到Conversation
消息属于。
Conversation
用于保存Message
和参与的联系人的汇总。
Participants
表适用于Conversations
表和Contacts
表之间的多对多连接器表。
我得到的是Chats
和Chatmembers
表。 Chatmembers
适用于Chats
Participants
表对Conversations
表的工作原理;连接联系人和对话 - 或“聊天”。
Chats
中的内容与Conversations
类似,只是它没有任何聚合到Message
表。无法将Messages
表映射到消息日志(Chats
表的行)所属的Messages
表。
Chats
和Conversations
共享一个外键,Conversations
表有一个名为chat_dbid
的列,它连接到Chats
表。但Conversations
表中的行有chat_dbid
字段,并且Chats
中的所有行都没有id
字段,对应{中的chat_dbid
字段{1}}表。
Chats
表格仍在更新中,我认识到最近我根据时间戳及其中的成员进行的一些聊天或对话。
有谁确切知道Chats
表的作用是什么?或者更确切地说,Chats
表和Chats
表的区别和理由是什么?
当我疯狂地看着这个时,我只能找到one like that talked about main.db structure,而且它没有用处。
根据链接Conversations
提供用户参与的聊天。
和Chats
提供用户参与的对话列表。
他们关于聊天和对话的术语是什么?他们有什么不同?
这让我发疯了。
答案 0 :(得分:4)
昨天我也在浏览skype的main.db表。以下是我的发现。
对话表唯一标识与特定联系人(或您创建的群组联系人)的对话。会话需要所有通信:聊天消息,语音消息,文件传输,与特定联系人进行的呼叫。大多数表都引用了此表中的条目。 消息表有convo__id, 聊天表有conv_dbid, 转移有convo_id和同样。
消息表:消息条目并不总是聊天。如果条目是聊天,则填充其聊天名称字段。 聊天和消息似乎有一对多的关系。 chat是按照某些标识符维护的消息集合(很可能是一天不确定)。 “type = 61”似乎是正常消息:用户输入的消息。其他类型似乎是例如自动生成的消息。如果呼叫断开,你会收到消息。
希望这有帮助。
答案 1 :(得分:2)
看起来Chats是多余的。消息被分组为聊天作为一个思想,您可以在一个对话中有几个聊天,然后在任何聊天之外有一些消息。分组规则不清楚,可能是时间。
通过将一堆消息的chatname
字段设置为相同的值来完成分组。聊天名称看起来像#SenderId/$TargetId;ChatId
或#SenderId/ChatId
,用于聊天群聊。
ChatIds似乎没有任何特殊含义,可能在不同的PC上有所不同。
并非每个聊天都会在聊天表中获得一个条目:SELECT DISTINCT(chatname) FROM Messages
提供的条目比SELECT * FROM Chats
多得多。并非所有进入chatname
的内容都是来自Chats的聊天名称。有时它是会话ID(== groupchat id或skypename)。
不同的Skype实例也会以不同的方式将相同的同步消息分组到聊天中。
所以基本上聊天并不重要,他们会随意分组消息,它们不包含任何关于谁发送给谁的关键数据。
这就是我理解其他表的工作方式:
Contacts
- 这是每个人都在数据库中提到skypename,甚至是你从未知道的人(在你当时正在收听的群聊中说了些什么)。 is_permanent
标记了您的联系人列表中的内容。
Conversations
- 这是您加入的实际联系人和群聊的联盟。这应该被视为“联系人列表”。如果您需要联系人,但绝不会发送消息,请添加Contacts WHERE is_permanent=1
。如果您只想要现有联系人,请按is_bookmarked
或类似内容进行过滤。
似乎没有重复和分裂。一个联系人=一个会话,一个群聊=一个会话。如果你正在与一对一的联系人谈话并且你添加了另一方,那么以前的消息仍然保留在该联系人的对话中,并且以下消息会得到他们自己的对话。
Messages
- 这是发送或接收的所有消息和事件:
convo_id
- 始终设置,始终引用对话。这是您识别邮件发送的联系人/群组聊天的方式。
chatname
- 总是设置,有时引用Chats的聊天,有时聊天不在Chats中,有时是来自Conversations的群聊ID或skypename。大多数情况下,这可以忽略,或者您可以通过视觉对该字段进行分组。
author
,from_name
- 当时发送此消息及其昵称的人,始终设置正确。
dialog_partner
- 非常不可靠,不同PC上同一邮件的值不同
participant_count
- 有时设置,有时不设置,与dialog_partner相同:不可靠。
identities
- 提及与该事件相关的所有skypenames,有时则不提及。规则不明确,不可靠。