利用百度统计显示网站实时在线人数
3 min read
虽然说百度统计给了一个 Tongji API 用户手册,但并未找到关于 实时在线人数
的接口请求字段,最后通过抓包在 实时访客
页面抓到了抓到了字段。
trend/latest/f
由于百度统计目前两种账号形式,两种账号形式 API接口
地址和 请求参数
均不相同,所以两种账号形式都写了一下。
其中最大的区别就是 百度商业账号
在需要填写 token
的基础上,还需要填写 username
和 password
。(关于百度统计的 token
和 站点ID
如何获取,这里不在赘述,自行百度搜索即可出现大量图文教程。)
这里预设 多账户/多站点
的配置,根据自己的需求填写或新增 $userInfo
内的 array()
即可。
百度商业账号
<?php
header('Access-Control-Allow-Origin:*');
header('Content-type: application/json');
$url = 'https://api.baidu.com/json/tongji/v1/ReportService/getData';
$online = array();
$userInfo = array(
array(
'title' => '一号',
'username' => 'username',
'password' => 'password',
'token' => 'token',
'siteid' => 123456 ,
),
// array(
// 'title' => '二号',
// 'username' => 'username',
// 'password' => 'password',
// 'token' => 'token',
// 'siteid' => 123456 ,
// )
);
foreach ($userInfo as $key => $value) {
$data = array(
'header' => array(
'username' => $value['username'],
'password' => $value['password'],
'token' => $value['token'],
),
'body' => array(
'site_id' => $value['siteid'],
'method' => 'trend/latest/f',
)
);
$Json = json_decode(curl($url, $data), true);
if($Json['header']['desc'] != 'success') {
$reJson = array(
'code' => 201,
'msg' => 'error'
);
echo json_encode($reJson, JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
die;
}
array_push($online, array('title' => $value['title'],'online' => $Json['body']['data'][0]['result']['onlineNumber']));
$reJson = array(
'code' => 200,
'msg' => 'success',
'data' => $online
);
}
echo json_encode($reJson, JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
function curl($url, $data)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
百度账号
<?php
header('Access-Control-Allow-Origin:*');
header('Content-type: application/json');
$online = array();
$userInfo = array(
array(
'title' => '一号',
'siteid' => 123456 ,
'token' => 'token'
),
// array(
// 'title' => '二号',
// 'siteid' => 123456 ,
// 'token' => 'token'
// )
);
foreach ($userInfo as $key => $value) {
$url = 'https://openapi.baidu.com/rest/2.0/tongji/report/getData?access_token='. $value['token'] .'&site_id='. $value['siteid'] .'&metrics=&method=trend%2Flatest%2Ff';
$Json = json_decode(curl($url), true);
array_push($online, array('title' => $value['title'],'online' => $Json['result']['onlineNumber']));
$reJson = array(
'code' => 200,
'msg' => 'success',
'data' => $online
);
}
echo json_encode($reJson, JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
function curl($url)
{
$ch=curl_init((string)$url);
curl_setopt($ch,CURLOPT_HEADER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_TIMEOUT,5000);
$result = curl_exec($ch);
return $result;
}
返回格式
{
"code": 200,
"msg": "success",
"data": [
{
"title": "一号机",
"online": 5
}
]
}
实时显示
可以利用 JS
的 setTimeout()
函数来实现定时刷新页面实时在线人数。