Jahrestage (nicht Geburtstage) per Applescript ansprechen

P

Pintramschu

Neues Mitglied
Thread Starter
Dabei seit
12.09.2008
Beiträge
5
Reaktionspunkte
0
Apples Kontakte-App ermöglicht es mir, ausser Geburtstagen auch andere Jahrestage einzutragen. Ich trage dort also Hochzeitstage, Todestage und andere Jubiläen ein. In iCal ist es möglich, sich an die Geburtstage erinnern zu lassen. Leider bleiben selbst definierte Jahrestage aussen vor.

Nun will ich mit Applescript meine selbst definierten Jahrestage abgrasen und in einen Kalender überführen. Beispiele für die grundsätzliche Vorgehensweise gibt es im Internet, aber diese Beispiele beziehen sich immer nur auf Geburtstage. Wie kann ich per Applescript meine selbst definierten Jahrestage ansprechen?

In der Bibliothek zur Kontakte-App habe ich nichts dazu gefunden, wie ich dieses Feld selbst ansprechen kann. Ich müsste ja zunächst die Art des Jahrestages auslesen (Hochzeitstag…), und dann natürlich noch das dazugehörige Datum.

Kann mir jemand dazu den entscheidenden Tipp geben?
 
personn, pl people [inh. entry] : A person in the address book database.

ELEMENTS
contains [...] custom dates, [...]


custom dates enthält die properties label und value, die die Bezeichnung und das Datum beinhalten.
 
@Pill

Danke! Das steht bei mir auch, aber ich hatte es übersehen bzw. nicht richtig zugeordnet. Dann werde ich mal weiter probieren, ob ich ein Script hinbekomme.
 
Das fertige Applescript

So, nun habe ich mein Skript fertig gestellt. Erklärungen weiter unten:

Code:
set this_calendar to "Jahrestage"

tell application "Contacts"
	repeat with this_person in people
		repeat with this_date in every custom date of this_person
			if label of this_date is not missing value then
				set this_label to label of this_date
				set this_value to value of this_date
				set this_name to name of this_person
				set this_year to text -4 thru -1 of ("0000" & (year of this_value))
				tell application "Calendar"
					tell calendar this_calendar
						make new event at end with properties {description:this_label, summary:this_name & " " & this_year, start date:this_value, end date:this_value, allday event:true, recurrence:"FREQ=YEARLY;INTERVAL=1"}
					end tell
				end tell
			end if
		end repeat
	end repeat
end tell

Das Skript setzt voraus, dass es einen Kalender mit Namen "Jahrestage" gibt. Den muss man also zuvor per Hand anlegen.

Das Skript arbeitet alle Kontakte durch. Wenn es auf ein selbst angelegtes Datum trifft (also nicht die üblichen Geburtstage), legt es zu dem angegebenen Datum einen Kalendereintrag an. Dieser Eintrag wird so eingestellt, dass er jedes Jahr neu angezeigt wird. Dabei wird der Name aus der Adresse eingetragen, gefolgt von der Jahreszahl des Ereignisses. Das "Label" (z.B. "Hochzeitstag") wird ebenfalls eingetragen.

Wir haben relativ viele Adressen, und auch viele eigene Jahrestage eingetragen. Das Skript läuft geschätzte fünf Minuten, aber ohne Fehler (auf OSX 10.10.2).

Will man die Operation erneut durchführen, löscht man am besten den Kalender "Jahrestage" in "Kalender" (früher iCal), und legt ihn neu an. Sonst ist irgendwann alles doppelt und dreifach eingetragen.

Das Skript ist noch ausbaufähig. Es könnte das Handling des Kalenders selbst übernehmen. Eine Fortschrittsanzeige wäre auch nicht schlecht (gibt es ja seit OSX 10.10 in AppleScript). Ich bin eher ein Anfänger in Sachen AppleScript, daher bin ich schon froh, dass ich so weit bin, wie ich bin.
 
Nette Arbeit.
Nur bei mir sind die Jahrestage bei meinen Kontakten automatisch im Kalender, einfach so ohne Script.
 
Nette Arbeit.
Nur bei mir sind die Jahrestage bei meinen Kontakten automatisch im Kalender, einfach so ohne Script.

@Thunderbirds

Wie weiter oben dargestellt, geht es nicht um die Geburtstage. Die stehen in der Tat automatisch im Kalender. Man kann aber, wenn man eine Visitenkarte bearbeitet, im Menü unter Visitenkarte > Feld hinzufügen > Datum auch ein eigenes Datum hinzufügen. Bei diesem selbst zugefügten Datum kann man das Label umbenennen (z.B. in "Hochzeitstag"), und dann natürlich ein Datum eintragen. Und ein solcher Eintrag taucht nicht automatisch im Kalender auf. Jedenfalls bei mir nicht, und auch nicht bei den anderen beiden Rechnern, die wir in der Familie haben. Daher die Überlegung, ein Skript einzusetzen.
 
Pintramschu,

Das hatte ich schon so verstanden. Ich kann das jetzt nicht nachschauen, vielleicht habe ich damals die paar Jahrestage auch gesondert im Kalender reingestellt und habe das vergessen. Ich schaue nach und komme darauf zurück.
 
Hallo,
ich bin in der Apple Welt komplett neu und suche genau nach dieser Lösung für die Jahrestage.

Leider ist Dein Coding abgeschnitten - kannst Du das komplette Coding hinzufügen, damit ich es ausprobieren kann?
 
set this_calendar to "Jahrestage" tell application "Contacts" repeat with this_person in people repeat with this_date in every custom date of this_person if label of this_date is not missing value then set this_label to label of this_date set this_value to value of this_date set this_name to name of this_person set this_year to text -4 thru -1 of ("0000" & (year of this_value)) tell application "Calendar" tell calendar this_calendar make new event at end with properties {description:this_label, summary:this_name & " " & this_year, start date:this_value, end date:this_value, allday event:true, recurrence:"FREQ=YEARLY;INTERVAL=1"} end tell end tell end if end repeat end repeat end tell
 
:confused: scrollbalken?!
 
  • Gefällt mir
Reaktionen: mausfang und Gwadro
Zurück
Oben Unten