我想从Ruby访问适用于Rails应用程序的Mac应用程序数据(通讯簿,邮件)。
this answer上的所有内容似乎已经死亡。我尝试安装RubyOSA,我认为因为错误的Ruby版本而失败了(我从Python过来而且我的知识很简陋)。不再支持appscript。同样RubyCocoa。无论如何,我不想创建可可应用程序(RubyMotion)。
任何人都可以建议我如何启动,例如Ruby中的mac地址簿客户端,可以读写它吗?
非常感谢。
答案 0 :(得分:1)
正如你所说,许多选项已经过时,不再适用。但是,我认为用纯Ruby做这件事很难。我建议你让你的ruby代码能够执行你可以添加到项目中的一些AppleScripts。比如第一个AppleScript代码示例,我已经添加了下面的内容。该脚本将地址簿数据转储到文件中。 vCard格式(https://en.wikipedia.org/wiki/VCard)。
然后查看这个gem,然后再次可以在ruby代码中读取AppleScript创建的文件。 https://github.com/sam-github/vpim
让ruby执行AppleScript文件,再次从临时文件转储数据或从中读取数据不是最佳解决方案,但它应该完成工作。其他选择将更具技术性,最有可能包括ruby扩展写作或更糟糕。
如果您需要编辑地址簿中的数据,我建议您查看下面的第二个AppleScript代码示例。解决此问题的最佳方法可能是制作编辑脚本的模板,并使ruby更改其中的所需值,然后执行脚本。您还可以在此处查看更多高级示例:http://www.macosxtips.co.uk/index_files/bulk-edit-address-book-contacts.php
要执行脚本,请使用" osacript"命令。使用文件作为参数,例如" osacript example.scpt"。或者你可以内联:
osascript -e 'tell application "Contacts" to quit'
从地址簿转储数据:
set myBackupName to "AddressBook.vcf"
-- Add timestamp and Documents path
set myTimeStamp to (year of (current date)) & (month of (current date) as number) & (day of (current date))
set myBackupPath to the (path to the documents folder as string) & myTimeStamp & "-" & myBackupName as string
-- Remove any existing back up file created today
tell application "Finder"
if exists (file myBackupPath) then
delete file myBackupPath -- move to trash
end if
end tell
-- To work on Mac OS X 10.4 - 10.7, change "Contacts" to "Address Book".
tell application "Contacts"
-- Create an empty file
set myBackupFile to (open for access file myBackupPath with write permission)
repeat with per in people
write (vcard of per as text) to myBackupFile
end repeat
-- Close the file
close access myBackupFile
end tell
更改地址簿中的数据:
tell application "Address Book"
repeat with i from 1 to (count every person)
set phoneProperties to properties of phones of person i
repeat with j from 1 to (count of phoneProperties)
if value of item j of phoneProperties contains "020 6704 3205" then
set value of item j of phones of person i to "020 1523 6843"
end if
end repeat
end repeat
save
end tell