文档章节

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

番茄炒鸡蛋
 番茄炒鸡蛋
发布于 2013/01/03 18:18
字数 685
阅读 9937
收藏 21
       一直想写个程序分析股票数据,无奈找不到数据源,昨天发现雅虎有开放的股票接口。鸡冻。先写个工具类,为后面分析数据做个准备。

     废话不多说,上代码!

/**
 * 股票实体类
 * @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 

© 著作权归作者所有

番茄炒鸡蛋
粉丝 1
博文 1
码字总数 685
作品 0
朝阳
高级程序员
私信 提问
加载中

评论(5)

小贵
小贵
十分感谢, 终于找到我想要的了. <br>
番茄炒鸡蛋
番茄炒鸡蛋 博主

引用来自“晏雨涵”的评论

引用来自“番茄炒鸡蛋”的评论

引用来自“晏雨涵”的评论

http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx

这个webservice我试过。但有局限性。只能取img或当日指定股票数据。不能取历史数据

yahoo的url是什么?

其实就是一个http请求,根据特定参数返回.csv文件,包含所需股票数据。这里直接把这个文件读成字节流,获取里面的数据
yanchao90
yanchao90

引用来自“番茄炒鸡蛋”的评论

引用来自“晏雨涵”的评论

http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx

这个webservice我试过。但有局限性。只能取img或当日指定股票数据。不能取历史数据

yahoo的url是什么?
番茄炒鸡蛋
番茄炒鸡蛋 博主

引用来自“晏雨涵”的评论

http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx

这个webservice我试过。但有局限性。只能取img或当日指定股票数据。不能取历史数据
yanchao90
yanchao90
http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx
实时股票分析系统的架构与算法

【编者的话】如果能在一台服务器上应用人工智能和机器学习算法处理每天的股票交易,而自己则在夏威夷的海滩上享受生活,那将是多么惬意呀。虽然股票 价格的变化受多种因素的影响,世上也没有...

oschina
2015/12/09
20.6K
26
获取全球各大证券交易所的全部股票交易信息

幻想过这样的两种能力,一是回到过去,二是预见未来。时间逆转回到过去,这更多的是在文艺作品中能够出现的情节。而预见未来,我们正在努力,希望可以更准确地预见更长时间内更多的细节。例如...

happengft
2017/03/28
0
0
实时股票数据接口

股票数据的获取目前有如下两种方法可以获取: http/javascript接口取数据 web-service接口 1.http/javascript接口取数据 1.1Sina股票数据接口 以大秦铁路(股票代码:601006)为例,如果要获取...

银月光海
2015/09/07
364
0
新浪财经股票数据的获取方法

股票数据的获取目前有如下两种方法可以获取: 1. http/javascript接口取数据 2. web-service接口 1.http/javascript接口取数据 1.1Sina股票数据接口 以大秦铁路(股票代码:601006)为例,如...

JAVA枪手
2015/09/18
1K
0
使用 Yahoo! Finance stock API 获取股票数据

本站曾介绍过,通过代码添加雅虎财经的股票走势图到自己网站的方法(添加美国股市,添加沪深股市),调用的是一张图片。今天在德馨网站,看到了从雅虎财经频道获取股票数据的API(Yahoo! Fi...

不由分说
2012/09/17
12.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

vps管理程序win和Linux都有啥推荐?

如果你的手上有多台Windows的vps推荐您用iis7远程桌面管理工具,但是今天着重说一下linux vps需要管理,那有没有一个免费的工具监控在线率、CPU、内存、网络等使用情况并以网页的形式反馈出来...

1717197346
27分钟前
4
0
Java调用以太坊智能合约

Web3j让Java开发者可以轻松地访问以太坊区块链并调用区块链上的智能合约的方法,在本教程中,我们将学习如何创建一个简单的命令行应用来访问区块链上的合约。 1、什么是web3j Web3j是一个开发...

汇智网教程
31分钟前
4
0
从零开始入门 K8s| 阿里技术专家详解 K8s 核心概念

作者| 阿里巴巴资深技术专家、CNCF 9个 TCO 之一 李响 一、什么是 Kubernetes Kubernetes,从官方网站上可以看到,它是一个工业级的容器编排平台。Kubernetes 这个单词是希腊语,它的中文翻译...

阿里云官方博客
34分钟前
5
0
微信加好友 通过初始wxid,恢复好友聊天记录

一、聊天记录恢复以及怎么获得用户的wxid 聊天记录网上很多方法、前提是你没有点击微信设置里面的清除聊天记录 单单是删除了与这个人对话 记录还是会存在的 之前我用的是楼月的微信聊天恢复助...

青峰Jun19er
36分钟前
4
0
鲲鹏发力,神秘中国架构现世,ZStack搭上了国产化的高铁?

以下文字来自ZStack社区用户,ZStack作为国产自研的开源云平台,感谢在国产化道路上大家一直以来的支持,接下来也请大家继续指教,ZStack也会坚持初心,抗好国产化的大旗。 鲲鹏这两天挺火的...

ZStack社区版
42分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部