如何通过JS接口获取数据

2015/12/7 23:43:19 人评论 次浏览 分类:JavaScript

         1. 一切源于股票
        前段时间有在炒股,后来渐渐地,不想看股票了。想弄个股票报警的功能,比如股价在某个高价位或者是某个低价位,要提醒一下自己。同花顺的报警要会员的,我没钱开通所以不需要会员。

        2.寻找股票的数据接口寻找最简单的方案。

        这种股票数据接口在网上一大把的,首先就简单的方案莫过于通过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>

      

         这样子就实现了,确实很简单。


        3.想要个查询的功能,或者是说不断地刷新数据

        如果需要要无刷新查询,怎么处理好呢?用<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和删除script呢?

        结果还是不行,会报错,因为在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’


        4.用ajax试试吧
        明显是跨域操作,ajax可以??我也不信,网上一大把,都写得像可以的一样,我也试试吧,难道可以??

        $.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(';');
        }
        });

       

        一番复制粘贴之后一运行,我只能说又浪费了时间了。肯定是跨域的问题,没有任何的返回。

        然后就顺便看了一下跨域的实现的知识。(跨域的知识以后再说)

        在被请求的接口添加accept control 为"*"或者  "www.*****.com" 的headers才 实现的。但是这么不安全的跨域,谁会开放给你。

        5.代理
        看来要使用代理才行了。通过页面ajax到本域的接口,当然本域的接口要去掉外域的接口,然后再解析。

        这下子可以了。


        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;
        }


        6.反正要走“代理”的那一步,用web-service也差不多。

相关资讯

  • Js通过referrer获取搜索引擎来源

    在做网站优化的时候,需要了解用户搜索引擎来源,可以在Html页面中通过JS获取document.referrer,然后在document.referrer中通过搜索引擎对应的域名进行识别。 比如百度对应域名中的存在‘baidu’,360 搜中,含有so.com,可以作为标识。

    2016/5/20 11:17:05

共有访客发表了评论 网友评论

验证码: 看不清楚?