百度统计API初探

  |  

摘要: 初步了解百度统计API,并用 Python 获取数据

【对数据分析、人工智能、金融科技、风控服务感兴趣的同学,欢迎关注我哈,阅读更多原创文章】
我的网站:潮汐朝夕的生活实验室
我的公众号:潮汐朝夕
我的知乎:潮汐朝夕
我的github:FennelDumplings
我的leetcode:FennelDumplings


百度统计简介

百度统计 是一个一站式智能数据分析与应用平台。属于数据产品,类似于神策数据、火山引擎等,主要有以下一些功能。

全端数据资产管理

  • 全埋点、可视化圈选、API等多种方式采集数据
  • 网站、APP、小程序等各端数据一站式管理
  • 构建用户id体系,全面深度管理用户资产

多维智能数据分析

  • 独家支持用户搜索行为、全网触媒、分群画像洞察
  • 事件、行为流、漏斗、转化归因等全场景智能分析模型

全域数据营销运营应用

  • A/B测试工具,可视化实验支持分钟级完成部署
  • 无缝对接百度推广,精准推动高潜人群持续转化
  • 跨渠道投放追踪,支持自定义标签上传下载及再营销

将百度统计应用到个人网站

前面这些功能对于一个小小的个人网站来说,远远用不到。本文主要关注如何使用百度统计 API 在个人网站上显示一些网站数据。

首先点击数据管理中的数据 API 标签,如下图:

会得到一个 accessToken,这个值在调用相关接口的时候要用。有效期 30 天,到期要手动重新获取。

如果要自行获取 accessToken,可以注册成为 API 开发者,并创建应用申请对应的接口权限, 详情请参考文档百度营销开发者中心开发文档-API介绍

我们暂时不需要注册为 API 开发者,只需要了解统计 API 怎么用即可。Tongji API 调试工具及文档如下:

登录百度统计,点击左侧导航菜单“网站概况”,即可看到地址栏中的一串数字,就是网站 ID,这个 ID 在后面调用获取报告数据的 API 时要用的。

调试工具测试接口

下面我用调试工具调用一下 API,Tongji API调试工具

如下图,我们测试 https://api.baidu.com/json/tongji/v1/ReportService/getData,也就是获取报告数据的接口。

对应的请求 JSON 如下:

响应结果如下,通过简要分析,我们可以知道各个字段的含义以及数据的对应关系。

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
71
72
73
74
75
{
"header": {
"desc": "success",
"failures": [],
"oprs": 1,
"succ": 1,
"oprtime": 0,
"quota": 1,
"rquota": 200000000,
"status": 0,
"traceid": "35a9a327-81ef-11ed-a88e-bffd9c189c42"
},
"body": {
"data": [
{
"result": {
"timeSpan": [
"2022/12/19 - 2022/12/21"
],
"fields": [
"simple_date_title",
"pv_count",
"visitor_count",
"ip_count",
"bounce_ratio",
"avg_visit_time",
"trans_count"
],
"items": [
[
[
"2022/12/19"
],
[
"2022/12/20"
],
[
"2022/12/21"
]
],
[
[
79,
53,
55,
81.03,
252,
"--"
],
[
157,
67,
71,
78.57,
348,
"--"
],
[
146,
46,
46,
73.68,
421,
"--"
]
],
[],
[]
]
}
}
],
"expand": {}
}
}

在 Python 中调用接口

如果要在网站上展示网站数据,可以考虑的路线是首先利用 python 将百度统计 api 返回的统计数据下载保存为 json 文件,再利用 JavaScript 读取并处理 json 数据,将处理好的数据通过 echarts.js 绘制为图表。

这里我们解决前半部分,也就是用 Python 讲百度统计 API 返回的数据下载为 json 文件。后面的 JavaScript 处理以后再完成。

调用 API 获取数据的代码在 get.py 中。下面我们看看如何在 Python 中使用 API。

  • API 地址:https://api.baidu.com/json/tongji/v1/ReportService/getData
  • 参数:
参数名称 参数类型 描述
site_id uint 站点ID
method string 要查询的报告
start_date string 查询起始时间
end_date string 查询结束时间
metrics string 自定义指标

构造时间

1
2
3
4
today = datetime.date.today()
yesterday = today - datetime.timedelta(days=1)
fifteenago = today - datetime.timedelta(days=7)
end, start = str(yesterday).replace("-", ""), str(fifteenago).replace("-", "")

构建请求包

以访问地域的方法 visit/district/a 为例:

1
2
3
4
5
6
7
8
9
10
11
12
data = {"header": {"account_type": 1
,"password": "password"
,"token": "开通统计 API 的 token"
,"username": "用户名"
}
,"body": {"siteId": "域名id"
,"method": "visit/district/a" # 地域访问
,"start_date": start
,"end_date": end
,"metrics": "pv_count,visitor_count,avg_visit_time" # 所需要的指标
}
}

得到返回结果

1
2
3
4
response = requests.post("https://api.baidu.com/json/tongji/v1/ReportService/getData", json=data)

with open("result.json", 'wb') as f:
f.write(response.content)

完整代码

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
import time
import datetime

import requests

# 开始统计的日期
# start_date = '20201101'
# date = datetime.datetime.now()

today = datetime.date.today()
yesterday = today - datetime.timedelta(days=1)
fifteenago = today - datetime.timedelta(days=7)
end_date, start_date = str(yesterday).replace("-", ""), str(fifteenago).replace("-", "")

# 结束统计的日期
# end_date = str(date.year) + (str(date.month) if date.month > 9 else ('0' + str(date.month))) + (str(date.day) if date.day > 9 else ('0' + str(date.day)))

# token 和 siteid
# 需要修改为你的 token 和 siteid
access_token = "...."
site_id = "...."

# 百度统计 API
base_url = "https://api.baidu.com/json/tongji/v1/ReportService/getData"

def get_data(method, metrics, fileName):
data = {
"header": {
"userName": "...",
"accessToken": access_token,
"account_type": 1
},
"body": {
"site_id": site_id,
"start_date": start_date,
"end_date": end_date,
"metrics": metrics,
"method": method
}
}
response = requests.post(base_url, json=data)

with open(fileName, 'wb') as f:
f.write(response.content)

# 统计访问次数 PV 填写 'pv_count',统计访客数 UV 填写 'visitor_count'
pv = 'pv_count'
uv = 'visitor_count'

# 访客地图
get_data('visit/district/a', pv, 'map.json')

# 访问来源
get_data('source/all/a', pv, 'sources.json')

## 搜索引擎
get_data('source/engine/a', pv, 'engine.json')

## 外部链接
get_data('source/link/a', pv, 'link.json')

Share