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发送Email方法实例
Aug 21 Python
python计算书页码的统计数字问题实例
Sep 26 Python
python实现带错误处理功能的远程文件读取方法
Apr 29 Python
Python中字典的基础知识归纳小结
Aug 19 Python
分析Python读取文件时的路径问题
Feb 11 Python
numpy返回array中元素的index方法
Jun 27 Python
python中多个装饰器的执行顺序详解
Oct 08 Python
利用Pycharm断点调试Python程序的方法
Nov 29 Python
Python使用Selenium爬取淘宝异步加载的数据方法
Dec 17 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
Mar 08 Python
使用py-spy解决scrapy卡死的问题方法
Sep 29 Python
Python+Matplotlib+LaTeX玩转数学公式
Feb 24 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 传值赋值与引用赋值的区别
2010/12/29 PHP
浅谈php命令行用法
2015/02/04 PHP
smarty简单应用实例
2015/11/03 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
jquery判断浏览器类型的代码
2012/11/05 Javascript
toggle()隐藏问题的解决方法
2014/02/17 Javascript
JavaScript学习笔记之内置对象
2015/01/22 Javascript
jQuery实现高亮显示网页关键词的方法
2015/08/07 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
2015/09/24 Javascript
jquery实现简易的移动端验证表单
2015/11/08 Javascript
three.js实现围绕某物体旋转
2017/01/25 Javascript
React+react-dropzone+node.js实现图片上传的示例代码
2017/08/23 Javascript
JS实现中文汉字按拼音排序的方法
2017/10/09 Javascript
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
layuiAdmin循环遍历展示商品图片列表的方法
2019/09/16 Javascript
微信小程序 生成携带参数的二维码
2019/10/23 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
2020/06/05 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
2020/08/31 Javascript
一则python3的简单爬虫代码
2014/05/26 Python
Python中 传递值 和 传递引用 的区别解析
2018/02/22 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
Django中使用haystack+whoosh实现搜索功能
2019/10/08 Python
python 解压、复制、删除 文件的实例代码
2020/02/26 Python
Python进行统计建模
2020/08/10 Python
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
Aquatalia官网:意大利著名鞋履品牌
2019/09/26 全球购物
美术教师岗位职责
2014/03/18 职场文书
党员个人对照检查材料思想汇报
2014/09/16 职场文书
2014年后勤工作总结
2014/11/18 职场文书
手术室护士个人总结
2015/02/13 职场文书
毕业论文指导老师意见
2015/06/04 职场文书
三年级作文之小小梦想
2019/12/06 职场文书
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫
Python之matplotlib绘制饼图
2022/04/13 Python
win10怎么设置右下角图标不折叠?Win10设置右下角图标不折叠的方法
2022/07/15 数码科技