这种股票数据接口在网上一大把的,首先就简单的方案莫过于通过JS的方式获取。将获取过来的数据解析一下就行。
<script type="text/javascript" charset="gb2312" src="http://hq.sinajs.cn?list=sz002363"></script> <script type="text/javascript"> var currPrice = hq_str_sz002363.split(",")[3]; </script>
这样子就实现了,确实很简单。
如果需要要无刷新查询,怎么处理好呢?用<script>吧,它的src可以无视跨域。
<script type="text/javascript" id="firstscript" charset="gb2312" ></script> var time = (new Date()).getTime(); var url = "http://hq.sinajs.cn?time="+ time +"&list=sh600802"; $("#firstscript").attr("src", urls);
企图通过修改src 获取数据,但是只能获取第一次数据而已。它返回的信息是“重新载入页面”宣布失败。
结果还是不行,会报错,因为在script请求时,会自动加上时间戳。
var $ss = $('<script '" src="' + url + '" class="stock" type="text/javascript" charset="gb2312" ><\/script>'); $("body").append($ss); console.log(hq_str_sz002363); $ss.remove();
这个例子会返回 var hq_str_sh600802?_=1380034717317="";后面部分明显就是时间戳。也就是传入的list 为 ‘sh600802?_=1380034717317’
$.ajax({ //url: 'http://hq.sinajs.cn/list=sh000001,sh601939,sh600016, //sh600528,sh600667,sh601390,sh601398,sh601857,sh600028', url: 'http://localhost:15433/index/stockcpi?list=sh000001', type: 'get', dataType: 'html', timeout: 5000, success: function(response){ var stocks = response.split(';'); } });
一番复制粘贴之后一运行,我只能说又浪费了时间了。肯定是跨域的问题,没有任何的返回。
这下子可以了。
public String Connection(String url) { string html = string.Empty; WebRequest req = WebRequest.Create(url); WebResponse res = req.GetResponse(); Stream receiveStream = res.GetResponseStream(); Encoding encode = Encoding.GetEncoding("gb2312"); StreamReader sr = new StreamReader(receiveStream, encode); char[] readbuffer = new char[256]; int n = sr.Read(readbuffer, 0, 256); while (n > 0) { string str = new string(readbuffer, 0, n); html += str; n = sr.Read(readbuffer, 0, 256); } return html; }