Hoppa direkt till innehåll

Snyggare födelsedagar i iCal och iPhone/iPod touch

2010-02-26 - ical, applescript, födelsedag
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
propertytDate : 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
Nytt projekt på gång: Ljussablar som ljuskälla
Hemma-Spa klart!
Alien: Romulus
Börjar likna en bar!
Reglar på plats
Rivning pågår!
Mjölner!
Örnen börjar bli redo för Sweden Rock
Utebar!
Mixtejp
Norrsken
Kan ha "råkat" skaffa något på Sci-Fi-mässan
Recension: Steam Hotell
Det börjar ta form med hemma-spa:et
Rostfärg och IKEA-lampa
Create a physical book from my digital book
Survey Island
Someone is trying to sell my map!
Julkalender
Myst book updated
Recension: Yasuragi Ryokan Hanare
Recension: Ad Astra
Ny tatuering - midgårdsormen!
Minnestal till en kaffekopp
Förlovade
Sweden Rock 2023
Ny nummerskylt för huset
Fix i husbilen
Grubbelgubbe
Uppdateringar i verkstaden!
Måla med rostfärg
Vårfix i trädgården
Jung Kook
Pappaskämt och annan humor
Bilder på spelbordet när det används
Använda laserskäraren för att skapa innehål...
Julklappar med laserskärare
Budget-Spa
Nyckelskåp
Fjällkaffe
1/20 DeLorean Time Machine
Caso Outdoor Cooler
Minikyl Coca Cola
Verktygsvagn med verktyg, 161 delar
CSS filters for background images
Huset ommålat!
Skiss för tatuering
Spelbordet klart
Laser cutting my Myst Island
We Can Do It