2009-05-29 60 views
3

我想写一个AppleScript来查询iCal,并找到我在给定的日期,在任何日历中的所有事件。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不是很熟悉,因此我想我正在做一些有着严重性能问题的愚蠢东西。

任何人都可以解释为什么这需要执行多少?任何人都可以提出一些改进我的代码的方法吗我现在要开始检查事件的日期,以及循环中的条件。我怀疑必须有带有日期搜索事件(如动作的Automator一样)的方式,但我一直没能找到一个“原生”的方式来做到这一点....

编辑 :我正在使用Mac OS X Tiger(10.4)。新版本的iCal可能改进了可用的操作库。

回答

5

我一直在努力解决这个今天发现你可以按日期过滤(至少在雪豹上)所以

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 

将返回所有未来事件的摘要,并且与迭代所有事件相比非常快。

+0

太棒了!非常感谢!我完全失去了对这个问题的信心:) – nozebacle 2010-03-08 19:39:11

0

我最初的意图是只选择给定日期的事件,但显然在iCal中没有方法只访问特定日期的事件。

因此,总是需要查看每个日历中注册的所有事件。感兴趣的单个日历事件即使,说“今天的会议”,就必须要经过整组事件。

我在网上不使用苹果脚本发现身边的最佳替代品,而是他们的过程,其中的信息是实际存储的“芯片”的文件。

供参考,这些文件位于“〜/资源库/ ApplicationSupport/iCal的”。

3

这不是AppleScript,但其他一些方法中最好的做法似乎是iCalBuddy,它使用公共Cocoa API而不是直接解析日历文件并合理处理重复事件。

icalBuddy -nc -eed -iep title,datetime eventsToday+1