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

我正在尝试编写一个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 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