I had the need to consume some exchange rate data for an internal project so I began looking for an about. My searching found no api for Google Finance, Yahoo Finance, XE, or Oanda.
Fortunately I found the currency converter from Xavier Media and their simple currency exchange rate xml API, which includes historical data too.
I put together an absolutely minimal lib to get the data I need. I just needed the AU/US rate. The xml provides all data as base to EUR, but with some simple math I can find the rate I need with reasonable accuracy. In this case ‘accuracy’ is based on spot checking it against the yahoo rates.
I thought it worth sharing in case others are looking for something similar.
UPDATE: I changed the xml string below to better handle single digit date months. Xavier needs ‘01′ instead of ‘1′
require "cgi"
require "uri"
require "net/https"
require "rexml/document"
module XavierMedia
# Returns the exchange rate (AUD/USD) on the given date.
def self.exchange_rate_on(date)
url = URI.parse("http://api.finance.xaviermedia.com/api/#{date.year}/#{date.strftime("%m")}/#{date.strftime("%d")}.xml")
resp = Net::HTTP.get(url)
xml = REXML::Document.new(resp)
us_to_eur = 1.0
au_to_eur = 1.0
xml.elements.each("//exchange_rates/fx") { |el|
if el.elements[1].text == "USD"
us_to_eur = el.elements[2].text.to_f rescue 1.0
end
if el.elements[1].text == "AUD"
au_to_eur = el.elements[2].text.to_f rescue 1.0
end
}
return us_to_eur/au_to_eur
end
end





