gpt4 book ai didi

icloud - 使用 CardDAV 协议(protocol)在 iCloud 中操作组

转载 作者:行者123 更新时间:2023-12-01 10:47:32 28 4
gpt4 key购买 nike

我目前正在尝试通过 CardDav 协议(protocol)在 iCloud 中操作我的联系人列表组。为此,我在 Contact.app 中创建了一个包含联系人的组: Screenshot

当我直接从联系人应用程序导出联系人的 vCard 时,我的 CATEGORIES 属性中有与我的联系人关联的组:

BEGIN:VCARD
VERSION:3.0
PRODID:-//Apple Inc.//Mac OS X 10.9.2//EN
N:Lebron;Candide;;;
FN:Candide Lebron
ORG:Podbox;
NOTE:Un petit peu candide.
CATEGORIES:GroupForAutomaticTestDELTA
UID:d4c1baf6-f603-4fb5-8f19-d45eb1e7fb23
X-ABUID:D4C1BAF6-F603-4FB5-8F19-D45EB1E7FB23:ABPerson
END:VCARD

但是,当我请求 iCloud 服务器检索此联系人时,我没有设置 CATEGORIES 属性,但我检索了两张 vCard,一张用于联系人,一张用于组。组 vCard 包含对其成员的引用。

请求:

curl --request REPORT  --user ****@*****:**** --header "Content-Type: text/xml" --data '
<?xml version="1.0" encoding="utf-8" ?>
<C:addressbook-query xmlns:D="DAV:"
xmlns:C="urn:ietf:params:xml:ns:carddav">
<D:prop>
<C:address-data/>
</D:prop>
</C:addressbook-query>' https://contacts.icloud.com/802592377/carddavhome/card/

联系 VCard:

BEGIN:VCARD&#13;
VERSION:3.0&#13;
PRODID:-//Apple Inc.//Mac OS X 10.9.2//EN&#13;
N:Lebron;Candide;;;&#13;
FN:Candide Lebron&#13;
ORG:Podbox;&#13;
NOTE:Un petit peu candide.&#13;
REV:2014-06-12T16:53:51Z&#13;
UID:d4c1baf6-f603-4fb5-8f19-d45eb1e7fb23&#13;
END:VCARD&#13;

组电子名片:

BEGIN:VCARD
VERSION:3.0
PRODID:-//Apple Inc.//AddressBook 8.0//EN
N:GroupToBeAddedTO
FN:GroupToBeAddedTO
X-ADDRESSBOOKSERVER-KIND:group
X-ADDRESSBOOKSERVER-MEMBER:urn:uuid:d4c1baf6-f603-4fb5-8f19-d45eb1e7fb23
REV:2014-06-12T16:43:04Z
UID:d59c9f0c-27aa-47e3-96e7-43717bbc1d7e
END:VCARD

请注意 CATEGORIES 属性出现在联系人导出中,但没有出现在 CardDAV 请求中。我的猜测是,Contact 应用在导出时会构建 CATEGORIES,但我不确定。

有人知道 iCloud 是如何工作的吗?我是否遗漏了阻止我通过 CardDAV 检索 CATEGORIES 的内容?

最佳答案

好的。让我们从头开始。什么是 CardDAV 集合。 CardDAV 集合就像一个包含 vCard 文件的文件夹。有些(很多?)服务器允许多个这样的文件夹,有些则不允许。 iCloud(目前)属于后一类——服务器上只有一个“文件夹”来存储一个特定 iCloud 用户的所有 vCard。其他服务器有时将辅助 CardDAV 集合称为“组”。

什么是组。组是联系人的集合。 Addressbook.app 使用一个特殊的组 vCard 来表示这种关系。这个“组 vCard”通过 X-ADDRESSBOOKSERVER-MEMBER 属性引用了它的成员。它包含应该是该组成员的联系人 vCard(或其他组 vCard)的 UID。在 vCard 3 中——这是大多数 CardDAV 基础设施所使用的——这是苹果特有的(因此是 X-ADDRESSBOOKSERVER-xyz)。在 vCard 4 中,这已包含在规范中。

Addressbook.app AFAIK 不支持真正的 CATEGORIES(通常称为标签)。 vCard CATEGORIES 字段最初用于“VIP”或“Nice Guy”之类的内容,它本身不适用于“组”。现在,当 Addressbook.app 导出 vCard 时,它会尝试在 CATEGORIES 字段中保存组信息。这有点奇怪,但有点合理。 CardDAV 组仅在 CardDAV 集合中才真正有意义,组成员身份信息不包含在 vCard 本身中(但在该组的单独 vCard 记录中)。请记住,导出旨在在系统之间传输内容

旁注:如果您来自 Exchange/Outlook 世界:CardDAV 集合就像 Exchange 文件夹。 CardDAV 组类似于 Exchange 分发列表。

我想您真正想知道的是如何向 CardDAV 组添加/删除成员?假设您有这样的记录:

BEGIN:VCARD
UID:joe
N:User;Joe;;;
END:VCARD

并且您想将他添加到群组中,例如“ friend ”。假设组已经存在,它看起来像这样(有两个现有成员):

BEGIN:VCARD
N:Friends
FN:Friends
X-ADDRESSBOOKSERVER-KIND:group
X-ADDRESSBOOKSERVER-MEMBER:urn:uuid:AwesomeO
X-ADDRESSBOOKSERVER-MEMBER:urn:uuid:Xavier
UID:group-uid
END:VCARD

添加成员需要做的是获取组,然后添加UID,结果是这样的:

BEGIN:VCARD
N:Friends
FN:Friends
X-ADDRESSBOOKSERVER-KIND:group
X-ADDRESSBOOKSERVER-MEMBER:urn:uuid:AwesomeO
X-ADDRESSBOOKSERVER-MEMBER:urn:uuid:Xavier
X-ADDRESSBOOKSERVER-MEMBER:urn:uuid:joe
UID:group-uid
END:VCARD

有道理吗?

不要被导出的类别破解所迷惑。这不是小组的工作方式。

关于icloud - 使用 CardDAV 协议(protocol)在 iCloud 中操作组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24202551/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com