参考链接:http://raynix.info/archives/2216
上面链接是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 接口 相对较快,但限制请求次数 ,需要注册 。
最近有在做获取汇率,特此记录,撰文不够严谨,如有其它好方法 希望不吝赐教。