I think your syntax is ok; the exchange server is down. I use this script (which normally works quite well) to get US/Canadian exchange rates. Now it times out. (It uses growl for the answer, but easy to convert to a dialog)
set c1 to "united states"
set c2 to "canada"
-- get the rate
--set countryList to {"canada"}
set mn to "getRate"
set mnsurl to "urn:xmethods-CurrencyExchange"
set exch_rates to {}
try
with timeout of 60 seconds
--repeat with c2 in countryList
tell application "
http://services.xmethods.net:9090/soap/servlet
"
set theResult to ¬
call soap {method name:mn, parameters:{country1:c1, country2:c2}, method namespace uri:mnsurl}
end tell
set end of exch_rates to {(contents of c2), (theResult as number)}
--end repeat
end timeout
on error
tell application "GrowlHelperApp"
notify with name "ExchRates" title "Exchanger Rate Unavailable" description "Server not Responding" application name "ExchRates" image from location alias "ACB-G5_1:Users:bellac:Pictures:
Dollar.png"
end tell
return
end try
set theRate to (item 2 of item 1 of exch_rates)
set invRate to round_truncate(100 * (1 / theRate), 3)
set msg1 to "$" & theRate & " ± $0.02"
set msg2 to invRate & "¢ ± 2¢"
tell application "GrowlHelperApp"
-- my notification goes here
end tell
on round_truncate(this_number, decimal_places)
if decimal_places is 0 then
set this_number to this_number + 0.5
return number_to_text(this_number div 1)
end if
set the rounding_value to "5"
repeat decimal_places times
set the rounding_value to "0" & the rounding_value
end repeat
set the rounding_value to ("." & the rounding_value) as number
set this_number to this_number + rounding_value
set the mod_value to "1"
repeat decimal_places - 1 times
set the mod_value to "0" & the mod_value
end repeat
set the mod_value to ("." & the mod_value) as number
set second_part to (this_number mod 1) div the mod_value
if the length of (the second_part as text) is less than the ¬
decimal_places then
repeat decimal_places - ¬
(the length of (the second_part as text)) times
set second_part to ("0" & second_part) as string
end repeat
end if
set first_part to this_number div 1
set first_part to number_to_text(first_part)
set this_number to (first_part & "." & second_part)
return this_number
end round_truncate
on number_to_text(this_number)
set this_number to this_number as text
if this_number contains "E+" then
set x to the offset of "." in this_number
set y to the offset of "+" in this_number
set z to the offset of "E" in this_number
set the decimal_adjust to characters (y - (length of this_number)) thru ¬
-1 of this_number as string as number
if x is not 0 then
set the first_part to characters 1 thru (x - 1) of this_number as string
else
set the first_part to ""
end if
set the second_part to characters (x + 1) thru (z - 1) of this_number as string
set the converted_number to the first_part
repeat with i from 1 to the decimal_adjust
try
set the converted_number to ¬
the converted_number & character i of the second_part
on error
set the converted_number to the converted_number & "0"
end try
end repeat
return the converted_number
else
return this_number
end if
end number_to_text