whatsapp 数据库中每个媒体文件的链接在哪里
Where are the links to each media file in a whatsapp database
我想整理一个包含 Whatsapp 群组中所有照片的相册。
使用 root phone 我已经将未加密的 whatsapp 数据库下载到我的电脑上。
在 Ubuntu 上使用 Sqliteman 我环顾四周,特别是在 msgstore.db 中,似乎无法找到特定组图像的所有链接。
使用 table "chat_list" 我看到一个特定的 "key_remote_jid" 值对应于我想要的组并且在 "messages" 数据库中我可以使用那个 "key_remote_jid" 获取与该组相关的所有消息,例如:
select * from messages where key_remote_jid="53151151515-1515131313535@g.us";
此外,我可以丢弃短信,以便通过
专注于我想要的媒体(主要是照片和视频)
select * from messages where key_remote_jid="53151151515-1515131313535@g.us" and not media_wa_type = 0;
有些图片在 "media_name" 列下有文件名,但它们只是我发送的。
还有一个名为 "media_refs" 的 table,它包含许多图像和视频路径,但似乎只包含已转发到多个聊天室且具有我没有的密钥的文件'找不到与 "messages" table.
的关系
该小组相当古老(可追溯到 2013 年),而且 whatsapp 处理其数据库的方式似乎多年来发生了变化,因为有些列在过去一直是 {null} 而不是大多数最近的消息(如 participant_hash)和值 key_id 似乎在某些时候更改了格式。
然而,Whatsapp 应用程序可以毫无问题地向我显示过去任何时刻的文件,并让我可以选择使用 "Gallery" 类型的软件打开实际文件,因此信息在我的 phone 某处。
所有这一切的重点是基本上有一个我可以使用的备份,并且能够从我的 phone 中删除图像,并且仍然按照它们在该组中共享的相同方式组织它们。
我在 table messages
的 thumb_image
列中找到了 Whatsapp Images 的 link 作为 blob
。您可以查看十六进制的 blob
并查找可能类似于 Whatsapp Images\IMG-20130101-WA0001.jpg
的字符串。我不知道 Whatsapp 正确存储 link 的确切位置,但这对我有用。
以下是我设法提取 links 的方法:
select
_id,
media_mime_type,
substr(
substr(thumb_image,instr(thumb_image,'IMG'),60)
,instr(substr(thumb_image,instr(thumb_image,'IMG'),23),'IMG')
,23)
from `messages`
where
`key_remote_jid` like '%<your desired contact>%'
and `media_mime_type` like '%image%';
我使用 DB Browser for SQLite
在 Windows 中执行此操作。
(Android) - 人们正在寻找的是 table message_media
中的 file_path
。它指向相对于 /sdcard/WhatsApp/ 的文件,其 message_row_id 引用 messages
table pk _id
。组 (<..>@g.us) key_remote_jid 的 where 条件应输出所有组图像文件路径。
select mm.file_path
from messages m
join message_media mm on m._id = mm.message_row_id
where m.key_remote_jid = 'xyz@g.us'
and m.media_wa_type = 1; -- 1 = images
(缩略图预览在消息 table 本身的 raw_data
中存储为 blob 字节)
我想整理一个包含 Whatsapp 群组中所有照片的相册。 使用 root phone 我已经将未加密的 whatsapp 数据库下载到我的电脑上。
在 Ubuntu 上使用 Sqliteman 我环顾四周,特别是在 msgstore.db 中,似乎无法找到特定组图像的所有链接。
使用 table "chat_list" 我看到一个特定的 "key_remote_jid" 值对应于我想要的组并且在 "messages" 数据库中我可以使用那个 "key_remote_jid" 获取与该组相关的所有消息,例如:
select * from messages where key_remote_jid="53151151515-1515131313535@g.us";
此外,我可以丢弃短信,以便通过
专注于我想要的媒体(主要是照片和视频)select * from messages where key_remote_jid="53151151515-1515131313535@g.us" and not media_wa_type = 0;
有些图片在 "media_name" 列下有文件名,但它们只是我发送的。
还有一个名为 "media_refs" 的 table,它包含许多图像和视频路径,但似乎只包含已转发到多个聊天室且具有我没有的密钥的文件'找不到与 "messages" table.
的关系该小组相当古老(可追溯到 2013 年),而且 whatsapp 处理其数据库的方式似乎多年来发生了变化,因为有些列在过去一直是 {null} 而不是大多数最近的消息(如 participant_hash)和值 key_id 似乎在某些时候更改了格式。
然而,Whatsapp 应用程序可以毫无问题地向我显示过去任何时刻的文件,并让我可以选择使用 "Gallery" 类型的软件打开实际文件,因此信息在我的 phone 某处。
所有这一切的重点是基本上有一个我可以使用的备份,并且能够从我的 phone 中删除图像,并且仍然按照它们在该组中共享的相同方式组织它们。
我在 table messages
的 thumb_image
列中找到了 Whatsapp Images 的 link 作为 blob
。您可以查看十六进制的 blob
并查找可能类似于 Whatsapp Images\IMG-20130101-WA0001.jpg
的字符串。我不知道 Whatsapp 正确存储 link 的确切位置,但这对我有用。
以下是我设法提取 links 的方法:
select
_id,
media_mime_type,
substr(
substr(thumb_image,instr(thumb_image,'IMG'),60)
,instr(substr(thumb_image,instr(thumb_image,'IMG'),23),'IMG')
,23)
from `messages`
where
`key_remote_jid` like '%<your desired contact>%'
and `media_mime_type` like '%image%';
我使用 DB Browser for SQLite
在 Windows 中执行此操作。
(Android) - 人们正在寻找的是 table message_media
中的 file_path
。它指向相对于 /sdcard/WhatsApp/ 的文件,其 message_row_id 引用 messages
table pk _id
。组 (<..>@g.us) key_remote_jid 的 where 条件应输出所有组图像文件路径。
select mm.file_path
from messages m
join message_media mm on m._id = mm.message_row_id
where m.key_remote_jid = 'xyz@g.us'
and m.media_wa_type = 1; -- 1 = images
(缩略图预览在消息 table 本身的 raw_data
中存储为 blob 字节)