欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

获取实时汇率代码片段

程序员文章站 2022-03-03 08:19:47
...

获取实时汇率

通过yahoo 基金提供的url ,可查询实时汇率,例如

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20("USDCNY",%20"USDHKD")&env=store://datatables.org/alltableswithkeys&format=json

查询返回json如下:

{"query":{"count":2,"created":"2014-12-31T08:22:04Z","lang":"zh-CN","results":{"rate":[{"id":"USDCNY","Name":"USD to CNY","Rate":"6.1983","Date":"12/31/2014","Time":"3:22am","Ask":"6.1992","Bid":"6.1975"},{"id":"USDHKD","Name":"USD to HKD","Rate":"7.7552","Date":"12/31/2014","Time":"3:22am","Ask":"7.7554","Bid":"7.755"}]}}}

 查询其他币种只需要改变下查询条件即可。

查询其他币种到美元的代码如下:

public RateInfo getRate(final CurrencyCodeEnum currency) throws Exception {
		
		logger.info("--通过YQL到yahoo抓取实时汇率--");
		
		final RateInfo rateInfo = new RateInfo();
		try {
			Parser parser=new Parser();
			
			StringBuffer yqlUrl = new StringBuffer("http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.xchange where pair in (\"");
			yqlUrl.append(StringUtils.upperCase(currency.toString())).append("USD");
			yqlUrl.append("\")&env=store://datatables.org/alltableswithkeys&format=json");
			parser.setURL(yqlUrl.toString());
			parser.parse(new NodeFilter() {
				
				/** Comment for <code>serialVersionUID</code> */
				private static final long serialVersionUID = 1L;

				@Override
				public boolean accept(Node arg0) {
					JSONObject obj = (JSONObject)JSONArray.parse(arg0.toHtml());
					JSONObject query =obj.getJSONObject("query");
					JSONObject results =query.getJSONObject("results");
					Assert.notNull(results);
					JSONObject rate =	results.getJSONObject("rate");
					Assert.notNull(rate);
					rateInfo.setCurrencyName(currency.toString());
					rateInfo.setBuyRate(rate.getString("Rate"));
					SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
					try {
						rateInfo.setPubTime(format.parse(rate.getString("Date")));
					} catch (ParseException e) {
						e.printStackTrace();
					}
					return false;
				}
			});
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		logger.info("--通过YQL到yahoo抓取实时汇率,返回汇率:{}--", rateInfo);
		
		return rateInfo;
		
	}

 

 

参考http://*.com/questions/3139879/how-do-i-get-currency-exchange-rates-via-an-api-such-as-google-finance