当前位置:编程学习 > JAVA >>

基于yahoo股票接口获取股票交易数据

    一直想写个程序分析股票数据,无奈找不到数据源,昨天发现雅虎有开放的股票接口。鸡冻。先写个工具类,为后面分析数据做个准备。
    废话不多说,上代码!

/**
 * 股票实体类
 * @author 祁丛生 2013.01.02
 */
public class StockData {
private String code; // 股票编码
private String name; // 股票名称
private String date; // 交易日期
private double open = 0.0; // 开盘价
private double high = 0.0; // 最高价
private double low = 0.0; // 最低价
private double close = 0.0; // 最后一次交易价格,相当于收盘价
private double volume = 0.0;// 总交易手
private double adj = 0.0; // 最后一次交易价格 (今天的收盘价当做加权价格)
        
        //setters and getters.....省略
        //toString method...为测试方便可以加个toString方法,省略
}

/**
 * yahoo股票数据接口工具类
 * @author 祁丛生 2013.01.02
 * @version 1.0
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class GetDataFromYahooUtil {

public static final String YAHOO_FINANCE_URL = "http://table.finance.yahoo.com/table.csv?";
public static final String YAHOO_FINANCE_URL_TODAY = "http://download.finance.yahoo.com/d/quotes.csv?";

/**
 * 根据 股票编码、开始日期、结束日期 获取股票数据
 * @author 祁丛生
 * @param stockName  沪市:000000.ss 深市:000000.sz
 * @param fromDate    开始日期
 * @param toDate         结束日期
 * @return List<StockData>
 */
public static List<StockData> getStockCsvData(String stockName, String fromDate,String toDate) {
List<StockData> list = new ArrayList<StockData>();
String[] datefromInfo= fromDate.split("-");
String[] toDateInfo = toDate.split("-");
String code = stockName.substring(0, 6);;

String a = (Integer.valueOf(datefromInfo[1])-1)+"";// a – 起始时间,月
String b = datefromInfo[2];// b – 起始时间,日
String c =  datefromInfo[0];// c – 起始时间,年
String d = (Integer.valueOf(toDateInfo[1])-1)+"";// d – 结束时间,月
String e = toDateInfo[2];// e – 结束时间,日
String f =  toDateInfo[0];// f – 结束时间,年

String params = "&a=" + a + "&b=" + b + "&c=" + c + "&d=" + d + "&e="
+ e + "&f=" + f;
String url = YAHOO_FINANCE_URL + "s=" + stockName + params;

URL MyURL = null;
URLConnection con = null;
InputStreamReader ins = null;
BufferedReader in = null;
try {
MyURL = new URL(url);
con = MyURL.openConnection();
ins = new InputStreamReader(con.getInputStream(), "UTF-8");
in = new BufferedReader(ins);

String newLine = in.readLine();// 第一行为标题行,不取数据

while ((newLine = in.readLine()) != null) {
String stockInfo[] = newLine.trim().split(",");
StockData sd = new StockData();
sd.setCode(code);
sd.setDate(stockInfo[0]);
sd.setOpen(Float.valueOf(stockInfo[1]));
sd.setHigh(Float.valueOf(stockInfo[2]));
sd.setLow(Float.valueOf(stockInfo[3]));
sd.setClose(Float.valueOf(stockInfo[4]));
sd.setVolume(Float.valueOf(stockInfo[5]));
sd.setAdj(Float.valueOf(stockInfo[6]));
list.add(sd);
}

} catch (Exception ex) {
return null; //无交易数据
} finally {
if (in != null)
try {
in.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
return list;
}
/**
 * 根据 股票编码、日期 获取股票数据
 * @author 祁丛生
 * @param stockName   沪市:000000.ss 深市:000000.sz
 * @param date 日期
 * @return StockData
 */
public static StockData getStockCsvData(String stockName, String date){
List<StockData> list = getStockCsvData(stockName,date,date);
return ((list.size()>0)?list.get(0):null);
}
/**
 * 根据 股票编码 获取当天股票数据
 * @author 祁丛生
 * @param stockName   沪市:000000.ss 深市:000000.sz
 * @return StockData
 */
public static StockData getStockCsvData(String stockName){
String date = String.format("%1$tF", new Date());
List<StockData> list = getStockCsvData(stockName,date,date);
return ((list!=null&&list.size()>0)?list.get(0):null);
}
}

/**
 * 测试类
 */
public class Test {
public static void main(String[] args){
GetDataFromYahooUtil stockUtil = new GetDataFromYahooUtil();
StockData sd = stockUtil.getStockCsvData("600629.ss", "2012-12-31");
System.out.println(sd);
}
}

测试结果:
StockData [code=600629, date=2012-12-31, open=7.059999942779541, high=7.25, low=7.050000190734863, close=7.130000114440918, volume=1831800.0, adj=7.130000114440918]

欢迎交流
QQ:875881559  股票 接口 yahoo 股票 java yahoo 接口 --------------------编程问答-------------------- 分析是关键。这里面牵扯的业务知识太多了,咱不懂股票的真的不好说太多。
我最近也在学京东的接口,希望能把数据库中的数据批量上传到京东的数据库中。
方法不难,但是其中遇到的具体的问题,真的不好解决。 --------------------编程问答-------------------- 除
补充:Java ,  Web 开发
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,