从 Apple 地址簿数据库中导出联系人

问题描述 投票:0回答:1

Apple 将地址簿数据存储在本地

sqlite3
数据库中。我想以干净一致的格式为所有联系人导出姓名和号码

数据库位于:

 /Users/kellygold/Library/Application\ Support/AddressBook/Sources/<RANDOMSTRING>/AddressBook-v22.abcddb
其中RANDOMSTRING是生成的文件名

在数据库中有一个表

ZABCDPHONENUMBER
带有字段
ZFULLNUMBER
但值存储不一致

注意不同的格式:

(111) 222-3333, +12223334444, 1112223333, +1 (222) 333-4444
。有些号码只以一种格式出现,有些号码有多行,同一联系人有多种格式

生成这个的查询:

SELECT DISTINCT
    ZABCDRECORD.ZFIRSTNAME [FIRST NAME],
    ZABCDRECORD.ZLASTNAME [LAST NAME],
    ZABCDPHONENUMBER.ZFULLNUMBER [FULL NUMBER]
FROM
    ZABCDRECORD
    LEFT JOIN ZABCDPHONENUMBER ON ZABCDRECORD.Z_PK = ZABCDPHONENUMBER.ZOWNER
ORDER BY
    ZABCDRECORD.ZLASTNAME,
    ZABCDRECORD.ZFIRSTNAME,
    ZABCDPHONENUMBER.ZORDERINGINDEX ASC

所需的输出平面,前面的国家代码可选:

FIRST NAME, LAST NAME, FULL NUMBER
asdf, fghj, 2223334444
bbbb, cccc, 12223334444

目前我通过将 SQLITE 查询导出为 JSON 并运行这个非常 hacky 的解决方案来处理数据

cat adbExport.json| jq '.[] | select(.["FULL NUMBER"] != null)' | sed 's/+//g'\ | sed 's/ //g' | sed 's/-//g' | sed 's/(//g'| sed 's/)//g' | jq '{FIRSTNAME: .FIRSTNAME, LASTNAME: .LASTNAME, FULLNUMBER: ("+1"+ .FULLNUMBER)}' | sed 's/+11/+1/g' > cleanContacts.json

这会生成我可以使用的有效 JSON。 (为了安全而混淆的数据)

...
{
  "FIRSTNAME": "AnXXX",
  "LASTNAME": "ZuckXXX",
  "FULLNUMBER": "2068901111"
}
{
  "FIRSTNAME": "Nick",
  "LASTNAME": "fromHay",
  "FULLNUMBER": "262443XXXX"
}
...

如何直接从数据库查询执行此操作?

macos sqlite contacts
1个回答
0
投票

试试这个:

#!/usr/bin/env bash

sqlite3 ~/Library/"Application Support"/AddressBook/Sources/*/AddressBook-v22.abcddb<<EOF
.mode json
SELECT DISTINCT
    ZABCDRECORD.ZFIRSTNAME [FIRST NAME],
    ZABCDRECORD.ZLASTNAME [LAST NAME],
    ZABCDPHONENUMBER.ZFULLNUMBER [FULL NUMBER]
FROM
    ZABCDRECORD
    LEFT JOIN ZABCDPHONENUMBER ON ZABCDRECORD.Z_PK = ZABCDPHONENUMBER.ZOWNER
ORDER BY
    ZABCDRECORD.ZLASTNAME,
    ZABCDRECORD.ZFIRSTNAME,
    ZABCDPHONENUMBER.ZORDERINGINDEX ASC;
EOF

我得到的结果是:

[{"FIRST NAME":null,"LAST NAME":null,"FULL NUMBER":null},
{"FIRST NAME":"Philippe","LAST NAME":"surname","FULL NUMBER":"+188888888"}]
© www.soinside.com 2019 - 2024. All rights reserved.