contacts — 访问iOS上的联系人数据库
contacts
模块允许你读取和修改iOS联系人(地址簿)数据库。
注意: 首次
contacts
导入模块时,将显示系统提供的权限对话框。如果你拒绝访问,get_all_people()将
始终返回一个空列表。如果你以后改变主意,则可以允许从应用“设置”中的“隐私”部分访问你的联系人。
快速入门
作为读取地址簿中信息的简单示例,让我们从一个打印出所有在“备注”字段中带有文本的人的脚本开始:
1 | import contacts |
该脚本使用get_all_people()
函数来检索通讯簿中所有Person
对象的列表,遍历该列表,并为每个具有(非空)Person.note
字段的人打印名称和备注。
作为一个稍微复杂的示例,此脚本打印出生日即将到来的列表(以从现在开始的天数):
1 | import contacts |
备注和生日字段非常易于使用,因为每个人只有一个。许多其他字段可以具有多个值,例如,一个人可以拥有多个电子邮件地址。这些字段表示为元组列表,每个元组包含一个标签(例如,“home
”,“work
” …)和实际值。Person.email
属性的示例为[('home', 'me@example.com'), ('work', 'work@example.com')]
。
到目前为止,我们仅从通讯录数据库中读取信息,但是你也可以使用contacts
模块进行更改。因为前面的示例使用了一个简单的单值属性,所以让我们现在使用更复杂的Person.address
属性,该属性表示为多个字典的列表,每个字典都包裹在一个包含标签(例如“home
”,“work
”)的元组中。让我们将居住在柏林的所有人的国家更改为德国:
1 | import contacts |
请注意,我们在地址字典中使用了常量作为键–你可以在本文档的末尾找到这些键的列表。对通讯簿进行任何更改后,你必须调用save()
函数以使它们持久化。
请注意,所有多值属性均作为“快照”返回。除非你重新分配属性,否则直接修改这些列表无效。
函数
contacts.get_group(group_id)
返回具有给定ID(整数,Group.id
)的Group
。
contacts.get_all_groups()
返回通讯簿中所有Group
对象的列表。
contacts.add_group()
将一个Group
添加到通讯簿。
contacts.remove_group(group)
从通讯簿中删除一个Group
。
contacts.add_person(person)
将一个Person
添加到通讯簿。
contacts.remove_person(person)
从通讯簿中删除一个Person
。
contacts.find(name)
对给定名称进行前缀搜索,并返回所有匹配记录的Person
列表。
contacts.get_all_people()
返回通讯录中所有人员的列表。每个列表条目都是一个Person
对象。
contacts.get_person(person_id)
返回具有给定ID(整数,Person.id
)的Person
。
contacts.save()
将所有待处理的更改保存在联系人数据库中。更改Group
或Person
对象的任何属性后,必须调用此函数才能使更改持久化。
contacts.revert()
还原联系人数据库中所有未决的更改。
contacts.localized_label(label)
返回在多值属性中使用的标签的本地化版本。
contacts.is_authorized()
如果当前允许访问通讯簿,则返回True
;否则返回False
(例如,如果尚未显示权限对话框,或者由于家长控制而拒绝访问)。
群组对象
class contacts.Group
一个Group
对象表示在地址簿中一组朋友,家人或同事。初始化Group
对象并设置其name
属性后,可以通过调用add_group()
将其添加到地址簿数据库。修改组的名称后,必须调用save()
函数才能使更改持久化。
Group.name
群组的名称,例如“朋友”或“家庭”。
Group.id
通讯录中组记录的持久标识符(int
,只读),或者-1:尚未保存该组。id
可以与get_group()
函数一起使用。
人对象
class contacts.Person
Person
对象代表通讯录中的人。初始化Person
并设置其各种属性后,可以通过调用add_person()
将其添加到地址簿数据库中。修改任何属性后,必须调用save()
函数以使更改持久化。
许多属性可以具有多个值,例如,一个人可以具有多个电子邮件地址(工作,私人,…)或电话号码(家庭,移动,…)。这些属性中的每一个都表示为2元组的列表,每个元组包含一个标签和实际值。例如,这可能是一个人的email
属性的内容:[('home', 'foo@work.com'), ('work', 'foo@work.com')]
。尽管可以使用任何字符串作为标签,但建议在本文档末尾使用常量之一。这些标签看起来像’_$!<Work>!$
‘,但是将在UI中进行本地化。你可以使用localized_label()
函数获得标签常量的本地化表示。
Person.address
街道地址(多字典)。使用常数contacts.STREET
,contacts.CITY
,contacts.STATE
等作为关键字。
Person.birthday
生日(datetime.datetime
)。
Person.creation_date
将该人添加到地址簿的时间(只读,datetime.datetime
)。
Person.department
部门(字符串)。
Person.email
电子邮件地址(多字符串)
Person.first_name
名字(字符串)
Person.first_name_phonetic
名字拼音(字符串)
Person.full_name
人的全名(只读,字符串)。要修改名称,使用Person.first_name
,Person.last_name
和Person.middle_name
属性。
Person.id
人记录的永久标识符在地址簿中(int
,只读),或者-1:人员尚未保存。id
可以与get_person()
函数一起使用。
Person.image_data
人的图像,例如照片(代表常见图像文件格式(如PNG或JPEG的字节字符串,如果未设置图像则为None
)。
Person.instant_message
即时消息帐户(多词典)。
Person.job_title
职务(字符串)。
Person.kind
地址簿记录的类型(0对于一个人,1对于一个组织,它是整数)。
Person.last_name
姓氏(字符串)。
Person.last_name_phonetic
姓氏拼音(字符串)。
Person.middle_name
中间名(字符串)。
Person.middle_name_phonetic
中间名拼音(字符串)。
Person.modification_date
上次修改的时间(只读,datetime.datetime
)。
Person.nickname
昵称(字符串)。
Person.note
备注(字符串)。
Person.organization
组织(字符串)。
Person.phone
电话号码(多字符串)
Person.prefix
前缀,例如“Sir
”,“Duke
”,“General
”(字符串)。
Person.related_names
相关名称(多字符串)。
Person.social_profile
社交资料,例如Twitter
帐户(多字典)。
Person.suffix
后缀,例如“Jr.
”,“Sr.
”,“III
”(字符串)。
Person.url
URL,例如主页(多字符串)。
Person.vcard
VCard表示个人数据(只读,字符串)。
常量
多值属性的通用标签:
contacts.HOME
contacts.WORK
contacts.OTHER
Person.phone
多字符串属性的标签:
contacts.IPHONE
contacts.MAIN_PHONE
contacts.HOME_FAX
contacts.WORK_FAX
contacts.OTHER_FAX
contacts.PAGER
Person.related_names
多字符串属性的标签:
contacts.FATHER
contacts.MOTHER
contacts.PARENT
contacts.BROTHER
contacts.SISTER
contacts.CHILD
contacts.FRIEND
contacts.SPOUSE
contacts.PARTNER
contacts.ASSISTANT
contacts.MANAGER
Person.url
多字符串属性的标签:
contacts.HOMEPAGE
Person.address
字典键:
contacts.STREET
contacts.CITY
contacts.STATE
contacts.ZIP
contacts.COUNTRY
contacts.COUNTRY_CODE