题
我想写一个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老虎(10.4)。这是可能的的iCal的较新版本具有改进的可用操作的库中。
解决方案
我一直在努力解决这个今天发现,你可以按日期(至少在雪豹)滤波器。所以
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
将返回所有未来事件的总结,并很快,相对于通过所有事件迭代。
其他提示
这不是AppleScript的,但最好的一群其他方式来做到这一点的似乎是的 iCalBuddy ,该使用公共API的可可,而不是直接解析日历文件并处理明智重复事件。
icalBuddy -nc -eed -iep title,datetime eventsToday+1
我最初的意图是只选择某一特定日期的事件,但显然不会有在iCal方法只能访问事件的某一天。
因此,它始终是有必要对所有在每个日历记录的事件。感兴趣的单个日历事件即使,说“今天的会议”,就必须要经过整个事件集的。
我发现身边的最佳替代品在网络不使用苹果脚本,而是他们的过程,其中的信息是实际存储的“芯片”的文件。
作为参考,这些文件都位于 '〜/库/ ApplicationSupport / iCal中'。