Page

[api]聚合数据+jquery+ajax+json+php_curl实现股票数据实时更新

934Anson16-07-23


今天调试聚合数据的api接口,实现股票数据页面不刷新,数据自动更新功能,ajax定时get后台由php文件curl一系列操作获取聚合api返回json格式的数据。详细代码看文章。


php页面代码:使用由聚合数据提供的php代码文件

<?php
// +----------------------------------------------------------------------
// | JuhePHP [ NO ZUO NO DIE ]
// +----------------------------------------------------------------------
// | Copyright (c) 2010-2015 http://juhe.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: Juhedata <info@juhe.cn-->
// +----------------------------------------------------------------------
 
//----------------------------------
// 股票数据调用示例代码 - 聚合数据
// 在线接口文档:http://www.juhe.cn/docs/21
//----------------------------------
 
header('Content-type:text/html;charset=utf-8');
 
 
//配置您申请的appkey
$appkey = "***************************";
 
 
//************7.沪股列表************
$url = "http://web.juhe.cn:8080/finance/stock/shall";
$params = array(
      "key" => $appkey,//您申请的APPKEY
      "page" => "",//第几页,每页20条数据,默认第1页
);
$paramstring = http_build_query($params);
$content = juhecurl($url,$paramstring);
$result = json_decode($content,true);
if($result){
    if($result['error_code']=='0'){
        print_r(json_encode($result));   //将php数组装换为json对象
    }else{
        echo $result['error_code'].":".$result['reason'];
    }
}else{
    echo "请求失败";
}
//**************************************************
 
 
 
/**
 * 请求接口返回内容
 * @param  string $url [请求的URL地址]
 * @param  string $params [请求的参数]
 * @param  int $ipost [是否采用POST形式]
 * @return  string
 */
function juhecurl($url,$params=false,$ispost=0){
    $httpInfo = array();
    $ch = curl_init();
 
    curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
    curl_setopt( $ch, CURLOPT_USERAGENT , 'JuheData' );
    curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 60 );
    curl_setopt( $ch, CURLOPT_TIMEOUT , 60);
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    if( $ispost )
    {
        curl_setopt( $ch , CURLOPT_POST , true );
        curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );
        curl_setopt( $ch , CURLOPT_URL , $url );
    }
    else
    {
        if($params){
            curl_setopt( $ch , CURLOPT_URL , $url.'?'.$params );
        }else{
            curl_setopt( $ch , CURLOPT_URL , $url);
        }
    }
    $response = curl_exec( $ch );
    if ($response === FALSE) {
        //echo "cURL Error: " . curl_error($ch);
        return false;
    }
    $httpCode = curl_getinfo( $ch , CURLINFO_HTTP_CODE );
    $httpInfo = array_merge( $httpInfo , curl_getinfo( $ch ) );
    curl_close( $ch );
    return $response;
}


返回来的json数据格式为:(拿两组数据做样本)


{
	"error_code":0,
	"reason":"SUCCESSED!",
	"result":{
		"totalCount":"1117",
		"page":"1",
		"num":"20",
		"data":[
			{
				"symbol":"sh600000",
				"name":"浦发银行",
				"trade":"15.630",
				"pricechange":"-0.200",
				"changepercent":"-1.263",
				"buy":"15.610",
				"sell":"15.630",
				"settlement":"15.830",
				"open":"15.810",
				"high":"15.820",
				"low":"15.580",
				"volume":167117,
				"amount":262066573,
				"code":"600000",
				"ticktime":"15:00:00"
			},
			{
				"symbol":"sh600004",
				"name":"白云机场",
				"trade":"13.200",
				"pricechange":"-0.100",
				"changepercent":"-0.752",
				"buy":"13.200",
				"sell":"13.210",
				"settlement":"13.300",
				"open":"13.240",
				"high":"13.360",
				"low":"13.170",
				"volume":69748,
				"amount":92639368,
				"code":"600004",
				"ticktime":"15:00:00"
			},
			
		]	
}
}



js代码:js代码是我使用百度的jquery2.1.4文件库写的,代码写得比较杂乱,大家如果发现什

问题或者有什么建议麻烦留言告诉我


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<style>
td{
margin: 0px;
padding: 0px;
border: 1px solid gray;
width:100px;
height: 30px;
font-weight: bold;
}
</style>
<script>
$(function(){
var table = $('#now');
table.append("<tr><td>名称</td><td>最新价</td><td>涨跌幅</td><td>开盘价</td><td>最高</td><td>最低</td><td>昨收</td><td>时间</td></tr>");
for (var i = 1; i <20; i++) {
table.append("<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>");
}
function fillzero(v){
    if(v<10){
        v='0'+v;
    }
    return v;
}
var time = fillzero((new Date()).getHours());   //获得现在的时间

function ajaxUpdate(){          //将ajax的get请求方法封装在一起
$.ajax({
url:'juhe.php',
type:'get',
dataType:'json',
success:function(res){
var result = res.result.data;   //这里对应上面的json格式获取

for (var i = 1; i < 19; i++) {           //for循环给表格td赋值

$("table tr:eq("+i+")"+" td:eq("+0+")").text(result[i-1].name);
$("table tr:eq("+i+")"+" td:eq("+1+")").text(result[i-1].trade);
$("table tr:eq("+i+")"+" td:eq("+2+")").text(result[i-1].changepercent);
$("table tr:eq("+i+")"+" td:eq("+3+")").text(result[i-1].open);
$("table tr:eq("+i+")"+" td:eq("+4+")").text(result[i-1].high);
$("table tr:eq("+i+")"+" td:eq("+5+")").text(result[i-1].low);
$("table tr:eq("+i+")"+" td:eq("+6+")").text(result[i-1].settlement);
$("table tr:eq("+i+")"+" td:eq("+7+")").text(result[i-1].ticktime);

if (result[i-1].changepercent > 0) {          //判断涨跌幅,涨则红色上升箭头,否则绿色下降箭头
$("table tr:eq("+i+")"+" td:eq("+1+")").css('color','red');
$("table tr:eq("+i+")"+" td:eq("+2+")").css({'color':'red'}).append('&nbsp;<img src="http://quote.fx678.com/assets/img/arrow_red.png" />');
}else if (result[i-1].changepercent < 0) {
$("table tr:eq("+i+")"+" td:eq("+1+")").css('color','green');
$("table tr:eq("+i+")"+" td:eq("+2+")").css('color','green').append('&nbsp;<img src="http://quote.fx678.com/assets/img/arrow_green.png" />');
}else{
$("table tr:eq("+i+")"+" td:eq("+1+")").css('color','black');
$("table tr:eq("+i+")"+" td:eq("+2+")").css('color','black');
}

};
}
})
}

ajaxUpdate();     //由于下面setInterval要从第五秒才开始请求,所以我在这里先发送一次去请求获取json数据

if (time < 15 && time >9) {     //判断如果为收市时间则不发送ajax请求
setInterval(ajaxUpdate,1000*5);      //setInterval设置5秒钟执行一次请求
};


})

</script>
</head>
<body>
<table id="now">

</table>
</body>
</html>



控制台network数据:可以看到,html页面每隔几秒就会向后台php使用xhr方式请求数据


blob.png



最终效果图:


blob.png




来自ansion博客

2016年7月23日