2012-02-23 21 views
1

私は、でスケジュールされた時間にSkypeコールを発信するApplescriptを書こうとしています。他の人からの招待状をで受け取りました。スクリプトを実行するために_received_iCalイベントを取得するにはどうすればよいですか?

は、私は、しかし、私は)

Aの方法のいずれかでのiCalに苦しんでバックグラウンドで実行するスクリプトを取得し、時間を取得しています、私は電話をかけるためにSkypeのAPIへのスクリプトと罰金だと思いますB)イベント警告を取得して一回限りのスクリプトを実行する。

オプションB)の問題は、警告がスクリプトを実行するようにiCal内からイベントを設定することはできますが、受け取ったイベントからこれをトリガする必要があることです。

  • すべてのスクリプトおよびiCalは、午前10時のホスト
  • に3 pm**用(ポータブルデバイス上のGoogle CALを介して)ユーザのスケジュールイベントを実行し、招待:

    典型的な例は次のようになりホスト。

  • 午後3時に、ホストのスクリプトはSkype APIを使用してユーザーに電話をかけます。

**これは将来同様の日付になる可能性があり、要件はまだ成り立ちます。

アドバイスをいただきありがとうございます。

答えて

2

iCalには通知がありません(iChatが好きなアプリケーションもあります)ので、「開いたまま」のAppleScriptアプリケーションを実行する必要があります。このようなものはあなたの "B"シナリオのためにそれを行います。注: "applescriptPath"変数に、AppleScriptファイル(Skypeコールを作成するファイル)へのパスを追加する必要があります。

起動すると、iCalにあるすべてのカレンダーイベントのリストが表示されます。その後、それは5分ごとに実行されます。実行時には、現在のイベントを最初に作成したイベントのリストと照合します。新しいイベントがある場合は、新しいイベントにアラームとしてAppleScriptが追加されます。この方法では、ラン間の現在のイベントを追跡し、新しいイベントのみを検出します。

ですから、このスクリプトはあなたの出発点になるはずです。ステイオープンのアプリスクリプトアプリケーションとして保存することを忘れないでください。あなたはおそらくそれを変更したいでしょう。たとえば、私は新しいイベントのためにすべてのカレンダーをチェックしていますが、あなたは1つの特定のカレンダーをターゲットにすることができます。がんばろう。

property storedUIDs : {} -- we use this to check for new events, if an event is not in this list then it is new 

global applescriptPath 

on run 
    set applescriptPath to (path to desktop as text) & "myAlarm.scpt" -- the path to the applescript which is run as the alarm 
end run 

on idle 
    set newEvents to {} 
    tell application "iCal" 
     set theCals to calendars 
     set allUIDs to {} 
     repeat with aCal in theCals 
      tell aCal 
       set theseEvents to events 
       repeat with anEvent in theseEvents 
        set thisUID to uid of anEvent 
        set end of allUIDs to thisUID 
        if thisUID is not in storedUIDs then 
         set end of newEvents to contents of anEvent 
        end if 
       end repeat 
      end tell 
     end repeat 
     set storedUIDs to allUIDs 

     if (count of newEvents) is less than 5 then -- this will prevent the first run of the script from adding the alarm to every event 
      repeat with aNewEvent in newEvents 
       -- do something with this new events like add an alarm to run an applescript 
       set theAlarm to make new open file alarm at end of open file alarms of aNewEvent with properties {trigger interval:0, filepath:POSIX path of applescriptPath} 
      end repeat 
     end if 
    end tell 

    return (5 * 60) -- run every 5 minutes 
end idle 

on quit 
    set storedUIDs to {} 
    continue quit 
end quit 
+0

おかげで(と応答遅れのためappologiesは - 正確に私の電子メール通知を設定していなかった!) – Dan

+0

のPS。私は、スクリプトが実行されたあと、アイドル状態の///endアイドルルーチンが実行されていると考えていますか? – Dan

+0

はいDan、 "on idle"ハンドラは繰り返し実行されるハンドラです。これが、あなたがそれを実行可能な状態にするためのアプリケーションです。あなたはend文の直前で、300秒ごとに実行するアイドルハンドラを指示する "return 300"を参照してください。したがって、起動時に「on​​ run」と「on idle」ハンドラが実行され、300秒ごとに「on idle」ハンドラが再度実行されます。ドックアイコンを右クリックして終了すると、「終了時」ハンドラが実行されます。がんばろう。 – regulus6633

関連する問題