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

小工具 

本来这么晚是不准备写博客的,当是想到了那个狗子绝对会在开学的时候跟我逼逼这个事情,所以,还是老老实实地写一下吧。

 

Baidu统计API的使用

系统环境:

  • Python2

    • requests库:发出请求
    • json库:json处理

getSiteList的使用

官方文档在此,说实话,这是我使用百BaiduAPI最坑的一次,在这个官方文档的getSiteList中,完全不告诉你请求参数是什么。

首先,需要获得百度统计API的token,在这里写了token获得的流程。

  1. # encoding=utf-8
  2. import requests
  3. import json
  4. siteListUrl = "https://api.baidu.com/json/tongji/v1/ReportService/getSiteList"
  5. # 这个是请求的数据
  6. data = {
  7. "header": {
  8. 'username': "你的用户名",
  9. 'password': "你的密码",
  10. 'token': '前面所获得的token',
  11. 'Content-type': 'application/json'
  12. }
  13. }
  14. # 把请求数据变成json数据
  15. data = json.dumps(data)
  16. r = requests.post(url,data=data)
  17. # 在返回的信息中包含了网站的id等等,这些官方有说明
  18. print r.text

getData的使用

  1. # 假设我的网站的ID是:12914021,
  2. getDataUrl = "https://api.baidu.com/json/tongji/v1/ReportService/getData"
  3. # 请求数据如下
  4. data = {
  5. "header": {
  6. 'username': "你的用户名",
  7. 'password': "你的密码",
  8. 'token': '前面所获得的token',
  9. 'Content-type': 'application/json'
  10. },
  11. # 这个body的请求参数可以去参考官方说明,在这里我只是想获取pv和uv的数据
  12. "body": {
  13. 'site_id': 12914021,
  14. 'method': 'trend/time/a',
  15. # 开始统计时间
  16. 'start_date': '20190125',
  17. # 结束统计时间
  18. 'end_date': '20190126',
  19. # 获得pv和uv数据
  20. 'metrics': 'pv_count,visitor_count'
  21. }
  22. }
  23. r = requests.post(getDataUrl,data=json.dumps(data))
  24. result = json.loads(r.text)
  25. pv_uv = result["body"]["data"][0]["result"]["pageSum"][0]
  26. # 页面浏览量
  27. pv = pv_uv[0]
  28. # 独立访客数
  29. uv = pv_uv[1]
  30. print pv_uv # 例如[120,100]

此时,我们就已经获得了pv和nv的数据。

使用Python发送邮件

  • Python2

    • requests库:发出请求
    • json库:json处理

在这里,我使用的是SMTP协议去发送邮件,使用的是QQ邮箱,QQ邮箱的开启,参考百度经验


  1. from email.mime.text import MIMEText
  2. from email.header import Header
  3. from smtplib import SMTP_SSL
  4. # qq邮箱smtp服务器
  5. hostServer = 'smtp.qq.com'
  6. # 发送者的邮箱
  7. sendMail = '你的QQ邮箱'
  8. receiveMail = '接收方的邮件地址'
  9. # ssl登录
  10. smtp = SMTP_SSL(hostServer)
  11. # 发送者的QQ,以及授权码
  12. smtp.login('你的qq', '授权码')
  13. # plain代表发送为文本
  14. msg = MIMEText("你要发送的内容", "plain", 'utf-8')
  15. # 发送的标题
  16. msg["Subject"] = Header("帅哥的邮件", 'utf-8')
  17. # 发送方
  18. msg["From"] = sendMail
  19. # 接收方
  20. msg["To"] = receiveMail
  21. # 发送邮件
  22. smtp.sendmail(sendMail, receiveMail, msg.as_string())
  23. # 退出
  24. smtp.quit()

结合使用

代码写的耦合度比较高,如果使用的话,需要根据自己的实际情况去修改

  1. # encoding=utf-8
  2. import time
  3. import requests
  4. import json
  5. from email.mime.text import MIMEText
  6. from email.header import Header
  7. from smtplib import SMTP_SSL
  8. # 获得时间 格式为:【20190125】
  9. nowTime = time.strftime("%Y%m%d", time.localtime())
  10. # 发送方的QQ
  11. sendQQ = "xxx"
  12. # 接收方的邮件地址
  13. receiveMail = "xxx"
  14. # 百度统计token
  15. token = "xxx"
  16. # 需要查询的网站id
  17. siteId = xxx
  18. # qq邮箱授权码
  19. mailCode = "xxx"
  20. def get_pv_uv():
  21. dataUrl = "https://api.baidu.com/json/tongji/v1/ReportService/getData"
  22. body = {
  23. "header": {
  24. 'username': "xxx",
  25. 'password': "xxx",
  26. 'token': token,
  27. 'Content-type': 'application/json'
  28. },
  29. "body": {
  30. 'site_id': siteId,
  31. 'method': 'trend/time/a',
  32. 'start_date': nowTime,
  33. 'end_date': nowTime,
  34. 'metrics': 'pv_count,visitor_count'
  35. }
  36. }
  37. r = requests.post(dataUrl, data=json.dumps(body))
  38. result = json.loads(r.text)
  39. pv_uv = result["body"]["data"][0]["result"]["pageSum"][0]
  40. return pv_uv
  41. def sendMail(pv_uv):
  42. # 邮件的正文内容
  43. mailContent = "小主,晚上好,这是昨天的统计数据,昨天的博客园一共有%s个人访问了小主你的博客,其中独立访客有%s位。\n小主你要加油写博客哦,有朝一日,你总会成为大佬的!(*^__^*) 嘻嘻……" % (pv_uv[0],pv_uv[1])
  44. # qq邮箱smtp服务器
  45. hostServer = 'smtp.qq.com'
  46. sendEmail = sendQQ+'@qq.com'
  47. # ssl登录
  48. smtp = SMTP_SSL(hostServer)
  49. smtp.login(sendQQ, mailCode)
  50. msg = MIMEText(mailContent, "plain", 'utf-8')
  51. msg["Subject"] = Header("博客园统计邮件", 'utf-8')
  52. msg["From"] = sendEmail
  53. msg["To"] = receiveMail
  54. smtp.sendmail(sendEmail, receiveMail, msg.as_string())
  55. smtp.quit()
  56. sendMail(get_pv_uv())

这时候,我们就可以将我们的python程序部署在Linux云服务器上面,那么我们怎么能够让这个程序在每天的23.30分运行呢?这时候我们就可以使用Linux上面的crontab了。

进入linux,输入crontab -e,然后在里面30 23 * * * python ~/Home/tongji.py【你的Python文件地址】 >> tongji.txt就可以设置为,在晚上的11.30分发送该邮件。

晚上还是不适合写博客,不然写着写着就饿了,/(ㄒoㄒ)/~~

 

Python获得百度统计API的数据并发送邮件的更多相关文章

  1. 百度统计api获取数据

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

  2. 百度统计API的使用

    百度统计API的使用 在搭建自己博客的时候,希望自己能有个日志系统,能够看到PV.UV等信息,同时自己也搭建了个ELK系统,可惜服务器配置太低(1GHZ+1G内存),根本运行不起来.只能使用第三方的日 ...

  3. Python 调用百度翻译API

    由于实习公司这边做的是日文app,有时要看看用户反馈,对于我这种五十音图都没记住的人,表示百度翻译确实还可以.但不想每次都复制粘贴啊,google被墙也是挺蛋疼的事,所以用python结合baidu ...

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

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

  5. 百度地图API获取数据

    目前,大厂的服务范围越来越广,提供的数据信息也是比较全的,在生活服务,办公领域,人工智能等方面都全面覆盖,相对来说,他们的用户基数大,通过用户获取的信息也是巨大的.除了百度提供api,国内提供免费AP ...

  6. Python调用百度地图API实现批量经纬度转换为实际省市地点(api调用,json解析,excel读取与写入)

    1.获取秘钥 调用百度地图API实现得申请百度账号或者登陆百度账号,然后申请自己的ak秘钥.链接如下:http://lbsyun.baidu.com/apiconsole/key?applicatio ...

  7. Python使用百度地图API根据地名获取相应经纬度

    今天有个需求,要根据地名获取经纬度坐标值. 于是我第一想法:打开百度地图,手动输入地名,获取.显然当地名较少时,可实施.然而,当地名较多时,此方法显然工作量很大. 于是,第二想法:代码获取,请求百度地 ...

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

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

  9. 小白学Python——用 百度翻译API 实现 翻译功能

    本人英语不好,很多词组不认识,只能借助工具:百度翻译和谷歌翻译都不错,近期自学Python,就想能否自己设计一个百度翻译软件呢? 百度翻译开放平台: http://api.fanyi.baidu.co ...

随机推荐

  1. java日志系统中的 NDC

    NDC https://www.cnblogs.com/smile361/p/3853404.html

  2. python csv读写

    https://blog.csdn.net/taotiezhengfeng/article/details/75577998

  3. STM32CubeMX HAL库串口+DMA数据发送不定长度数据接收

    参考资料:1.ST HAL库官网资料 2.https://blog.csdn.net/u014470361/article/details/79206352#comments 一.STM32CubeM ...

  4. Debian 8.x / Ubuntu 16.04.x 搭建 Ghost 教程

    Ghost 是一款使用 Node.js 开发的博客系统,相对于使用 PHP 开发的 WordPress 更轻巧友好,所以本站已经从 WordPress 切换至 Ghost,本文介绍在 Debian 8 ...

  5. Shader 屏幕后期特效 Shake(震屏)&Wave(波纹)

    震屏效果 Shader: //////////////////////////////////////////// ///// CameraPlay - by VETASOFT 2017 ///// ...

  6. NAT技术与代理服务器

    1.什么是NAT技术? NAT(network address Translation):网络地址转换 使用端口号的NAT:网络地址与端口号转换 2.理解下图就可以完全知道NAT技术的原理: 3.什么 ...

  7. 无法从项目中获取SSIS包的列表

    一直做的SSIS项目,突然在生成项目的时候没有反应,crtl + alt +o 提示:无法从项目中获取SSIS包的列表,发现是最近的包没有设计数据源, 解决思路:检查最近的包,挨个运行一遍,看看有没有 ...

  8. text-decoration:[ text-decoration-line ] || [ text-decoration-style ] || [ text-decoration-color ] 默认值:

    css3中字体装饰,多样化的界面效果,: [ text-decoration-line ]:指定文本装饰的种类.相当于CSS2.1的 text-decoration 属性, 可取值:none | un ...

  9. UnityTips:使用反射调用内部方法拓展编辑器

    大家都知道Unity是一个C/C++的游戏引擎,C#只是Unity提供的脚本层.因此大部分功能都是通过C#来调用底层的C++代码的.而一些朋友可能不知道的是,其实Unity的C#代码中也有很多方法是我 ...

  10. 背水一战 Windows 10 (96) - 选取器: ContactPicker

    [源码下载] 背水一战 Windows 10 (96) - 选取器: ContactPicker 作者:webabcd 介绍背水一战 Windows 10 之 选取器 ContactPicker(联系 ...