AppleScript to Boxcar Notifications

I have recently written an applescript to send boxcar notifications. It would be accessed via a Terminal command:

osascript /path/to/script boxcar_username “Title of Notification” “Body of Notification” “URL/to/54x54icon”

This in turn maps to:

on run {BoxcarUSER, boxcartitle, boxcarmessage, BoxcarICONURL}

The BoxcarUSER variable is the only required one, the rest will use defaults. If you have your own provider, you can open the script in script editor and change the property at the top of the script(I currently have it setuo with a provider I created, so feel free to change that) Other defaults could be changed within the

set {

in the

run{}

handler.
Some of the error catching is rough, as if you do not have an internet connection, cURL will fail with a non zero status (I think, no real expert there) so the script can’t catch the error message.

Some ideas I have thought about. Since you can map the icon that shows in boxcar, you could use different 57x57 icons to show the user different things that are happening. So maybe you could push out a red icon for stop, green for go, etc.

If someone could design a better icon, that would be great =p

UPDATED WITH NEW VERSION


--Usage on the command line would be:
--osascript path/to/script "Email-Address" "Title of Notification" "Message of Notification" "http://address_of_57x57_image"
--All these fields are optional but fields that want to use defaults should use ""

property AS2BoxcarVersion : "0.8.2"


(*
Versions:
0.8.2
Cleaned up code, made it more readable
Added "date" option to insert date into notification, so now boxcartitle or boxcarmessage can be "date" and this would return (current date)
0.8.1
Script now returns message when successful
0.8
Made all fields optional, expect for BoxcarUSER, and BoxcarDefaultAPIKey.  These 2 are required for the script to function
0.7
Made the icon Boxcar shows passable in terminal, see second line of script for syntax
0.6:
Added Support if boxcar API service is down
0.5:
Initial Release, works as expected, just no features

*)

--on run {}
--	my test123("identd@me.com", "date", "date", "")
--end run

on run {BoxcarUSER, boxcartitle, boxcarmessage, BoxcarICONURL}
	
	
	--reset variables, this is where you can set your defaults, remember these should all be strings!
	set {BoxcarDefaultTitle, BoxcarDefaultMessage, BoxcarDefaultICON, BoxcarDefaultAPIKey} to {"Boxcar Version: " & AS2BoxcarVersion, "Yup, This all looks good!", "http://i39.tinypic.com/b85nd4.jpg", "BHyitk1NJ37xRLKg6rnQ"}
	--end reset
	--	display dialog boxcartitle as string
	if boxcartitle is "" then
		set boxcartitle to BoxcarDefaultTitle
	else if boxcartitle is "date" then
		set boxcartitle to ((current date) as text)
	end if
	--	display dialog boxcartitle as string
	if boxcarmessage is "" then
		set boxcarmessage to BoxcarDefaultMessage
	else if boxcarmessage is "date" then
		set boxcarmessage to ((current date) as text)
	end if
	if BoxcarICONURL is "" then
		set BoxcarICONURL to BoxcarDefaultICON
	end if
	
	set SubscribeServiceResponse to (do shell script "curl -d \"email=" & BoxcarUSER & "\" \\
[url=http://boxcar.io/devices/providers/]http://boxcar.io/devices/providers/"[/url] & BoxcarDefaultAPIKey & "/notifications/subscribe")
	
	delay 1
	
	set boxcartitle to ListToString(stringtolist(boxcartitle, " "), "+")
	set boxcarmessage to ListToString(stringtolist(boxcarmessage, " "), "+")
	
	try
		set BoxcarResponse to (do shell script "curl -d \"emails=" & BoxcarUSER & "\" \\
-d \"&notification[from_screen_name]=" & boxcartitle & "\" \\
-d \"&notification[message]=" & boxcarmessage & "\" \\
-d \"&notification[icon_url]=" & BoxcarICONURL & "\" \\
-d \"&notification[from_remote_service_id]=" & my md5create(((current date) & BoxcarUSER & BoxcarDefaultTitle & BoxcarDefaultMessage as text)) & "\" \\
[url=http://boxcar.io/devices/providers/]http://boxcar.io/devices/providers/"[/url] & BoxcarDefaultAPIKey & "/notifications")
		if BoxcarResponse contains "favicon.ico" then
			return ("AS2Boxcar v" & AS2BoxcarVersion & ": Boxcar API Service is temporarily down. Error 1")
		end if
		if BoxcarResponse contains "Could not resolve host" then
			return ("AS2Boxcar v" & AS2BoxcarVersion & ": Unable to resolve http://boxcar.io  Please check your internet connection.")
		end if
	on error errmsg
		return ("AS2Boxcar v" & AS2BoxcarVersion & ": Boxcar API Service is temporarily down. Error 2")
	end try
	--return ("AS2Boxcar " & AS2BoxcarVersion & ": Notification sent to " & BoxcarUSER)
	return ("AS2Boxcar " & AS2BoxcarVersion & ": " & BoxcarUSER & " : " & boxcartitle & " : " & boxcarmessage & " : " & BoxcarICONURL)
end run

--SUBS--
on stringtolist(theString, delim)
	set oldelim to AppleScript's text item delimiters
	set AppleScript's text item delimiters to delim
	set dlist to (every text item of theString)
	set AppleScript's text item delimiters to oldelim
	return dlist
end stringtolist

on ListToString(theList, delim)
	set oldelim to AppleScript's text item delimiters
	set AppleScript's text item delimiters to delim
	set alist to theList as string
	set AppleScript's text item delimiters to oldelim
	return alist
end ListToString

on md5create(stringtohash)
	set hashedBoxcarUSER to item 2 of stringtolist((do shell script "md5 -s \"" & stringtohash & "\""), " = ")
	return hashedBoxcarUSER
end md5create