我想写一个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中'。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top