iami233
iami233
文章155
标签37
分类4

文章分类

文章归档

利用百度统计显示网站实时在线人数

利用百度统计显示网站实时在线人数

虽然说百度统计给了一个 Tongji API 用户手册,但并未找到关于 实时在线人数 的接口请求字段,最后通过抓包在 实时访客 页面抓到了抓到了字段。

1
trend/latest/f

由于百度统计目前两种账号形式,两种账号形式 API接口 地址和 请求参数 均不相同,所以两种账号形式都写了一下。

其中最大的区别就是 百度商业账号 在需要填写 token 的基础上,还需要填写 usernamepassword。(关于百度统计的 token站点ID 如何获取,这里不在赘述,自行百度搜索即可出现大量图文教程。)

这里预设 多账户/多站点 的配置,根据自己的需求填写或新增 $userInfo 内的 array() 即可。

百度商业账号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?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;
}

百度账号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?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;
}

返回格式

1
2
3
4
5
6
7
8
9
10
{
"code": 200,
"msg": "success",
"data": [
{
"title": "一号机",
"online": 5
}
]
}

实时显示

可以利用 JSsetTimeout() 函数来实现定时刷新页面实时在线人数。

本文作者:iami233
本文链接:https://5ime.cn/onlinestats.html
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可