3

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 の新しいバージョンでは、利用可能な操作のライブラリが改善されている可能性があります。

4

3 に答える 3

5

私は今日これに取り組んできましたが、日付でフィルターできることがわかりました (少なくとも 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

すべてのイベントを繰り返し処理する場合と比較して、将来のすべてのイベントの概要が非常に迅速に返されます。

于 2010-03-06T21:57:31.477 に答える
3

これは AppleScript ではありませんが、これを行うための他の方法の中で最も優れているのはiCalBuddyのようです。これは、カレンダー ファイルを直接解析するのではなく、パブリック Cocoa API を使用し、繰り返されるイベントを賢明に処理します。

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

于 2010-03-12T00:18:54.080 に答える
0

私の最初の意図は、特定の日付のイベントのみを選択することでしたが、iCal には特定の日のイベントのみにアクセスする方法がないようです。

したがって、すべてのカレンダーに登録されているすべてのイベントを常に確認する必要があります。「今日の会議」など、1 つのカレンダーのイベントに関心がある場合でも、一連のイベント全体を確認する必要があります。

私が Web で見つけた最良の代替手段は、Apple Script を使用していませんが、代わりに、情報が実際に保存されている「ics」ファイルを処理します。

参考までに、これらのファイルは「~/Library/ApplicationSupport/iCal」にあります。

于 2009-10-17T12:12:50.063 に答える