用于处理苹果二进制plist格式的Datasette插件
项目描述
datasette-bplist
Datasette插件,用于处理苹果的二进制plist格式。
此插件添加了两个功能:一个显示钩子和一个SQL函数。
显示钩子将检测任何使用二进制plist格式编码的数据库值。它将解码它们,将它们转换为JSON,并在Datasette UI中以美化打印的形式显示。
SQL函数bplist_to_json(value)
可以在SQL查询中使用,将二进制plist值转换为JSON字符串。然后,可以使用SQLite的json_extract()
函数或使用datasette-jq插件作为SQL查询的一部分进一步分析这些数据。
将此插件安装在与Datasette相同的环境中,以启用此新功能
pip install datasette-bplist
尝试使用
如果你使用Mac,你已经有很多包含二进制plist数据的SQLite数据库。
一个例子是驱动Apple Photos应用的数据库。
此数据库通常被锁定,因此你需要创建数据库的副本才能对其运行查询
cp ~/Pictures/Photos\ Library.photoslibrary/database/photos.db /tmp/photos.db
数据库还使用了自定义的SQLite扩展,这阻止了它打开在Datasette中。
你可以通过将你要实验的数据导出到新的SQLite文件中来解决这个问题。
我建议你尝试使用此插件对RKMaster_dataNote
表进行测试,该表包含关于你拍摄的照片的plist编码EXIF元数据。
你可以这样将此表导出到新的数据库中
sqlite3 /tmp/photos.db ".dump RKMaster_dataNote" | sqlite3 /tmp/exif.db
现在运行datasette /tmp/exif.db
,你就可以开始尝试此插件了。
使用bplist_to_json() SQL函数
一旦exif.db
演示工作正常,你就可以尝试使用bplist_to_json()
SQL函数。
这是一个查询,显示了您最常用于拍照的相机镜头
select
json_extract(
bplist_to_json(value),
"$.{Exif}.LensModel"
) as lens,
count(*) as n
from RKMaster_dataNote
group by lens
order by n desc;
如果您有大量照片,这个查询可能需要很长时间才能执行,因此您可能需要像这样增加Datasette强制执行的SQL时间限制
$ datasette /tmp/exif.db \
--config sql_time_limit_ms:10000
这是另一个查询,显示了您在图库中每张被分类为截图的照片的拍摄时间
select
attachedToId,
json_extract(
bplist_to_json(value),
"$.{Exif}.DateTimeOriginal"
)
from RKMaster_dataNote
where
json_extract(
bplist_to_json(value),
"$.{Exif}.UserComment"
) = "Screenshot"
如果您安装了datasette-cluster-map插件,这个查询将显示您最近1000张照片的地图
select
*,
json_extract(
bplist_to_json(value),
"$.{GPS}.Latitude"
) as latitude,
-json_extract(
bplist_to_json(value),
"$.{GPS}.Longitude"
) as longitude,
json_extract(
bplist_to_json(value),
"$.{Exif}.DateTimeOriginal"
) as datetime
from
RKMaster_dataNote
where
latitude is not null
order by
attachedToId desc
项目详情
datasette_bplist-0.1-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3befe172d5621287634020e933af9b531567782058a9c1e0f969bbb72488d192 |
|
MD5 | 198af42a127b8c2d953489b72fd0d6ec |
|
BLAKE2b-256 | 4714269ee90f057a4672a837a976f4cd96b8622469b2945ddcd62f46dec577db |