Applescript和iCal交互
我正在尝试编写一个AppleScript来查询iCal,并在任何日历中查找给定日期的所有事件 我从编写一个简单的脚本开始,该脚本对给定日历中的每个事件都执行一些简单的操作:Applescript和iCal交互,applescript,icalendar,Applescript,Icalendar,我正在尝试编写一个AppleScript来查询iCal,并在任何日历中查找给定日期的所有事件 我从编写一个简单的脚本开始,该脚本对给定日历中的每个事件都执行一些简单的操作: tell application "iCal" tell calendar "Reuniones" set the_events to every event repeat with an_event in the_events -- do something with every eve
tell application "iCal"
tell calendar "Reuniones"
set the_events to every event
repeat with an_event in the_events
-- do something with every event
set value to summary of an_event
end repeat
end tell
end tell
然而,这个简单的脚本需要花费大量的时间来执行(几秒钟),即使我在循环中没有做任何复杂的事情。我担心真正的脚本执行起来会花费很多时间
我对Applescript不太熟悉,因此我认为我在做一些愚蠢的事情,这会严重影响性能
有人能解释一下为什么要花这么多时间来执行吗?有人能提出一些改进我的代码的建议吗?我现在开始检查事件的日期,循环中有一个条件。我怀疑一定有一种方法可以搜索带有日期的事件(就像自动操作一样),但我还没有找到一种“本机”方法来这样做
编辑:我正在使用MacOSxTiger(10.4)。较新版本的iCal可能已经改进了可用的操作库。我最初的意图是只选择给定日期的事件,但显然iCal中没有只访问特定日期事件的方法 因此,总是有必要检查每个日历中登记的所有事件。即使对单个日历中的事件感兴趣,比如“今天的会议”,也有必要浏览整个事件集 我在网络上找到的最好的替代方案不是使用苹果脚本,而是处理实际存储信息的“ics”文件
作为参考,这些文件位于“~/Library/ApplicationSupport/iCal”中。我今天一直在努力解决这个问题,发现您可以按日期进行筛选(至少在雪豹上)。因此
将返回所有未来事件的摘要,与遍历所有事件相比,返回速度非常快。这不是AppleScript,但最好的方法是使用公共Cocoa API,而不是直接解析日历文件,并明智地处理重复事件
icalBuddy-nc-eed-iep title,datetime eventsToday+1
太好了!非常感谢!我对这个问题完全失去了信心:)但这并没有显示重复的事件。有什么办法吗?我最终放弃了AppleScript API,转而使用icalBuddy。你需要解析它的输出,但它的查询是在lea圣理智!
tell application "iCal"
set out to ""
set todaysDate to current date
set time of todaysDate to 0
repeat with c in (every calendar)
set theEvents to (every event of c whose start date ≥ todaysDate)
repeat with current_event in theEvents
set out to out & summary of current_event & "\n"
end repeat
end repeat
return out
end tell