通過Yahoo API 獲取實時貨幣匯率
上面連結是PHP寫的,給的介面是 :http://download.finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&s=GBPCNY=x
可以複製貼上到瀏覽器 會返回一個檔案為 : quotes.csv
得到資料為:”GBPCNY=X”,9.5284,”2/10/2015”,”3:15am”
連結中的幾個引數可以修改, “.csv” 可以換成 .html , .txt 等 改變返回檔案型別,
其中 s= BGPCNY = x BGP(英鎊) 為原始幣種 CNY(人民幣)為目標幣種 可以動態替換 從而得到不同貨幣轉換匯率, s= 和 =x 不能缺少。
將結果擷取得到匯率的程式碼。
public static String getCurrencyRate(String result) {
String rate = null;
String pointPrefix = "(\\-|\\+){0,1}\\d*\\.\\d+";
String pointSuffix = "(\\-|\\+){0,1}\\d+\\.";
if (result.isEmpty() || result == null) {
rate = NUL;
} else {
String [] str = result.trim().split(",");
for (int i = 0; i < str.length; i++) {
if (str[i].matches(pointSuffix) || str[i].matches(pointPrefix)) {
rate = str[i];
}
}
}
return rate;
}
除了Yahoo 的介面 還可以使用 : K780 API
參考連結 :
當然它也是來源於 Yahoo 財經
請求示例(Json)
http://api.k780.com:88/app=finance.rate&scur=EUR&tcur=CNY&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json
請求返回結果是json 格式字串 :
{“success”:”1”,”result”:{“status”:”ALREADY”,”scur”:”EUR”,”tcur”:”CNY”,”ratenm”:”歐元/人民幣”,”rate”:”7.063038”,”update”:”2015-02-11 16:01:17”}}
其中請求連結中 scur 為原始貨幣,tcur 為目標貨幣,appley 為使用API憑證,sign為登陸密文 ,format為返回型別 可選xml.
在java中請求URL 可以使用java .net 包 中的相關類 :
URL url = new URL(URLStr);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setRequestProperty("User-Agent", "directclient");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
while ((inputLine = in.readLine()) != null) {
backjsonBuffer.append(inputLine);
}
in.close();
result = backjsonBuffer.toString();
通過json 解析的到相關 rate 值
對於以上兩種方法, 經實踐,
- Yahoo 介面 請求 時間稍長,可能訪問較多 會有拒絕訪問情況。
- K780 介面 相對較快,但限制請求次數 ,需要註冊 。
最近有在做獲取匯率,特此記錄,撰文不夠嚴謹,如有其它好方法 希望不吝賜教。