Snyggare födelsedagar i iCal och iPhone/iPod touch
2010-02-26 - ical, applescript, födelsedag
0
Uppdaterad! Nu stöder scriptet även "custom dates" i Adressboken och lägger in årsdagar för de personer du har definierat ett datum
iCal har en funktion där du kan skapa en kalender med födelsedagar från adressboken, vilket ju är riktigt trevligt. Men en nackdel med det är att den larmar inte, den visar inte hur mycket dom fyller och ännu viktigare - den synkar inte med iPhone/iPod. Så det måste vi fixa, eller hur?
birthdays.scpt
property tDate : current date
 
-- These are the groups of a person that will have an alarm attached to their reminder
property alarmGroups : {"Family", "Friends"}
 
-- This is the name of the calendar in which the dates should be added
property calName : "Dagar"
 
-- First, lets empty the calendar
tell application "iCal"
	delete every event of (item 1 of (calendars whose title is "Dagar"))
end tell
 
tell application "Address Book"
	set theList to every person
	repeat with i in theList
		if exists birth date of i then
			set myName to name of i
			set myDate to birth date of i
			set age to (year of tDate) - (year of myDate)
			set mylabel to myName & " " & age & " år"
			set willAlarm to false
			set tGroups to name of every group of i
			repeat with g in alarmGroups
				if g is in tGroups then
					set willAlarm to true
				end if
			end repeat
 
			my insertBirthday(mylabel, myDate, willAlarm)
		end if
		set cDates to custom dates of i
		repeat with c in cDates
			set myDate to value of c
			set yearCount to (year of tDate) - (year of myDate)
			set mylabel to "År " & yearCount & ": " & myName & ", " & label of c
			my insertBirthday(mylabel, myDate, true)
		end repeat
	end repeat
end tell
 
on insertBirthday(Label, myDate, willAlarm)
	tell application "iCal"
		set startDate to tDate
		set month of startDate to month of myDate
		set day of startDate to day of myDate
		set time of startDate to 0
		set stampDate to startDate - 432000
		set endDate to startDate + 86400
		set tCal to (item 1 of (calendars whose title is "Dagar"))
		set theEvent to make new event at the end of events of tCal with properties {start date:startDate, end date:endDate, summary:Label, allday event:true}
		if willAlarm is true then
			set nAlarm to make new display alarm at the end of display alarms of theEvent with properties {trigger interval:-3600}
			set nAlarm to make new display alarm at the end of display alarms of theEvent with properties {trigger interval:480}
		end if
	end tell
end insertBirthday
Ovanstående AppleScript kommer skapa inlägg i iCal för de födelsedagar du har i adressboken. Men innan du börjar så måste du förbereda lite. Starta iCal och skapa en ny kalender som du kallar för "Dagar" (alternativt att du kallar den vad du vill men ändrar i scriptet på två ställen). Annars har scriptet ingenstans att lägga födelsedagarna i.
Sen bör du notera att lite senare i scriptet så skapar den ett alarm om kontakten finns i en speciell grupp i adressboken - i mitt fall grupperna "Family" och "Friends". Redigera dessa namn i scriptet om du kallar grupperna något annat. Detta för att iCal inte ska larma om varenda kontakt, utan bara dem man har i vissa grupper. Använder du inte grupper så kan detta vara ett bra tillfälle att börja. Larmet scriptet lägger till larmar tre dagar innan födeledagen samt samma dag kl 8 på morgonen.
Scriptet skriver till och med hur mycket dom fyller år, fantastiskt vad man kan göra med dagens teknik. Så, kopiera, klistra in i Script Editor och kör hårt. Hojta till i kommentarerna om det är något som inte fungerar som det ska.
Custom Dates
Adressboken i Mac OS X har något som heter "custom dates". Du kan gå in i menyn Card och om du där lägger till ett datum för en person och en "Custom..." label (eller behåller "anniversary") så kommer scriptet att lägga in det här datumet i din kalendet med, med ett larm. Så om du skriver in "Träffades" på datumet "2000-01-01" för din flickvän så kommer scriptet skapa en event första januari som heter "År 10: Förnamn Efternamn, Träffades" och larma tre dagar innan. Smidigt!
Bara folk från en viss grupp?
Om du inte vill ha in alla människor i adressboken i iCal så kan du begränsa urvalet till bara en viss grupp, genom att ändra den här raden:
 
	set theList to every person
 
Till detta, och ändra "Family" till namnet på den grupp du vill importera:
 
	set theList to every person of (every group whose name is "Family")
 
Mer i Tutorials
Rkna ungefrlig tid med PHP
CSSruta igen nu med skugga
Skapa snyggare tooltips med jQuery
Snyggare fdelsedagar i iCal och iPhoneiPod touch
Uppdaterad video Nya layoutmodulen
Reset display with AppleScript
Expos  Stickies
Nyckelord: ical, applescript eller födelsedag
Hemlig fdelsedag
Repeterande schema i iCal med AppleScript
Pausa musiken i iTunesSpotify via tangentbordet
Snyggare fdelsedagar i iCal och iPhoneiPod touch
Veckonummer och namnsdagar i din iPhone
MobileMe synkningen hur det egentligen fungerar
Två månader med Keto
Spelbord v3
Mechanical Age map
More shading and water
Första månaden med Keto
Keto
Fotosession: Tabitha
Utebelysning
Återvinningsskåp
Måla om huset
Byggt hylla till vintunnorna
Dodge RAM
Inline-redigering
Drömmen om ett spa
Dags för carport
Survey Island, what is happening?
Golvprov
Gillestugan uppdaterad!
Spelbord v2
Tre billyhyllor blir två
Gymkort
You can't take the sky from me
Högtalare klara!
eklundh.com tar ned skylten
Högtalare bestämda!
Uppgraderingar biorum
Lord of the Rings-maraton
Ergonomiskt som tusan!
Lego Storm Trooper
Fågel Fenix
Två hyllor på badrummet
Hobbyhörna fixad
Hylla bakom soffan
Modellbygge igen!
Porträtt av u/Flattie-Ratty
Porträtt av u/DangDoood
Buy prints of my maps
Hero Dashboard för Descent
3D-printer
Fältsjukhus 616
Ny kaffemaskin
Porträtt av u/elizabeeeef
Jämförelse 135 mm
Nya objektiv
Porträtt av kompis mamma
Använda utrymmet under trappen
Spelbord
Pimpning av köks-ön
Jag saknar min Dodge!
Acrylic drip