如何使用PyObjC修改ABPerson实例?

时间:2013-06-17 03:46:54

标签: python objective-c macos applescript

我正在尝试对OS X上的一个非常大的地址簿进行一些修复。我想以编程方式执行此操作,因为这将是一项非常强烈的手工操作。考虑到我对Python的熟悉,我认为我可能会使用PyObjC。

我可以使用PyObjC的模块AddressBook来解决,但我似乎无法做出任何改变:

>>> import AddressBook
>>> ab = AddressBook.ABAddressBook.addressBook()
>>> p = ab.people()[0]
>>> p.isReadOnly()
True
>>> p.valueForProperty_('First')
u'Foo'
>>> p.setValue_forProperty_('Bar', 'First')
False
>>> p.valueForProperty_('First')
u'Foo'
>>> type(p)
<objective-c class ABPerson at 0x7fff76e01ab8>

我的第一个问题是我可以通过这种方式编辑/修改联系人/人吗?我的第二个问题是,对于这类工作,我还可以使用ScriptingBridge与联系人应用程序进行联系,使用AppleScript甚至PyObjC(或其他人)对联系人进行更改。这比使用“低级”API更好吗?

修改 我使用ScriptingBridge尝试了一些方法,普通的旧AppleScript和Python。即使我调用地址簿的save()方法,我对所有联系人脚本修改的方法都会失败。我是否需要编辑某些系统设置以允许编写联系人脚本?

修改 为了记录,我正在运行OS X Mountain Lion 10.8.3

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。在运行上面的脚本后查看控制台中的错误,我看到许多错误看起来像:

AOSKit ERROR: (-) RAF: Invalid url -- https://[myemail]@webdav.facebook.com/[myfbid]/contacts/

(电子邮件和ID当然已更改)。我在OS X首选项中设置了“Facebook”帐户。通过有根据的猜测,我删除了这个Facebook OS X帐户,然后重新添加它。之后,上面的脚本可以正常工作。