2009-05-29 31 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