百度统计API的使用
百度统计API的使用
在搭建自己博客的时候,希望自己能有个日志系统,能够看到PV、UV等信息,同时自己也搭建了个ELK系统,可惜服务器配置太低(1GHZ+1G内存),根本运行不起来。只能使用第三方的日志统计了,由于之前用过一点点的百度统计,所以本平台使用百度统计来进行日志分析。

但是百度不提供数据图线给开发者使用,只能通过其TONGJI API对数据进行抓取。百度统计提供了两个接口(1.用户站点数据;2.站点报告数据),这里使用第二个接口来获取数据。
1.请求参数
链接:https://api.baidu.com/json/tongji/v1/ReportService/getData
所需参数(必须):
| 参数名称 | 参数类型 | 描述 |
|---|---|---|
| site_id | uint | 站点ID |
| method | string | 要查询的报告 |
| start_date | string | 查询起始时间 |
| end_date | string | 查询结束时间 |
| metrics | string | 自定义指标 |
详细的官方报告请访问官网TongjiApi
2.数据获取
官方同时提供了PHP和Java的版本,对于一个简简单单的获取数据的过程来说甚是繁琐,此处使用python来进行数据抓取最近七天的地域访问。
2.1 时间的获取
python中对于时间的处理找不到很好的库,所以使用了datetime,然后变成字符串。
today = datetime.date.today()
yesterday = today - datetime.timedelta(days=1)
fifteenago = today - datetime.timedelta(days=7)
end, start = str(yesterday).replace("-", ""), str(fifteenago).replace("-", "")
2.2 构建请求包
说明:siteId可以根据个人百度统计的链接获取,也可以使用Tongji API的第一个接口列表获取用户的站点列表。
body={
"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" #所需要的指标
}
}
2.3 解析返回来的json
获取之后的json主要是在items中,其顺序为[[省份],[pv_count,visitor_count,avg_visit_time]],但是在java中使用bean来封装的时候设计原则一般是“地名、pv_count、visitor_count、avg_visit_time”,所以需要经过一定的处理。
{
"body": {
"data": [
{
"result": {
"offset": 0,
"total": 3,
"items": [
[
[
{
"area": "province,4",
"name": "广东"
}
],
[
{
"area": "province,28",
"name": "四川"
}
],
[
{
"area": "province,19",
"name": "江苏"
}
]
],
[
[
649,
7,
2684
],
[
2,
2,
76
],
[
1,
1,
3
]
],
...
...
}
对json进行处理
the_page = response.read()
result=json.loads(the_page.decode("utf-8"))
print(json.dumps(result))
base=result["body"]["data"][0]["result"]["items"]
source=[]
for item in base[0]:
source.append(item[0]['name'])
count=0
detail=[]
for item in base[1]:
tojson={}
tojson['name']=source[count]
tojson['pv_count']=item[0]
tojson['pv_ratio']=item[1]
tojson['visitor_count']=item[2]
count=count+1
detail.append(tojson)
2.4 完整代码
import urllib.request
import urllib.parse
import json
import time
import datetime
start_date = time.strftime("%Y%m%d", time.localtime())
today = datetime.date.today()
yesterday = today - datetime.timedelta(days=1)
fifteenago = today - datetime.timedelta(days=7)
end, start = str(yesterday).replace("-", ""), str(fifteenago).replace("-", "")
base_url = "https://api.baidu.com/json/tongji/v1/ReportService/getData"
body = {"header": {"account_type": 1, "password": "", "token": "",
"username": ""},
"body": {"siteId": , "method": "visit/district/a", "start_date": start, "end_date": end,
"metrics": "pv_count,visitor_count,avg_visit_time"}}
data = bytes(json.dumps(body), 'utf8')
req = urllib.request.Request(base_url, data)
response = urllib.request.urlopen(req)
the_page = response.read()
result=json.loads(the_page.decode("utf-8"))
base=result["body"]["data"][0]["result"]["items"]
source=[]
for item in base[0]:
source.append(item[0]['name'])
count=0
detail=[]
for item in base[1]:
tojson={}
tojson['name']=source[count]
tojson['pv_count']=item[0]
tojson['pv_ratio']=item[1]
tojson['visitor_count']=item[2]
count=count+1
detail.append(tojson)
2.5 结果
[{'pv_count': 649, 'pv_ratio': 7, 'visitor_count': 2684, 'name': '广东'}, {'pv_count': 2, 'pv_ratio': 2, 'visitor_count': 76, 'name': '四川'}, {'pv_count': 1, 'pv_ratio': 1, 'visitor_count': 3, 'name': '江苏'}]
经过上述的处理之后,将json存入Redis中,使用的时候用JavaBean来封装,就能够很好的把数据传入highcharts、echarts等图表。
3.echarts展示地域图
展示地域图的时候需要获取下载两个文件,china.js(其提供了js和json,这里使用的js),echarts.js
部分代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page isELIgnored="false" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>日志系统</title>
<script src="js/jquery-3.2.1.min.js"></script>
<link rel="stylesheet" id="style-css" href="js/jingmi/jingmistyle.css" type="text/css" media="all">
<script type="text/javascript" src="js/echarts.js"></script>
<script type="text/javascript" src="js/china.js"></script>
</head>
<body>
<div id="diyu" style="width: 100%;height: 421px"></div>
<script type="text/javascript">
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('diyu'));
option = {
tooltip: {
trigger: 'item'
},
legend: {
orient: 'vertical',
left: 'left'
},
visualMap: {
min: 0,
max:${diyumax},
left: 'left',
top: 'bottom',
text: ['高', '低'], // 文本,默认为数值文本
calculable: true
},
toolbox: {
show: true,
orient: 'vertical',
left: 'right',
top: 'center',
feature: {
dataView: {readOnly: false},
restore: {},
saveAsImage: {}
}
},
series: [
{
name: '访问量',
type: 'map',
mapType: 'china',
roam: false,
label: {
normal: {
show: true
},
emphasis: {
show: true
}
},
data: [
<c:forEach var="diyu" items="${diyu}">
{name: '${diyu.name}', value: ${to.pv_count}},
</c:forEach>
]
}
]
};
myChart.setOption(option);
</script>
</body>
</html>
<jsp:include page="foot.jsp"/>
结果如下:

更多图表欢迎访问我的个人博客
百度统计API的使用的更多相关文章
- Python获得百度统计API的数据并发送邮件
Python获得百度统计API的数据并发送邮件 小工具 本来这么晚是不准备写博客的,当是想到了那个狗子绝对会在开学的时候跟我逼逼这个事情,所以,还是老老实实地写一下吧. Baidu统计API的使 ...
- 百度统计api获取数据
需求场景 想要了解每天多少人访问了网站,多少个新增用户,地域分布,点击了哪些页面,停留了多久,等等... 国内用的最多的就是百度统计吧,傻瓜式的注册然后插一段代码到项目里就行了. 最近也在自己的博客里 ...
- 百度统计api 关于搜索引擎返回参数问题
当 post 的参数: 返回参数为: 很显然没有搜索引擎的相关名称返回,无法分辨相关引擎的数据量: 改:去掉 gran 参数 正常: 关于百度统计文档有很多模糊不清的地方,可以发邮件给官方了解,一般处 ...
- nodejs调用百度统计api摆脱人肉数据统计
var http = require("https"); var url = require('url'); var postData = JSON.stringify( { &q ...
- [转]解决百度统计 gzdecode(): insufficient memory
百度统计API gzdecode($preLogin->retData, strlen($preLogin->retData)) 这段代码会造成一个PHP警告内存不足,解决办法只要换个解压 ...
- 【百度地图API】多家地图API文件大小对比
原文:[百度地图API]多家地图API文件大小对比 于2011.6.9日更新百度地图API文件大小.同时更新图片. 任务描述: 明天就是元宵佳节啦~这是一个团团圆圆的节日,于是,再次想把各家API聚在 ...
- 单页面vue引入百度统计的使用方法!
最近组长安排着做一个项目,h5的应用下载项目,想着做起来还是比较容易,可是看到提出的需求,我就有点懵逼了!需要对应用的下载进行统计!!!我当时就想着我前端怎么对页面点击按钮就行数据统计啊!我以前的项目 ...
- Android 集成百度统计
在这里简单的介绍下怎么统计自己研发的APP 的用户活跃度,和使用量,以此来展示自己APP的用户使用量! 我们的APP都需要注入数据分析,以供我们实时的了解APP的下载和使用量提供了依据! 不过我还是更 ...
- 关于百度Tongji Api的文档补充
百度统计的Tongji Api好像没有人维护了,文档缺胳膊少腿也没人理. 今天在这里指出其中一点,因为这一点花时间也没有傻思考的乐趣的. 引用自百度Tongji API文档 这个文档缺了很多东西,其中 ...
随机推荐
- Visual Studio 2013 IIS Express使用域名调试mvc程序
1.编辑applicationhost.config文件 启动vs2013,在右下角IIS Express图标中右击,显示如图,点击框中菜单. 找到你的启动项,点击1,然后点击2,这是应该会有编辑器打 ...
- 学习笔记:javascript内置对象:数组对象
1.数组对象的创建 1.设置一个长度为0的数组 var myarr=new array(); 2.设置一个长度为n的数组 var myarr=new arr(n); 3.声明一个赋值的指定长度 ...
- jquery之属性操作
jQuery之属性操作 相信属性这个词对大家都不陌生.今天我就给大家简单地介绍一下JQuery一些属性的操作 属性一共分三大类 一.基本属性 1.attr 2.removeAttr 3.prop 4. ...
- JEESZ-kafka集群安装
1. 在根目录创建kafka文件夹(service1.service2.service3都创建) [root@localhost /]# mkdir kafka 2.通过Xshell上传文件到s ...
- 关于XML(可扩展标记语言)的基础知识与写法------2017-05-18
XML(Extensible Markup Language) HTML:超文本标记语言,主要用来展示 XML:可扩展标记语言,用来做数据传输XML特点: 1.树状结构,有且只有一个根 2.标签名 ...
- Bootstrap实现轮播图
第一步:设计轮播图容器:div.carousel,添加slide平滑切换,并定义id,方便后面采用data属性来触发 <div class='carousel slide' id="t ...
- 基本DOS命令之 netstat 命令详解
netstat 命令(查看端口) netstat 命令用于显示与 IP .TCP .UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络连接情况,可以使用 netstat 命令查看 ...
- Quartz.net 定时任务之简单任务
一.概述 1.quartz.net 是一款从java quartz 上延伸出来的定时任务框架. 2.我在网上看到很多大神写过关于quartz.net 的博客.文章等,在这些博客文章里也学会了很多关于q ...
- 基于HTML5 Canvas实现用户交互
很多人都有这样的疑问,基于HTML5 Canvas实现的元素怎么和用户进行交互?在这里我们用到HT for Web(http://www.hightopo.com/guide/guide/core/b ...
- Ehcache 整合Spring 使用页面、对象缓存(1)
转自:http://www.cnblogs.com/hoojo/archive/2012/07/12/2587556.html Ehcache在很多项目中都出现过,用法也比较简单.一般的加些配置就可以 ...