百度统计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的使用的更多相关文章

  1. Python获得百度统计API的数据并发送邮件

    Python获得百度统计API的数据并发送邮件 小工具  本来这么晚是不准备写博客的,当是想到了那个狗子绝对会在开学的时候跟我逼逼这个事情,所以,还是老老实实地写一下吧.   Baidu统计API的使 ...

  2. 百度统计api获取数据

    需求场景 想要了解每天多少人访问了网站,多少个新增用户,地域分布,点击了哪些页面,停留了多久,等等... 国内用的最多的就是百度统计吧,傻瓜式的注册然后插一段代码到项目里就行了. 最近也在自己的博客里 ...

  3. 百度统计api 关于搜索引擎返回参数问题

    当 post 的参数: 返回参数为: 很显然没有搜索引擎的相关名称返回,无法分辨相关引擎的数据量: 改:去掉 gran 参数 正常: 关于百度统计文档有很多模糊不清的地方,可以发邮件给官方了解,一般处 ...

  4. nodejs调用百度统计api摆脱人肉数据统计

    var http = require("https"); var url = require('url'); var postData = JSON.stringify( { &q ...

  5. [转]解决百度统计 gzdecode(): insufficient memory

    百度统计API gzdecode($preLogin->retData, strlen($preLogin->retData)) 这段代码会造成一个PHP警告内存不足,解决办法只要换个解压 ...

  6. 【百度地图API】多家地图API文件大小对比

    原文:[百度地图API]多家地图API文件大小对比 于2011.6.9日更新百度地图API文件大小.同时更新图片. 任务描述: 明天就是元宵佳节啦~这是一个团团圆圆的节日,于是,再次想把各家API聚在 ...

  7. 单页面vue引入百度统计的使用方法!

    最近组长安排着做一个项目,h5的应用下载项目,想着做起来还是比较容易,可是看到提出的需求,我就有点懵逼了!需要对应用的下载进行统计!!!我当时就想着我前端怎么对页面点击按钮就行数据统计啊!我以前的项目 ...

  8. Android 集成百度统计

    在这里简单的介绍下怎么统计自己研发的APP 的用户活跃度,和使用量,以此来展示自己APP的用户使用量! 我们的APP都需要注入数据分析,以供我们实时的了解APP的下载和使用量提供了依据! 不过我还是更 ...

  9. 关于百度Tongji Api的文档补充

    百度统计的Tongji Api好像没有人维护了,文档缺胳膊少腿也没人理. 今天在这里指出其中一点,因为这一点花时间也没有傻思考的乐趣的. 引用自百度Tongji API文档 这个文档缺了很多东西,其中 ...

随机推荐

  1. PHP. 03 .ajax传输XML、 ajax传输json、封装

    XML简介 XML 指可扩展标记语言 EXtensible Markup Language .射击的时候是用来船体数据的,虽然格式跟HTML类似 xml示例 <?xml version=&quo ...

  2. Java Final and Immutable

    1. Final keyword Once a variable X is defined final, you can't change the reference of X to another ...

  3. Windows Server 2016中,安装PHP Manager,ARR3.0或者URL Rewrite 2.0无法成功的解决办法

    如图: 无法安装原因都是这几个工具无法识别10.0这个版本,可以修改注册表来先完成安装,然后再改回去 PHPManager的修改方法如下: 打开注册表工具(运行Regedt32),找到:HKEY_LO ...

  4. 取代netcat

    前言 众所周知,netcat是网络界的瑞士军刀,它的主要作用是:提供连接其他终端的方法,可以上传文件,反弹shell等等各种利于别人控制你电脑的操作.所以聪明的系统管理员会将它从系统中移除,这样当别人 ...

  5. gulp环境搭建,gulp入门教程

    gulp常用地址: gulp官方网址:http://gulpjs.com gulp插件地址:http://gulpjs.com/plugins gulp 官方API:https://github.co ...

  6. java日期工具类(Long型,Date型,yyyyMMdd型)等

    import java.sql.Timestamp; import java.text.ParsePosition; import java.text.SimpleDateFormat; import ...

  7. linux下载安装phpmyadmin

    phpmyadmin下载: https://www.phpmyadmin.net/downloads/ 1.解压缩 tar -zxvf phpMyAdmin-4.7.1-all-languages.t ...

  8. “海市蜃楼”般的逛街体验——VR全景智慧城市常诚

    <史记·天官书>:"海旁蜃气像楼台:广野气成宫阙然." 海市蜃楼,简称蜃景,是一种因为光的折射和全反射而形成的自然现象,是地球上物体反射的光经大气折射而形成的虚像. 2 ...

  9. python加载sqlite3报错:No module named _sqlite3

    环境为Ubuntu16.04 Apache2.4 Python2.7.13 django 1.8 今天部署apache+django,经过各种折腾,好不容易配置完了,发现错误Apache的日志里有一项 ...

  10. 详解python之反射机制

    一.前言 def f1(): print('f1') def f2(): print('f2') def f3(): print('f3') def f4(): print('f4') a = 1 t ...