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入门篇之面向对象
Oct 20 Python
python实现将html表格转换成CSV文件的方法
Jun 28 Python
Python使用内置json模块解析json格式数据的方法
Jul 20 Python
Python实现抢购IPhone手机
Feb 07 Python
python面向对象入门教程之从代码复用开始(一)
Dec 11 Python
使用Python计算玩彩票赢钱概率
Jun 26 Python
python函数的作用域及关键字详解
Aug 20 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
Jan 03 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
Jan 16 Python
Python气泡提示与标签的实现
Apr 01 Python
JAVA SWT事件四种写法实例解析
Jun 05 Python
Python使用psutil库对系统数据进行采集监控的方法
Aug 23 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
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
window.open不被拦截的实现代码
2012/08/22 Javascript
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
2014/12/18 Javascript
JQuery查找DOM节点的方法
2015/06/11 Javascript
学习JavaScript设计模式之代理模式
2016/01/12 Javascript
在ASP.NET MVC项目中使用RequireJS库的用法示例
2016/02/15 Javascript
jquery实现拖动效果
2016/08/10 Javascript
微信小程序中实现一对多发消息详解及实例代码
2017/02/14 Javascript
解决浏览器会自动填充密码的问题
2017/04/28 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
vue页面切换过渡transition效果
2018/10/08 Javascript
python文件的md5加密方法
2016/04/06 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
python导入pandas具体步骤方法
2019/06/23 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
10个示例带你掌握python中的元组
2020/11/23 Python
纯CSS3实现8组超炫酷鼠标滑过图片动画
2016/03/16 HTML / CSS
HTML5之SVG 2D入门6—视窗坐标系与用户坐标系及变换概述
2013/01/30 HTML / CSS
HTML5 canvas实现移动端上传头像拖拽裁剪效果
2016/03/14 HTML / CSS
Skyscanner波兰:廉价航班
2017/11/07 全球购物
英国花园药房: The Garden Pharmacy
2017/12/28 全球购物
英国独特的时尚和生活方式品牌:JOY
2018/03/17 全球购物
乌克兰品牌化妆品和香水在线商店:Bomond
2020/01/14 全球购物
土木工程毕业生自荐信
2013/09/21 职场文书
创新型城市实施方案
2014/03/06 职场文书
一年级学生评语
2014/04/23 职场文书
环保宣传标语
2014/06/12 职场文书
岗位职责说明书模板
2014/07/30 职场文书
学前班幼儿评语大全
2014/12/29 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
2016年大学校运会广播稿件
2015/12/21 职场文书