【问题标题】:Applescript and iCal interactionApplescript 和 iCal 交互
【发布时间】:2010-10-30 00:30:00
【问题描述】:

我正在尝试编写一个 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 可能改进了可用的操作库。

【问题讨论】:

    标签: applescript icalendar


    【解决方案1】:

    我今天一直在努力解决这个问题,发现您可以按日期过滤(至少在 Snow Leopard 上)。所以

    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 API,转而使用 iCalBuddy。你需要解析它的输出,但它的查询至少是理智的!
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      因此,始终有必要检查每个日历中注册的所有事件。即使对单个日历中的事件感兴趣,比如“今天的会议”,也有必要查看整个事件集。

      我在网上找到的最佳替代方案不使用 Apple Script,而是处理实际存储信息的“ics”文件。

      作为参考,这些文件位于“~/Library/ApplicationSupport/iCal”中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-16
        • 2018-09-29
        相关资源
        最近更新 更多