股票数据的获取目前有如下两种方法可以获取:
1.http/javascript接口取数据
2.web-service接口
1.http/javascript接口取数据
1.1Sina股票数据接口
以大秦铁路(股票代码:601006)为例,如果要获取它的最新行情,只需访问新浪的股票数据
接口:http://hq.sinajs.cn/list=sh601006这个url会返回一串文本,例如:
var hq_str_sh601006="大秦铁路, 27.55, 27.25, 26.91, 27.55, 26.20, 26.91, 26.92,
22114263, 589824680, 4695, 26.91, 57590, 26.90, 14700, 26.89, 14300,
26.88, 15100, 26.87, 3100, 26.92, 8900, 26.93, 14230, 26.94, 25150, 26.95, 15220, 26.96, 2008-01-11, 15:05:32";
这个字符串由许多数据拼接在一起,不同含义的数据用逗号隔开了,按照程序员的思路,顺序号从0开始。
0:”大秦铁路”,股票名字;
1:”27.55″,今日开盘价;
2:”27.25″,昨日收盘价;
3:”26.91″,当前价格;
4:”27.55″,今日最高价;
5:”26.20″,今日最低价;
6:”26.91″,竞买价,即“买一”报价;
7:”26.92″,竞卖价,即“卖一”报价;
8:”22114263″,成交的股票数,由于股票交易以一百股为基本单位,所以在使用时,通常把该值除以一百;
9:”589824680″,成交金额,单位为“元”,为了一目了然,通常以“万元”为成交金额的单位,所以通常把该值除以一万;
10:”4695″,“买一”申请4695股,即47手;
11:”26.91″,“买一”报价;
12:”57590″,“买二”
13:”26.90″,“买二”
14:”14700″,“买三”
15:”26.89″,“买三”
16:”14300″,“买四”
17:”26.88″,“买四”
18:”15100″,“买五”
19:”26.87″,“买五”
20:”3100″,“卖一”申报3100股,即31手;
21:”26.92″,“卖一”报价
(22, 23), (24, 25), (26,27), (28, 29)分别为“卖二”至“卖四的情况”
30:”2008-01-11″,日期;
31:”15:05:32″,时间;
这个接口对于JavaScript程序非常方便,通常的使用方式为,静态或动态地在页面中插入:
<script type="text/javascript" src="http://hq.sinajs.cn/list=sh601006" charset="gb2312">
</script>
<script type="text/javascript">
var elements=hq_str_sh601006.split(",");
document.write("current price:"+elements[3]);
</script>
这段代码输出大秦铁路(股票代码:601006)的当前股价
current price:14.20
如果你要同时查询多个股票,那么在URL最后加上一个逗号,再加上股票代码就可以了;比如你要一次查询大秦铁路(601006)和大同煤业(601001)的行情,就这样使用URL:
http://hq.sinajs.cn/list=sh601003,sh601001
但如果你要查询大盘指数,情况会有不同,比如查询上证综合指数(000001),使用如下URL:
http://hq.sinajs.cn/list=s_sh000001 服务器返回的数据为:
var hq_str_s_sh000001="上证指数,3094.668,-128.073,-3.97,436653,5458126";
数据含义分别为:指数名称,当前点数,当前价格,涨跌率,成交量(手),成交额(万元);
查询深圳成指的URL为:
http://hq.sinajs.cn/list=s_sz399001
对于股票的K线图,日线图等的获取可以通过请求http://image.sinajs.cn/…./…/*.gif此URL获取,其中*代表股票代码,详见如下:
查看日K线图:
http://image.sinajs.cn/newchart/daily/n/sh601006.gif
分时线的查询:
http://image.sinajs.cn/newchart/min/n/sh000001.gif
日K线查询:
http://image.sinajs.cn/newchart/daily/n/sh000001.gif
周K线查询:
http://image.sinajs.cn/newchart/weekly/n/sh000001.gif
月K线查询:
http://image.sinajs.cn/newchart/monthly/n/sh000001.gif
2. web-service接口
2.1 CHINAstock的web-service:
http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx
中国股票行情数据 WEB 服务(支持深圳和上海股市的全部基金、债券和股票),数据即时更新。输出GIF分时走势图、日/周/月 K 线图、及时行情数据(股票名称、行情时间、最新价、昨收盘、今开盘、涨跌额、最低、最高、涨跌幅、成交量、成交额、竞买价、竞卖价、委比、买一 - 买五、卖一 - 卖五)。此WEB服务提供了如下几个接口:
2.1.1 getStockImageByCode
GET 股票GIF分时走势图
INput:theStockCode = 股票代号,如:sh000001
POST /WebServices/ChinaStockWebService.asmx HTTP/1.1
Host: www.webxml.com.cn
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: http://WebXml.com.cn/getStockImageByCode
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getStockImageByCode xmlns="http://WebXml.com.cn/">
<theStockCode>string</theStockCode>
</getStockImageByCode>
</soap:Body>
</soap:Envelope>
Output:
2.1.2 getStockImageByteByCode
获得中国股票GIF分时走势图字节数组
INput:theStockCode = 股票代号,如:sh000001
POST /WebServices/ChinaStockWebService.asmx HTTP/1.1Host: www.webxml.com.cnContent-Type: text/xml; charset=utf-8Content-Length: lengthSOAPAction: "http://WebXml.com.cn/getStockImageByteByCode" <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <getStockImageByteByCode xmlns="http://WebXml.com.cn/"> <theStockCode>string</theStockCode> </getStockImageByteByCode> </soap:Body></soap:Envelope>
返回的数据如下:
<?xml version="1.0" encoding="utf-8" ?>
<base64Binary xmlns="http://WebXml.com.cn/">R0lGODlhIQIsAfcAAAAAAAwLBxkGBQ4ODhAQEBsSChUVFS4TDB8eGQkA9koPCDAAzy4mFVgAp2UYC0IqEUYuBVwiDEAsI1QnFX8AgDU1NUozFlgxD6cBWVY5FnIwEmQ4Gc0AMlhDHPEADlVJMEpKSm1IHOUBWpY3FZMyVY9IGXRWIEFmWGNYUmpdPXJgHQB8HK9EGGBgX4lXIACoAHhkMyt4m4VkJtstbv8A
2.1.3 getStockImage_kByCode
直接获得中国股票GIF日/周/月 K 线图(545*300pixel/72dpi)
INPUT: theStockCode = 股票代号
theType = K 线图类型(D:日[默认]、W:周、M:月),
POST /WebServices/ChinaStockWebService.asmx HTTP/1.1Host: www.webxml.com.cnContent-Type: text/xml; charset=utf-8Content-Length: lengthSOAPAction: "http://WebXml.com.cn/getStockImage_kByCode" <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <getStockImage_kByCode xmlns="http://WebXml.com.cn/"> <theStockCode>string</theStockCode> <theType>string</theType> </getStockImage_kByCode> </soap:Body></soap:Envelope>
比如按照下图所示输入:
返回的结果就是周K线图:
2.1.4 getStockImage_kByteByCode
获得中国股票GIF日/周/月 K 线图字节数组
Input:theStockCode = 股票代号,如:sh000001
POST /WebServices/ChinaStockWebService.asmx HTTP/1.1Host: www.webxml.com.cnContent-Type: text/xml; charset=utf-8Content-Length: lengthSOAPAction: "http://WebXml.com.cn/getStockImage_kByteByCode" <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <getStockImage_kByteByCode xmlns="http://WebXml.com.cn/"> <theStockCode>string</theStockCode> <theType>string</theType> </getStockImage_kByteByCode> </soap:Body></soap:Envelope>HTTP/1.1 200 OKContent-Type: text/xml; charset=utf-8Content-Length: length <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <getStockImage_kByteByCodeResponse xmlns="http://WebXml.com.cn/"> <getStockImage_kByteByCodeResult>base64Binary</getStockImage_kByteByCodeResult> </getStockImage_kByteByCodeResponse> </soap:Body></soap:Envelope>比如按照下图输入
返回的结果就是周K线图字节数组
<?xml version="1.0" encoding="utf-8" ?>
<base64Binary xmlns="http://WebXml.com.cn/">R0lGODlhIQIsAfcAAAAAAAwLBxkGBQ4ODhAQEBsSChUVFS4TDB8eGQkA9koPCDAAzy4mFVgAp2UYC0IqEUYuBVwiDEAsI1QnFX8AgDU1NUozFlgxD6cBWVY5FnIwEmQ4Gc0AMlhDHPEADlVJMEpKSm1IHOUBWpY3FZMyVY9IGXRWIEFmWGNYUmpdPXJgHQB8HK9EGGBgX4lXIACoAHhkMyt4m4VkJtstbv8A
2.1.5 getStockInfoByCode
获得中国股票及时行情
input:theStockCode = 股票代号
POST /WebServices/ChinaStockWebService.asmx HTTP/1.1Host: www.webxml.com.cnContent-Type: text/xml; charset=utf-8Content-Length: lengthSOAPAction: "http://WebXml.com.cn/getStockInfoByCode" <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <getStockInfoByCode xmlns="http://WebXml.com.cn/"> <theStockCode>string</theStockCode> </getStockInfoByCode> </soap:Body></soap:Envelope>返回的值一个一维字符串数组 String(24),结构为:String(0)股票代号、String(1)股票名称、String(2)行情时间、String(3)最新价(元)、String(4)昨收盘(元)、String(5)今开盘(元)、String(6)涨跌额(元)、String(7)最低(元)、 String(8)最高(元)、String(9)涨跌幅(%)、String(10)成交量(手)、String(11)成交额(万元)、String (12)竞买价(元)、String(13)竞卖价(元)、String(14)委比(%)、String(15)-String(19)买一 - 买五(元)/手、String(20)-String(24)卖一 - 卖五(元)/手。
Web service的方法类似于现在concurrent项目的DBWS数据的获取,都是通过SOAP协议向DBWS服务器获取相关的数据。
利用雅虎查中国股票
http://quote.yahoo.com/d/quotes.csv?s=MSFT&f=slc1wop
返回微软的股票价格
"MSFT","4:00pm - <b>30.70</b>",+1.04,"21.46 - 30.75",29.77,29.66
http://quote.yahoo.com/d/quotes.csv?s=000969.SZ&f=slc1wop
这个返回安泰科技的,一般有半个小时的延迟。
但是s=000969.sz 这个后面的sz是什么意思呢?
深圳:)
沪市是SS后缀
ChinaStockWebService
http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx
WebXml.com.cn 中国股票行情数据 WEB 服务(支持深圳和上海股市的全部基金、债券和股票), 数据即时更新。输出GIF分时走势图、日/周/月 K 线图、及时行情数据(股票名称、行情时间、最新价、昨收盘、今开盘、涨跌额、最低、最高、涨跌幅、成交量、成交额、竞买价、竞卖价、委比、买一 - 买五、卖一 - 卖五)。此中国股票行情数据 WEB 服务仅作为用户获取信息之目的,并不构成投资建议。WebXml.com.cn 和/或其各供应商不为本页面提供信息的错误、残缺、延迟或因依靠此信息所采取的任何行动负责。市场有风险,投资需谨慎。
此中国股票行情数据Web Services请不要用于任何商业目的,若有需要请联系我们,欢迎技术交流。 QQ:8409035
使用本站 WEB 服务请注明或链接本站:http://www.webxml.com.cn/ 感谢大家的支持!
股票输入注意事项:因上海股票和深圳股票在代号上有重叠,所以在输入上海股票请在代号前加 SH,深圳加 SZ(不区分大小写),例:上证指数 sh000001,深发展A sz000001。如不输入股票代号默认上证指数 sh000001
支持下列操作。有关正式定义,请查看服务说明。
•getStockImageByCode
直接获得中国股票GIF分时走势图(545*300pixel/72dpi)
输入参数:theStockCode = 股票代号,如:sh000001; 返回数据:股票GIF分时走势图。
•getStockImageByteByCode
获得中国股票GIF分时走势图字节数组
输入参数:theStockCode = 股票代号,如:sh000001; 返回数据:股票GIF分时走势图字节数组。
字节流到图片可以参考以下方法(.NET vb):
HttpContext.Current.Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache) '不缓存
HttpContext.Current.Response.ClearContent()
HttpContext.Current.Response.ContentType = "image/Gif"
HttpContext.Current.Response.BinaryWrite(Ary) 'Ary 图片字节数组
HttpContext.Current.Response.End()
•getStockImage_kByCode
直接获得中国股票GIF日/周/月 K 线图(545*300pixel/72dpi)
输入参数:theStockCode = 股票代号,如:sh000001;theType = K 线图类型(D:日[默认]、W:周、M:月),返回数据:股票GIF日 K 线图。
•getStockImage_kByteByCode
获得中国股票GIF日/周/月 K 线图字节数组
输入参数:theStockCode = 股票代号,如:sh000001;theType = K 线图类型(D:日[默认]、W:周、M:月),返回数据:股票GIF日 K 线图字节数组。
•getStockInfoByCode
获得中国股票及时行情 String()
输 入参数:theStockCode = 股票代号,如:sh000001; 返回数据:一个一维字符串数组 String(24),结构为:String(0)股票代号、String(1)股票名称、String(2)行情时间、String(3)最新价(元)、String(4)昨收盘(元)、String(5)今开盘(元)、String(6)涨跌额(元)、String(7)最低(元)、 String(8)最高(元)、String(9)涨跌幅(%)、String(10)成交量(手)、String(11)成交额(万元)、 String(12)竞买价(元)、String(13)竞卖价(元)、String(14)委比(%)、String(15)-String(19)买一 - 买五(元)/手、String(20)-String(24)卖一 - 卖五(元)/手。
股票行情的变化, 是以秒为单位的, 一到开盘, 每秒钟都要更新每支股票的变化
一共有1500支左右的A股, 包括上证A股和深证A股
试了新浪的接口, 只能一次最多查150支股票左右
用PHP写好了程序, 单进程采集, 更新完这1500支, 平均需要
20.5953 seconds. 0.37MB memory usage还不算数据库更新, 还没有试多进程, 反正也不太具备实用价值, 这方法本身就有问题
而且每秒要向新浪发起10次查询, 不知道丫的会不会封我IP...
和webxml的技术联系了, 丫的还不如新浪, 一次只能查询40支, 而且要钱, 不限查询给我打完折一年要我1万人民币.
最终, 还是让我找到了解决办法, 方法....我保密, 商业价值还是比较高的. 实现了最小输据量传输的实时行情同步.
没有优化的情况下, 一秒同步采集一次时, 需要占用1.5M带宽, 一次同步需要0.3-0.4秒左右的时间.
优化完后, 一秒同步采集一次, 峰值是1.5M, 不过占用时间很短.
明天继续搞数据库部份, 看来要在空闲时间再入库了. 从而形成历史数据库.
有一个思路, 就是用现有的股票软件, 破解其现有的查询渠道, 开发一个专门生成行情数据的程序.
搜索了半天, 一个叫大赢家的在搞这个, 数据项比较多, 收费不低, 好像是2,3万, 看他介绍还不错的, 东西是不是那么好就不知道了.
关于速度
以新浪为例, 新浪网页上默认的刷新时间是5秒, 如果服务器上要跟它数据保持同步, 需要注意服务器端跟新浪的连接速度要快
查询次数如果过多, 不知道会不会封IP. 不过普通访客都有5秒间隔查询的权限, 如果要一秒一次, 那加4个速度同样的代理就可以解决了:)
另外注意文件锁的问题
数据量 = 1500支 * (4*60/3) = 12万
(按每股3秒变动一次算一天开盘4小时)
每开盘一天, 估计数据库要增加12万条记录, 数据库, 表, 字段要规划好, 准备使用MYSQL或SQLITE
今天没开盘, 等明天开了盘, 搞了数据库再说吧
我之所以开始这个题目,是因为我又看到有人问起如何从WEB中取数据了。随着炒股的人越来越多,可能很多人喜欢用EXCEL来分析股票信息。可是,如何得到股价信息呢?这又是一个问题。
我之前看到的程序,都是从类似business.sohu.com或finance.sina.com.cn中取数据。用XMLHTTP读取大段的网页然后进行数据分离。这种做是对的,但是却不是最快的。要知道用XMLHTTP读取数据的过程,其实就是你打开网页的过程。你打开网页有多快,XMLHTTP就有多快。因此,如何获取最低层的那个GET是最重要的。经过一段时间的努力,我找到了金融街网站的股票数据信息的最底层的那个GET,速度快,底层的返回数据没有一句http语言,纯文本,易于处理。
现在就将这两个函数公开,希望能对用到的朋友提供一点帮助。
对于其他网页数据的获取,请参照下面的GetHttp函数。只需要在函数参数中加入自己的网址就行了。另外,如果你是经常需要从不同的网页获取数据,为了便于处理得到的文本,建议学习一下“正则表达式”,我们论坛上用的。
好了,言归正传。下面就介绍这两个函数。
取金融街某支股票当天数据的函数Jrj0DayData
函数使用说明
•参数StockCode输入股票代码
•函数以数组形式返回当天数据
Function Jrj0DayData(ByRef StockCode As String)
Dim Url As String
Url = " http://quote.jrj.com.cn/htmdata/html/" & StockCode & ".htm"
Url = GetHttp(Url)
Jrj0DayData = Split(Url, ",")
End Function
返回的数组有元素38个,数组元素含义如下:
数组的各元素的含义如下所示:
Debug.Print "日期" & arrA(1)
Debug.Print "时间" & arrA(2)
Debug.Print "成交价" & arrA(3)
Debug.Print "现手" & arrA(4)
Debug.Print "涨跌" & arrA(5)
Debug.Print "幅度" & arrA(6)
Debug.Print "均价" & arrA(7)
Debug.Print "总量" & arrA(8)
Debug.Print "金额" & arrA(9)
Debug.Print "主买或外盘" & arrA(10)
Debug.Print "主卖或内盘" & arrA(11)
Debug.Print "昨收" & arrA(12)
Debug.Print "开盘" & arrA(13)
Debug.Print "最高" & arrA(14)
Debug.Print "最低" & arrA(15)
Debug.Print "委比" & arrA(16)
Debug.Print "委差" & arrA(17)
Debug.Print "量比" & arrA(18)
'下面的格式就是买卖交替,从19-38
Debug.Print "买①" & arrA(19)
Debug.Print "买①量" & arrA(20)
Debug.Print "卖①" & arrA(21)
Debug.Print "卖①量" & arrA(22)
可以说,这一个数组已经包括了某支股票当日的基本信息,比较全了。
第二个函数,获取历史价格信息
金融街取某一股票80天数据的函数
用法:参数StockCode输入某股票代码。函数以数组形式返回80天数据,数组每个元素中存贮着类似(2007-04-20 开:48.23 高:50.79 低:48.00 收:50.27 量:461974 额:228812.67 )的数据。
Function Jrj80DayData(ByRef StockCode As String)
Dim Url As String
Dim objREGEXP As Object
Url = " http://chart.jrj.com/htmdata/KLINE/ " & StockCode & ".js"
Url = GetHttp(Url)
Set objREGEXP = CreateObject("VBSCRIPT.REGEXP")
With objREGEXP
.Global = True
.Pattern = "[a\[][^\]]*[\]]"
Url = .Replace(Url, "")
End With
Set objREGEXP = Nothing
Url = Replace(Url, "= ", "")
Url = Replace(Url, """", "")
Url = Replace(Url, Chr(13), "")
Url = Replace(Url, ";", "")
Jrj80DayData = Split(Url, Chr(10))
End Function
函数返回的数组有80个元素,从0-79中依次存着类似2007-04-20 开:48.23 高:50.79 低:48.00 收:50.27 量:461974 额:228812.67 这样的内容。至于你要事先显示此字符串还是要只取数据进行分析,那就随你自己了。
前面两个函数的运用,是要用到下面的这两个函数的。这两个函数是必须的。一个是xmlhttp组件的运用,一个是纠正乱码的。
Function GetHttp(Url)
Dim objXML
On Error Resume Next
Set objXML = CreateObject("Microsoft.XMLHTTP")
With objXML
.Open "Get", Url, False, "", ""
.Send
GetHttp = .ResponseBody
End With
GetHttp = BytesToBstr(GetHttp, "GB2312")
Set objXML = Nothing
On Error GoTo 0
End Function
Function BytesToBstr(strBody, CodeBase)
Dim objStream
Set objStream = CreateObject("Adodb.Stream")
With objStream
.Type = 1
.Mode = 3
.Open
.Write strBody
.Position = 0
.Type = 2
.Charset = CodeBase
BytesToBstr = .ReadText
End With
objStream.Close
Set objStream = Nothing
End Function
1.http/javascript接口取数据
2.web-service接口
1.http/javascript接口取数据
1.1Sina股票数据接口
以大秦铁路(股票代码:601006)为例,如果要获取它的最新行情,只需访问新浪的股票数据
接口:http://hq.sinajs.cn/list=sh601006这个url会返回一串文本,例如:
var hq_str_sh601006="大秦铁路, 27.55, 27.25, 26.91, 27.55, 26.20, 26.91, 26.92,
22114263, 589824680, 4695, 26.91, 57590, 26.90, 14700, 26.89, 14300,
26.88, 15100, 26.87, 3100, 26.92, 8900, 26.93, 14230, 26.94, 25150, 26.95, 15220, 26.96, 2008-01-11, 15:05:32";
这个字符串由许多数据拼接在一起,不同含义的数据用逗号隔开了,按照程序员的思路,顺序号从0开始。
0:”大秦铁路”,股票名字;
1:”27.55″,今日开盘价;
2:”27.25″,昨日收盘价;
3:”26.91″,当前价格;
4:”27.55″,今日最高价;
5:”26.20″,今日最低价;
6:”26.91″,竞买价,即“买一”报价;
7:”26.92″,竞卖价,即“卖一”报价;
8:”22114263″,成交的股票数,由于股票交易以一百股为基本单位,所以在使用时,通常把该值除以一百;
9:”589824680″,成交金额,单位为“元”,为了一目了然,通常以“万元”为成交金额的单位,所以通常把该值除以一万;
10:”4695″,“买一”申请4695股,即47手;
11:”26.91″,“买一”报价;
12:”57590″,“买二”
13:”26.90″,“买二”
14:”14700″,“买三”
15:”26.89″,“买三”
16:”14300″,“买四”
17:”26.88″,“买四”
18:”15100″,“买五”
19:”26.87″,“买五”
20:”3100″,“卖一”申报3100股,即31手;
21:”26.92″,“卖一”报价
(22, 23), (24, 25), (26,27), (28, 29)分别为“卖二”至“卖四的情况”
30:”2008-01-11″,日期;
31:”15:05:32″,时间;
这个接口对于JavaScript程序非常方便,通常的使用方式为,静态或动态地在页面中插入:
<script type="text/javascript" src="http://hq.sinajs.cn/list=sh601006" charset="gb2312">
</script>
<script type="text/javascript">
var elements=hq_str_sh601006.split(",");
document.write("current price:"+elements[3]);
</script>
这段代码输出大秦铁路(股票代码:601006)的当前股价
current price:14.20
如果你要同时查询多个股票,那么在URL最后加上一个逗号,再加上股票代码就可以了;比如你要一次查询大秦铁路(601006)和大同煤业(601001)的行情,就这样使用URL:
http://hq.sinajs.cn/list=sh601003,sh601001
但如果你要查询大盘指数,情况会有不同,比如查询上证综合指数(000001),使用如下URL:
http://hq.sinajs.cn/list=s_sh000001 服务器返回的数据为:
var hq_str_s_sh000001="上证指数,3094.668,-128.073,-3.97,436653,5458126";
数据含义分别为:指数名称,当前点数,当前价格,涨跌率,成交量(手),成交额(万元);
查询深圳成指的URL为:
http://hq.sinajs.cn/list=s_sz399001
对于股票的K线图,日线图等的获取可以通过请求http://image.sinajs.cn/…./…/*.gif此URL获取,其中*代表股票代码,详见如下:
查看日K线图:
http://image.sinajs.cn/newchart/daily/n/sh601006.gif
分时线的查询:
http://image.sinajs.cn/newchart/min/n/sh000001.gif
日K线查询:
http://image.sinajs.cn/newchart/daily/n/sh000001.gif
周K线查询:
http://image.sinajs.cn/newchart/weekly/n/sh000001.gif
月K线查询:
http://image.sinajs.cn/newchart/monthly/n/sh000001.gif
2. web-service接口
2.1 CHINAstock的web-service:
http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx
中国股票行情数据 WEB 服务(支持深圳和上海股市的全部基金、债券和股票),数据即时更新。输出GIF分时走势图、日/周/月 K 线图、及时行情数据(股票名称、行情时间、最新价、昨收盘、今开盘、涨跌额、最低、最高、涨跌幅、成交量、成交额、竞买价、竞卖价、委比、买一 - 买五、卖一 - 卖五)。此WEB服务提供了如下几个接口:
2.1.1 getStockImageByCode
GET 股票GIF分时走势图
INput:theStockCode = 股票代号,如:sh000001
POST /WebServices/ChinaStockWebService.asmx HTTP/1.1
Host: www.webxml.com.cn
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: http://WebXml.com.cn/getStockImageByCode
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getStockImageByCode xmlns="http://WebXml.com.cn/">
<theStockCode>string</theStockCode>
</getStockImageByCode>
</soap:Body>
</soap:Envelope>
Output:
2.1.2 getStockImageByteByCode
获得中国股票GIF分时走势图字节数组
INput:theStockCode = 股票代号,如:sh000001
POST /WebServices/ChinaStockWebService.asmx HTTP/1.1Host: www.webxml.com.cnContent-Type: text/xml; charset=utf-8Content-Length: lengthSOAPAction: "http://WebXml.com.cn/getStockImageByteByCode" <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <getStockImageByteByCode xmlns="http://WebXml.com.cn/"> <theStockCode>string</theStockCode> </getStockImageByteByCode> </soap:Body></soap:Envelope>
返回的数据如下:
<?xml version="1.0" encoding="utf-8" ?>
<base64Binary xmlns="http://WebXml.com.cn/">R0lGODlhIQIsAfcAAAAAAAwLBxkGBQ4ODhAQEBsSChUVFS4TDB8eGQkA9koPCDAAzy4mFVgAp2UYC0IqEUYuBVwiDEAsI1QnFX8AgDU1NUozFlgxD6cBWVY5FnIwEmQ4Gc0AMlhDHPEADlVJMEpKSm1IHOUBWpY3FZMyVY9IGXRWIEFmWGNYUmpdPXJgHQB8HK9EGGBgX4lXIACoAHhkMyt4m4VkJtstbv8A
2.1.3 getStockImage_kByCode
直接获得中国股票GIF日/周/月 K 线图(545*300pixel/72dpi)
INPUT: theStockCode = 股票代号
theType = K 线图类型(D:日[默认]、W:周、M:月),
POST /WebServices/ChinaStockWebService.asmx HTTP/1.1Host: www.webxml.com.cnContent-Type: text/xml; charset=utf-8Content-Length: lengthSOAPAction: "http://WebXml.com.cn/getStockImage_kByCode" <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <getStockImage_kByCode xmlns="http://WebXml.com.cn/"> <theStockCode>string</theStockCode> <theType>string</theType> </getStockImage_kByCode> </soap:Body></soap:Envelope>
比如按照下图所示输入:
返回的结果就是周K线图:
2.1.4 getStockImage_kByteByCode
获得中国股票GIF日/周/月 K 线图字节数组
Input:theStockCode = 股票代号,如:sh000001
POST /WebServices/ChinaStockWebService.asmx HTTP/1.1Host: www.webxml.com.cnContent-Type: text/xml; charset=utf-8Content-Length: lengthSOAPAction: "http://WebXml.com.cn/getStockImage_kByteByCode" <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <getStockImage_kByteByCode xmlns="http://WebXml.com.cn/"> <theStockCode>string</theStockCode> <theType>string</theType> </getStockImage_kByteByCode> </soap:Body></soap:Envelope>HTTP/1.1 200 OKContent-Type: text/xml; charset=utf-8Content-Length: length <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <getStockImage_kByteByCodeResponse xmlns="http://WebXml.com.cn/"> <getStockImage_kByteByCodeResult>base64Binary</getStockImage_kByteByCodeResult> </getStockImage_kByteByCodeResponse> </soap:Body></soap:Envelope>比如按照下图输入
返回的结果就是周K线图字节数组
<?xml version="1.0" encoding="utf-8" ?>
<base64Binary xmlns="http://WebXml.com.cn/">R0lGODlhIQIsAfcAAAAAAAwLBxkGBQ4ODhAQEBsSChUVFS4TDB8eGQkA9koPCDAAzy4mFVgAp2UYC0IqEUYuBVwiDEAsI1QnFX8AgDU1NUozFlgxD6cBWVY5FnIwEmQ4Gc0AMlhDHPEADlVJMEpKSm1IHOUBWpY3FZMyVY9IGXRWIEFmWGNYUmpdPXJgHQB8HK9EGGBgX4lXIACoAHhkMyt4m4VkJtstbv8A
2.1.5 getStockInfoByCode
获得中国股票及时行情
input:theStockCode = 股票代号
POST /WebServices/ChinaStockWebService.asmx HTTP/1.1Host: www.webxml.com.cnContent-Type: text/xml; charset=utf-8Content-Length: lengthSOAPAction: "http://WebXml.com.cn/getStockInfoByCode" <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <getStockInfoByCode xmlns="http://WebXml.com.cn/"> <theStockCode>string</theStockCode> </getStockInfoByCode> </soap:Body></soap:Envelope>返回的值一个一维字符串数组 String(24),结构为:String(0)股票代号、String(1)股票名称、String(2)行情时间、String(3)最新价(元)、String(4)昨收盘(元)、String(5)今开盘(元)、String(6)涨跌额(元)、String(7)最低(元)、 String(8)最高(元)、String(9)涨跌幅(%)、String(10)成交量(手)、String(11)成交额(万元)、String (12)竞买价(元)、String(13)竞卖价(元)、String(14)委比(%)、String(15)-String(19)买一 - 买五(元)/手、String(20)-String(24)卖一 - 卖五(元)/手。
Web service的方法类似于现在concurrent项目的DBWS数据的获取,都是通过SOAP协议向DBWS服务器获取相关的数据。
利用雅虎查中国股票
http://quote.yahoo.com/d/quotes.csv?s=MSFT&f=slc1wop
返回微软的股票价格
"MSFT","4:00pm - <b>30.70</b>",+1.04,"21.46 - 30.75",29.77,29.66
http://quote.yahoo.com/d/quotes.csv?s=000969.SZ&f=slc1wop
这个返回安泰科技的,一般有半个小时的延迟。
但是s=000969.sz 这个后面的sz是什么意思呢?
深圳:)
沪市是SS后缀
ChinaStockWebService
http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx
WebXml.com.cn 中国股票行情数据 WEB 服务(支持深圳和上海股市的全部基金、债券和股票), 数据即时更新。输出GIF分时走势图、日/周/月 K 线图、及时行情数据(股票名称、行情时间、最新价、昨收盘、今开盘、涨跌额、最低、最高、涨跌幅、成交量、成交额、竞买价、竞卖价、委比、买一 - 买五、卖一 - 卖五)。此中国股票行情数据 WEB 服务仅作为用户获取信息之目的,并不构成投资建议。WebXml.com.cn 和/或其各供应商不为本页面提供信息的错误、残缺、延迟或因依靠此信息所采取的任何行动负责。市场有风险,投资需谨慎。
此中国股票行情数据Web Services请不要用于任何商业目的,若有需要请联系我们,欢迎技术交流。 QQ:8409035
使用本站 WEB 服务请注明或链接本站:http://www.webxml.com.cn/ 感谢大家的支持!
股票输入注意事项:因上海股票和深圳股票在代号上有重叠,所以在输入上海股票请在代号前加 SH,深圳加 SZ(不区分大小写),例:上证指数 sh000001,深发展A sz000001。如不输入股票代号默认上证指数 sh000001
支持下列操作。有关正式定义,请查看服务说明。
•getStockImageByCode
直接获得中国股票GIF分时走势图(545*300pixel/72dpi)
输入参数:theStockCode = 股票代号,如:sh000001; 返回数据:股票GIF分时走势图。
•getStockImageByteByCode
获得中国股票GIF分时走势图字节数组
输入参数:theStockCode = 股票代号,如:sh000001; 返回数据:股票GIF分时走势图字节数组。
字节流到图片可以参考以下方法(.NET vb):
HttpContext.Current.Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache) '不缓存
HttpContext.Current.Response.ClearContent()
HttpContext.Current.Response.ContentType = "image/Gif"
HttpContext.Current.Response.BinaryWrite(Ary) 'Ary 图片字节数组
HttpContext.Current.Response.End()
•getStockImage_kByCode
直接获得中国股票GIF日/周/月 K 线图(545*300pixel/72dpi)
输入参数:theStockCode = 股票代号,如:sh000001;theType = K 线图类型(D:日[默认]、W:周、M:月),返回数据:股票GIF日 K 线图。
•getStockImage_kByteByCode
获得中国股票GIF日/周/月 K 线图字节数组
输入参数:theStockCode = 股票代号,如:sh000001;theType = K 线图类型(D:日[默认]、W:周、M:月),返回数据:股票GIF日 K 线图字节数组。
•getStockInfoByCode
获得中国股票及时行情 String()
输 入参数:theStockCode = 股票代号,如:sh000001; 返回数据:一个一维字符串数组 String(24),结构为:String(0)股票代号、String(1)股票名称、String(2)行情时间、String(3)最新价(元)、String(4)昨收盘(元)、String(5)今开盘(元)、String(6)涨跌额(元)、String(7)最低(元)、 String(8)最高(元)、String(9)涨跌幅(%)、String(10)成交量(手)、String(11)成交额(万元)、 String(12)竞买价(元)、String(13)竞卖价(元)、String(14)委比(%)、String(15)-String(19)买一 - 买五(元)/手、String(20)-String(24)卖一 - 卖五(元)/手。
股票行情的变化, 是以秒为单位的, 一到开盘, 每秒钟都要更新每支股票的变化
一共有1500支左右的A股, 包括上证A股和深证A股
试了新浪的接口, 只能一次最多查150支股票左右
用PHP写好了程序, 单进程采集, 更新完这1500支, 平均需要
20.5953 seconds. 0.37MB memory usage还不算数据库更新, 还没有试多进程, 反正也不太具备实用价值, 这方法本身就有问题
而且每秒要向新浪发起10次查询, 不知道丫的会不会封我IP...
和webxml的技术联系了, 丫的还不如新浪, 一次只能查询40支, 而且要钱, 不限查询给我打完折一年要我1万人民币.
最终, 还是让我找到了解决办法, 方法....我保密, 商业价值还是比较高的. 实现了最小输据量传输的实时行情同步.
没有优化的情况下, 一秒同步采集一次时, 需要占用1.5M带宽, 一次同步需要0.3-0.4秒左右的时间.
优化完后, 一秒同步采集一次, 峰值是1.5M, 不过占用时间很短.
明天继续搞数据库部份, 看来要在空闲时间再入库了. 从而形成历史数据库.
有一个思路, 就是用现有的股票软件, 破解其现有的查询渠道, 开发一个专门生成行情数据的程序.
搜索了半天, 一个叫大赢家的在搞这个, 数据项比较多, 收费不低, 好像是2,3万, 看他介绍还不错的, 东西是不是那么好就不知道了.
关于速度
以新浪为例, 新浪网页上默认的刷新时间是5秒, 如果服务器上要跟它数据保持同步, 需要注意服务器端跟新浪的连接速度要快
查询次数如果过多, 不知道会不会封IP. 不过普通访客都有5秒间隔查询的权限, 如果要一秒一次, 那加4个速度同样的代理就可以解决了:)
另外注意文件锁的问题
数据量 = 1500支 * (4*60/3) = 12万
(按每股3秒变动一次算一天开盘4小时)
每开盘一天, 估计数据库要增加12万条记录, 数据库, 表, 字段要规划好, 准备使用MYSQL或SQLITE
今天没开盘, 等明天开了盘, 搞了数据库再说吧
我之所以开始这个题目,是因为我又看到有人问起如何从WEB中取数据了。随着炒股的人越来越多,可能很多人喜欢用EXCEL来分析股票信息。可是,如何得到股价信息呢?这又是一个问题。
我之前看到的程序,都是从类似business.sohu.com或finance.sina.com.cn中取数据。用XMLHTTP读取大段的网页然后进行数据分离。这种做是对的,但是却不是最快的。要知道用XMLHTTP读取数据的过程,其实就是你打开网页的过程。你打开网页有多快,XMLHTTP就有多快。因此,如何获取最低层的那个GET是最重要的。经过一段时间的努力,我找到了金融街网站的股票数据信息的最底层的那个GET,速度快,底层的返回数据没有一句http语言,纯文本,易于处理。
现在就将这两个函数公开,希望能对用到的朋友提供一点帮助。
对于其他网页数据的获取,请参照下面的GetHttp函数。只需要在函数参数中加入自己的网址就行了。另外,如果你是经常需要从不同的网页获取数据,为了便于处理得到的文本,建议学习一下“正则表达式”,我们论坛上用的。
好了,言归正传。下面就介绍这两个函数。
取金融街某支股票当天数据的函数Jrj0DayData
函数使用说明
•参数StockCode输入股票代码
•函数以数组形式返回当天数据
Function Jrj0DayData(ByRef StockCode As String)
Dim Url As String
Url = " http://quote.jrj.com.cn/htmdata/html/" & StockCode & ".htm"
Url = GetHttp(Url)
Jrj0DayData = Split(Url, ",")
End Function
返回的数组有元素38个,数组元素含义如下:
数组的各元素的含义如下所示:
Debug.Print "日期" & arrA(1)
Debug.Print "时间" & arrA(2)
Debug.Print "成交价" & arrA(3)
Debug.Print "现手" & arrA(4)
Debug.Print "涨跌" & arrA(5)
Debug.Print "幅度" & arrA(6)
Debug.Print "均价" & arrA(7)
Debug.Print "总量" & arrA(8)
Debug.Print "金额" & arrA(9)
Debug.Print "主买或外盘" & arrA(10)
Debug.Print "主卖或内盘" & arrA(11)
Debug.Print "昨收" & arrA(12)
Debug.Print "开盘" & arrA(13)
Debug.Print "最高" & arrA(14)
Debug.Print "最低" & arrA(15)
Debug.Print "委比" & arrA(16)
Debug.Print "委差" & arrA(17)
Debug.Print "量比" & arrA(18)
'下面的格式就是买卖交替,从19-38
Debug.Print "买①" & arrA(19)
Debug.Print "买①量" & arrA(20)
Debug.Print "卖①" & arrA(21)
Debug.Print "卖①量" & arrA(22)
可以说,这一个数组已经包括了某支股票当日的基本信息,比较全了。
第二个函数,获取历史价格信息
金融街取某一股票80天数据的函数
用法:参数StockCode输入某股票代码。函数以数组形式返回80天数据,数组每个元素中存贮着类似(2007-04-20 开:48.23 高:50.79 低:48.00 收:50.27 量:461974 额:228812.67 )的数据。
Function Jrj80DayData(ByRef StockCode As String)
Dim Url As String
Dim objREGEXP As Object
Url = " http://chart.jrj.com/htmdata/KLINE/ " & StockCode & ".js"
Url = GetHttp(Url)
Set objREGEXP = CreateObject("VBSCRIPT.REGEXP")
With objREGEXP
.Global = True
.Pattern = "[a\[][^\]]*[\]]"
Url = .Replace(Url, "")
End With
Set objREGEXP = Nothing
Url = Replace(Url, "= ", "")
Url = Replace(Url, """", "")
Url = Replace(Url, Chr(13), "")
Url = Replace(Url, ";", "")
Jrj80DayData = Split(Url, Chr(10))
End Function
函数返回的数组有80个元素,从0-79中依次存着类似2007-04-20 开:48.23 高:50.79 低:48.00 收:50.27 量:461974 额:228812.67 这样的内容。至于你要事先显示此字符串还是要只取数据进行分析,那就随你自己了。
前面两个函数的运用,是要用到下面的这两个函数的。这两个函数是必须的。一个是xmlhttp组件的运用,一个是纠正乱码的。
Function GetHttp(Url)
Dim objXML
On Error Resume Next
Set objXML = CreateObject("Microsoft.XMLHTTP")
With objXML
.Open "Get", Url, False, "", ""
.Send
GetHttp = .ResponseBody
End With
GetHttp = BytesToBstr(GetHttp, "GB2312")
Set objXML = Nothing
On Error GoTo 0
End Function
Function BytesToBstr(strBody, CodeBase)
Dim objStream
Set objStream = CreateObject("Adodb.Stream")
With objStream
.Type = 1
.Mode = 3
.Open
.Write strBody
.Position = 0
.Type = 2
.Charset = CodeBase
BytesToBstr = .ReadText
End With
objStream.Close
Set objStream = Nothing
End Function
相关推荐
股票行情实时数据接口-A股,完全免费的沪深证券股票数据-中国股市,python最简封装的API接口,包含日线,历史K线,分时线,分钟线,全部实时采集,系统包括新浪腾讯双数据核心采集获取,自动故障切换,STOCK数据格式成...
最近学习Python进行量化交易,第一步是获取实时行情数据,本资源是从新浪财经API接口获取期货实时行情数据的Python源代码(本代码获得的数据不再仅是5分钟行情数据,而是秒级行情更新,行情刷新间隔视网速及获取品种...
腾讯股票实时数据接口---五档行情---VC++ 6.0获取并显示沪深股市实时行情数据---.rar
最近学习Python进行量化交易,本资源是从新浪财经最新API接口获取期货秒级实时行情数据后,对开盘涨跌幅进行排序,选取涨跌幅最大的品种,另加自选3个品种进行实时监测,每隔2分钟对所有品种排一次序,然后再选涨...
获取股票逐笔成交api接口java的demo
Pytdx 是一款纯Python语言开发的类似TradeX的行情数据接口的实现。它提供各种股票/期货/期权等等实时行情数据。 提供数据种类包括: market category name short_name0 1 1 临时股 TP1 4 12 郑州商品期权 OZ2 5 12...
最近学习Python进行量化交易,第一步是获取实时行情数据,本资源是从新浪财经网站的API接口获取期货实时行情数据的Python源代码,获得数据后转成DataFrame数据对象,并存入Excel不同表单以供进一步的数据分析。
股票查询、股票价格实时查询股票查询、股票价格实时查询股票查询、股票价格实时查询股票查询、股票价格实时查询
天猫商品价格接口,天猫商品列表接口,天猫商品数据接口,一键复制淘宝商品接口,整店淘宝商品接口,一键商品搬家接口,整店商品搬家接口,接口可用于代购业务,数据分析业务,商品监控业务,商品搬家业务,品牌监控...
C#获取Web.API数据的后台方法,本例不包含api的输出方法 (输出方法请参考:http://download.csdn.net/detail/djk8888/9687185) (api的token验证参考:http://download.csdn.net/detail/djk8888/9680396)。 调试...
文华指数数据服务API接口说明,文华指数数据服务API程序demo,文华商品指数(wenhua CCI),跟踪国内35种上市商品价格综合表现,较全面地涵盖了目前市场上的期货品种。指数由“文华商品”总指数和“有色金属”、...
简单的工具: Python 、prometheus+api接口数据采集、导程表格。统计数据收集
内置使用方式,金蝶 星空云 API接口 数据字典 ,金蝶云星空数据字典V7.6
1、封装WeatherInfo实体类,对接口返回的结果进行映射的实体类 2、WeatherUtils类,负责调用第三方天气预报api接口处理的工具类,包括根据城市查询等,返回的格式是json 3、test类,对接口进行功能性测试
Delphi Xe10,通过Idhttp控件进行http get 的形式,实时获取新浪股票API接口提供的行情数据。
动态数据:API接口获取(如股票、天气、今日热搜等); 素材丰富:含动图、装饰、动态排序、多图表联合共享数据集; 全屏及链接:点击标题就可全屏,点击股票可查看大图,点击热搜可查看具体新闻。 vue可导入的可视化...
ETL工具(kettle)使用系列(五)-kettle调用restApi接口获取数据插入数据库-真实案例脱密处理-kettle脚本
ETL KETTLE 中利用Httpclient 调用webservice接口获取XML数据,并解析XML 数据。 完整的KTR实例
PB调用http api接口,PB解析json到数据源,get和post都有案列,PB解析json,可解析树立菜单,也完美可解析后将结果存到数据源