–Open this script in a new Script Editor window.
property google_maps_url : “http://maps.google.com/maps?q=”
property allowed_URL_chars : (characters of “$-_.+!*'(),1234567890abcdefghijklmnopqrstuvwxyz”)
property hex_list : (characters of “0123456789ABCDEF”)
using terms from application “Address Book”
on action property
return “address”
end action property
[b][color=blue]on[/color][/b] [color=blue]action title[/color] [color=blue]for[/color] [color=green]p[/color] [color=blue]with[/color] [color=green]e[/color]
[b][color=blue]return[/color][/b] ("Get Google Directions to " & ([color=green]p[/color]'s [color=blue]name[/color]) & " from Home")
[b][color=blue]end[/color][/b] [color=blue]action title[/color]
[b][color=blue]on[/color][/b] [color=blue]should enable action[/color] [color=blue]for[/color] [color=green]p[/color] [color=blue]with[/color] [color=green]e[/color]
[b][color=blue]return[/color][/b] [color=blue]true[/color]
[b][color=blue]end[/color][/b] [color=blue]should enable action[/color]
[b][color=blue]on[/color][/b] [color=blue]perform action[/color] [color=blue]for[/color] [color=green]p[/color] [color=blue]with[/color] [color=green]e[/color]
[b][color=blue]try[/color][/b]
[b][color=blue]set[/color][/b] [color=green]home_address[/color] [b][color=blue]to[/color][/b] [color=blue]address[/color] 1 [b][color=blue]of[/color][/b] [color=blue]my card[/color] [b][color=blue]whose[/color][/b] [color=blue]label[/color] = "home"
[b][color=blue]on[/color][/b] [b][color=blue]error[/color][/b]
[b][color=blue]set[/color][/b] [color=green]home_address[/color] [b][color=blue]to[/color][/b] [color=blue]address[/color] 1 [b][color=blue]of[/color][/b] [color=blue]my card[/color]
[b][color=blue]end[/color][/b] [b][color=blue]try[/color][/b]
[b][color=blue]tell[/color][/b] [color=green]home_address[/color] [b][color=blue]to[/color][/b] [b][color=blue]set[/color][/b] {[color=green]start_street[/color], [color=green]start_city[/color], [color=green]start_state[/color], [color=green]start_zip[/color]} [b][color=blue]to[/color][/b] {[color=blue]street[/color], [color=blue]city[/color], [color=blue]state[/color], [color=blue]zip[/color]}
[b][color=blue]try[/color][/b]
[b][color=blue]set[/color][/b] [color=green]start_street[/color] [b][color=blue]to[/color][/b] [color=green]start_street[/color]'s [color=blue]paragraph[/color] 1
[b][color=blue]end[/color][/b] [b][color=blue]try[/color][/b]
[b][color=blue]tell[/color][/b] [color=green]e[/color] [b][color=blue]to[/color][/b] [b][color=blue]set[/color][/b] {[color=green]end_street[/color], [color=green]end_city[/color], [color=green]end_state[/color], [color=green]end_zip[/color]} [b][color=blue]to[/color][/b] {[color=blue]street[/color], [color=blue]city[/color], [color=blue]state[/color], [color=blue]zip[/color]}
[b][color=blue]try[/color][/b]
[b][color=blue]set[/color][/b] [color=green]end_street[/color] [b][color=blue]to[/color][/b] [color=green]end_street[/color]'s [color=blue]paragraph[/color] 1
[b][color=blue]end[/color][/b] [b][color=blue]try[/color][/b]
[b][color=blue]my[/color][/b] [color=green]get_directions[/color]([color=green]start_street[/color], [color=green]start_city[/color], [color=green]start_state[/color], [color=green]start_zip[/color], [color=green]end_street[/color], [color=green]end_city[/color], [color=green]end_state[/color], [color=green]end_zip[/color])
[b][color=blue]end[/color][/b] [color=blue]perform action[/color]
end using terms from
on get_directions(start_street, start_city, start_state, start_zip, end_street, end_city, end_state, end_zip)
if start_zip is missing value then
set start_address to {start_street, start_city, start_state}
else
set start_address to {start_street, start_zip}
end if
if end_zip is missing value then
set end_address to {end_street, end_city, end_state}
else
set end_address to {end_street, end_zip}
end if
tell application “System Events”
open location (google_maps_url & my encode_URL_string(my [color=green]list_to_string/color & " to " & my [color=green]list_to_string/color))
end tell
end get_directions
on [color=green]encode_URL_string/color
set c to (s’s characters)
repeat with j from 1 to (count c)
set this_char to item j of c
if this_char is not in allowed_URL_chars then set item j of c to my [color=green]encode_URL_char/color
end repeat
return “” & c
end encode_URL_string
on [color=green]encode_URL_char/color
set ASCII_num to (ASCII number this_char)
return (“%” & (item ((ASCII_num div 16) + 1) of hex_list) & (item ((ASCII_num mod 16) + 1) of hex_list)) as string
end encode_URL_char
on list_to_string(l, d)
tell (a reference to my text item delimiters)
set {o, contents} to {contents, d}
set {l, contents} to {“” & l, o}
end tell
return l
end list_to_string