美文网首页
利用Python做百度统计api接口统计流量数据

利用Python做百度统计api接口统计流量数据

作者: cef802fb1136 | 来源:发表于2020-01-14 15:20 被阅读0次

前言

​ 因为网站刚建立起来,需要统计一下流量的情况,发现每次都要登录统计后台查看流量非常的繁琐,且发现百度统计其实是有API的,于是研究了一下用Python接入统计API,达到快速看流量的目的。
百度统计API地址:https://tongji.baidu.com/api/manual/

不多说,直接上代码

先创建一个名字叫:baidu_tongji.py的文件

import requests
import json


class BaiduTongJi(object):

    def __init__(self, site_id, start_date, end_date, metrics, method, gran):
        """
        初始化方法
        :param site_id: 站点id
        :param start_date: 起始时间
        :param end_date: 截止时间
        :param metrics: 需要查看的字段,如:PV、UV、访问时长等
        :param method: 需要查看的报告如:全部来源、趋势分析等
        :param gran:时间粒度
        """
        self.api_url = 'https://api.baidu.com/json/tongji/v1/ReportService/getData'
        self.api_par = {
            "header": {
                "username": "用户名",
                'password': '密码',
                "token": '你的token值',
                "account_type": 1
            },
            "body": {
                "site_id": site_id,
                "start_date": start_date,
                "end_date": end_date,
                "metrics": metrics,
                "method": method,
                "gran": gran
            }
        }
        return

    def send_request(self):
        data = json.dumps(self.api_par)
        request = requests.post(self.api_url, data)
        response = json.loads(request.text)
        self.response = response

        return self.response

    def source_all(self):
        """
        全部来源
        :return:
        """
        response = self.send_request()
        result = response['body']['data'][0]['result']['pageSum'][0]
        ret_pv = result[0]
        ret_uv = result[1]

        print(f"网站的PV是:{ret_pv}\n网站的UV是:{ret_uv}")

        return

    def trend(self):
        """
        趋势分析
        :return:
        """
        response = self.send_request()
        result = response['body']['data'][0]['result']['items']

        ret_data = result[0]
        ret_pv = result[1]


        return ret_data, ret_pv

bdtj = BaiduTongJi(site_id='你的站点id', start_date=20190901, end_date=20190926,metrics='pv_count,visitor_count',method='source/all/a', gran=None)
bdtj.source_all()

简单的写了一个获取数据的api,可以获取全部来源和趋势分析这两个报告的数据,获取的字段可以自己加,具体可以看百度统计API文档

改成自己的站点参数可以直接使用了,感觉写出来会逻辑上比较绕,如果有更好的方法的大佬,可以在评论区回复哈

同时也简单的用matplotlib做了个可视化,上代码
注意,这里有个坑,获取过来的数据,时间其实是反转过来的,即降序排序的,如果需要做可视化的话需要先反转一下顺序,不然出的图会有问题

# 这个导包就是导刚刚上面那个获取数据的py文件,名字可以自己取
from .baidu_tongji import BaiduTongJi
import matplotlib.pyplot as plt

trends = BaiduTongJi(site_id='你的站点id', start_date=20190901, end_date=20190926, metrics='pv_count',method='trend/time/a', gran='day')

date, pv = trends.trend()

# 处理数据,反转数据
dates = [i[0] for i in date][::1]
pvs = [i[0] for i in pv]
pvs1 = [0 if i == '--' else i for i in pvs][::1]
print(pvs1)

# 设定x,y值
x = dates
y = pvs1

plt.figure(figsize=(20, 8), dpi=100)

plt.grid(True, linestyle='--', alpha=0.5)

y_ticks = range(max(y), -2, -1)
plt.plot(x, y, label='PV')
plt.xticks(x[::5], x[::5])
plt.yticks(y_ticks[::20])

plt.xlabel('时间')
plt.ylabel('PV')
plt.legend(loc=4)

plt.show()

先写到这,后期研究使用pandas操作存入csv,再做自动化刷新。

相关文章

网友评论

      本文标题:利用Python做百度统计api接口统计流量数据

      本文链接:https://www.haomeiwen.com/subject/whkaactx.html