Python如何获得百度统计API的数据并发送邮件示例代码


Posted in Python onJanuary 27, 2019

小工具

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

Baidu统计API的使用

系统环境:

Python2

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

getSiteList的使用

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

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

# encoding=utf-8
import requests
import json

siteListUrl = "https://api.baidu.com/json/tongji/v1/ReportService/getSiteList"

# 这个是请求的数据
data = {
 "header": {
  'username': "你的用户名",
  'password': "你的密码",
  'token': '前面所获得的token',
  'Content-type': 'application/json'
 }
}
# 把请求数据变成json数据
data = json.dumps(data)

r = requests.post(url,data=data)

# 在返回的信息中包含了网站的id等等,这些官方有说明
print r.text

getData的使用

# 假设我的网站的ID是:12914021,

getDataUrl = "https://api.baidu.com/json/tongji/v1/ReportService/getData"

# 请求数据如下
data = {
 "header": {
  'username': "你的用户名",
  'password': "你的密码",
  'token': '前面所获得的token',
  'Content-type': 'application/json'
 },

 # 这个body的请求参数可以去参考官方说明,在这里我只是想获取pv和uv的数据
 "body": {
  'site_id': 12914021,
  'method': 'trend/time/a',
  # 开始统计时间
  'start_date': '20190125',
  # 结束统计时间
  'end_date': '20190126',
  # 获得pv和uv数据
  'metrics': 'pv_count,visitor_count'
 }
}

r = requests.post(getDataUrl,data=json.dumps(data))
result = json.loads(r.text)
pv_uv = result["body"]["data"][0]["result"]["pageSum"][0]
# 页面浏览量
pv = pv_uv[0]
# 独立访客数
uv = pv_uv[1]

print pv_uv # 例如[120,100]

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

使用Python发送邮件

Python2

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

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

from email.mime.text import MIMEText
from email.header import Header
from smtplib import SMTP_SSL

# qq邮箱smtp服务器
hostServer = 'smtp.qq.com'
# 发送者的邮箱
sendMail = '你的QQ邮箱'
receiveMail = '接收方的邮件地址'

# ssl登录
smtp = SMTP_SSL(hostServer)

# 发送者的QQ,以及授权码
smtp.login('你的qq', '授权码')

# plain代表发送为文本
msg = MIMEText("你要发送的内容", "plain", 'utf-8')
# 发送的标题
msg["Subject"] = Header("帅哥的邮件", 'utf-8')

# 发送方
msg["From"] = sendMail
# 接收方
msg["To"] = receiveMail
# 发送邮件
smtp.sendmail(sendMail, receiveMail, msg.as_string())
# 退出
smtp.quit()

结合使用

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

# encoding=utf-8
import time
import requests
import json
from email.mime.text import MIMEText
from email.header import Header
from smtplib import SMTP_SSL

# 获得时间 格式为:【20190125】
nowTime = time.strftime("%Y%m%d", time.localtime())
# 发送方的QQ
sendQQ = "xxx"
# 接收方的邮件地址
receiveMail = "xxx"
# 百度统计token
token = "xxx"
# 需要查询的网站id
siteId = xxx
# qq邮箱授权码
mailCode = "xxx"


def get_pv_uv():

 dataUrl = "https://api.baidu.com/json/tongji/v1/ReportService/getData"

 body = {
  "header": {
   'username': "xxx",
   'password': "xxx",
   'token': token,
   'Content-type': 'application/json'
  },
  "body": {
   'site_id': siteId,
   'method': 'trend/time/a',
   'start_date': nowTime,
   'end_date': nowTime,
   'metrics': 'pv_count,visitor_count'
  }

 }

 r = requests.post(dataUrl, data=json.dumps(body))
 result = json.loads(r.text)
 pv_uv = result["body"]["data"][0]["result"]["pageSum"][0]
 return pv_uv


def sendMail(pv_uv):


 # 邮件的正文内容
 mailContent = "小主,晚上好,这是昨天的统计数据,昨天的博客园一共有%s个人访问了小主你的博客,其中独立访客有%s位。\n小主你要加油写博客哦,有朝一日,你总会成为大佬的!(*^__^*) 嘻嘻……" % (pv_uv[0],pv_uv[1])
 
 # qq邮箱smtp服务器
 hostServer = 'smtp.qq.com'
 sendEmail = sendQQ+'@qq.com'

 # ssl登录
 smtp = SMTP_SSL(hostServer)

 smtp.login(sendQQ, mailCode)
 msg = MIMEText(mailContent, "plain", 'utf-8')
 msg["Subject"] = Header("博客园统计邮件", 'utf-8')
 msg["From"] = sendEmail
 msg["To"] = receiveMail
 smtp.sendmail(sendEmail, receiveMail, msg.as_string())
 smtp.quit()

sendMail(get_pv_uv())

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

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python中的urllib模块使用详解
Jul 07 Python
Windows下为Python安装Matplotlib模块
Nov 06 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
Apr 19 Python
解决python3中cv2读取中文路径的问题
Dec 05 Python
python实现对象列表根据某个属性排序的方法详解
Jun 11 Python
python数据预处理方式 :数据降维
Feb 24 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
Feb 25 Python
Python 实现自动完成A4标签排版打印功能
Apr 09 Python
利用Python发送邮件或发带附件的邮件
Nov 12 Python
详解anaconda安装步骤
Nov 23 Python
sklearn中的交叉验证的实现(Cross-Validation)
Feb 22 Python
Python通过m3u8文件下载合并ts视频的操作
Apr 16 Python
python使用正则筛选信用卡
Jan 27 #Python
pthon贪吃蛇游戏详细代码
Jan 27 #Python
只需7行Python代码玩转微信自动聊天
Jan 27 #Python
python实现贪吃蛇游戏
Mar 21 #Python
Python制作动态字符图的实例
Jan 27 #Python
python贪吃蛇游戏代码
Apr 18 #Python
DRF跨域后端解决之django-cors-headers的使用
Jan 27 #Python
You might like
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
ThinkPHP空模块和空操作详解
2014/06/30 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
PHP 7.1新特性的汇总介绍
2016/12/16 PHP
php实现水印文字和缩略图的方法示例
2016/12/29 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
表单(FORM)的一些实用效果代码
2007/03/25 Javascript
javascript下string.format函数补充
2010/08/24 Javascript
实例讲解避免javascript冲突的方法
2016/01/03 Javascript
微信jssdk在iframe页面失效问题的解决措施
2016/03/03 Javascript
jQuery实现CheckBox全选、全不选功能
2017/01/11 Javascript
jquery编写日期选择器
2017/03/16 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
代码详解Vuejs响应式原理
2017/12/20 Javascript
微信小程序使用wxParse解析html的方法教程
2018/07/06 Javascript
tsconfig.json配置详解
2019/05/17 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
Vue实现背景更换颜色操作
2020/07/17 Javascript
Vue select 绑定动态变量的实例讲解
2020/10/22 Javascript
JavaScript中展开运算符及应用的实例代码
2021/01/14 Javascript
python使用jieba实现中文分词去停用词方法示例
2018/03/11 Python
Python PyQt4实现QQ抽屉效果
2018/04/20 Python
Flask框架各种常见装饰器示例
2018/07/17 Python
解决vscode python print 输出窗口中文乱码的问题
2018/12/03 Python
Python 运行.py文件和交互式运行代码的区别详解
2019/07/02 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
详解Python遍历列表时删除元素的正确做法
2021/01/07 Python
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
如何实现jdbc性能优化
2012/07/30 面试题
百度软件工程师职位
2013/02/14 面试题
会议主持词
2014/03/17 职场文书
清洁员岗位职责
2015/02/15 职场文书
公司聚餐通知
2015/04/22 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python