Java yahoo 雅虎 股票接口获取股票交易数据

/**
 * 股票实体类
 * @ 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股票数据接口工具类
 * @ 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?";

    /**
     * 根据 股票编码、开始日期、结束日期 获取股票数据
     * 
     * @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;
    }
    /**
     * 根据 股票编码、日期 获取股票数据
     *
     * @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);
    }
    /**
     * 根据 股票编码 获取当天股票数据
     * 
     * @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]

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值