1. 程式人生 > >通過Yahoo API 獲取實時貨幣匯率

通過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
參考連結 :

http://www.k780.com/api/finance.rate
當然它也是來源於 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 介面 相對較快,但限制請求次數 ,需要註冊 。
    最近有在做獲取匯率,特此記錄,撰文不夠嚴謹,如有其它好方法 希望不吝賜教。