Applescript und iCal Interaktion
-
06-09-2019 - |
Frage
Ich versuche, ein Applescript zu schreiben iCal abzufragen und alle Ereignisse finde ich für ein bestimmtes Datum haben, in einem Kalender.
Ich begann durch ein einfaches Skript zu schreiben, die etwas einfach mit jedem Ereignis in einem bestimmten Kalender tut:
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
Allerdings ist dieses einfache Skript viel Zeit auszuführen (ein paar Sekunden) genommen, auch wenn ich nicht etwas komplexer in der Schleife zu tun. Ich habe Angst, dass das eigentliche Skript wirklich viel Zeit in Anspruch nehmen auszuführen.
Ich bin nicht sehr vertraut mit Applescript und so denke ich, ich tue etwas albern, die schwere Auswirkungen auf die Leistung hat.
Kann mir jemand erklären, warum dies geschieht so viel ausführen? Kann jemand etwas vorschlagen, meinen Code zu verbessern? Ich gehe jetzt starten Sie das Datum der Veranstaltung überprüft, mit einer Bedingung in der Schleife. Ich vermute, es muss ein Weg sein, für Veranstaltungen mit einem Datum zu suchen (wie die Automator Aktion des Fall ist), aber ich habe nicht zu tun in der Lage eine „native“ Art und Weise zu finden ....
EDIT : Ich verwende Mac OS X Tiger (10.4). Es ist möglich, dass neuere Versionen von iCal die Bibliothek von Operationen zur Verfügung verbessert haben.
Lösung
Ich habe mit dieser heute wurde die Auseinandersetzung und stellte fest, dass Sie nach Datum filtern können (zumindest auf Snow Leopard). So
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
wird die Zusammenfassung aller zukünftigen Ereignisse zurückzukehren, und sehr schnell, im Vergleich zu durch alle Ereignisse laufen.
Andere Tipps
Es ist nicht Applescript, aber das Beste aus der Reihe von anderen Möglichkeiten, dies zu tun scheint zu sein,
Meine erste Absicht war, nur die Ereignisse für ein bestimmtes Datum zu wählen, aber anscheinend gibt es in iCal nicht Methoden für den Zugriff auf nur die Ereignisse für einen bestimmten Tag. So ist es immer notwendig, alle Ereignisse in jedem Kalender registriert zu gehen. Auch wenn in den Ereignissen eines einzigen Kalender interessiert, sagen: ‚Das heutige Treffen“, es notwendig ist, über den gesamten Satz von Ereignissen zu gehen. Die besten Alternativen ich um im Web gefunden haben, nicht verwenden Apple Script, sondern verarbeiten sie die Dateien ‚ics‘, wo die Daten tatsächlich gespeichert ist. Als Referenz werden diese Dateien befindet sich in '~ / Library / ApplicationSupport / iCal'.