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库提交WEB表单
Feb 24 Python
Python用zip函数同时遍历多个迭代器示例详解
Nov 14 Python
python之从文件读取数据到list的实例讲解
Apr 19 Python
python 删除指定时间间隔之前的文件实例
Apr 24 Python
python 中字典嵌套列表的方法
Jul 03 Python
用python解压分析jar包实例
Jan 16 Python
Python多个装饰器的调用顺序实例解析
May 22 Python
Python新手如何理解循环加载模块
May 29 Python
Django REST 异常处理详解
Jul 15 Python
Python3如何使用range函数替代xrange函数
Oct 05 Python
在Django中使用MQTT的方法
May 10 Python
Python os和os.path模块详情
Apr 02 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 discuz 主题表和回帖表的设计
2009/03/13 PHP
php下安装配置fckeditor编辑器的方法
2011/03/02 PHP
深入解析php之sphinx
2013/05/15 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
myeclipse安装jQuery插件的方法
2011/03/29 Javascript
为原生js Array增加each方法
2012/04/07 Javascript
Javascript页面添加到收藏夹的简单方法
2013/08/07 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
js中substring和substr的定义和用法
2014/05/05 Javascript
探讨JavaScript标签位置的存放与功能有无关系
2016/01/15 Javascript
js实现页面跳转的几种方法小结
2016/05/16 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
2017/03/04 Javascript
微信小程序使用slider设置数据值及switch开关组件功能【附源码下载】
2017/12/09 Javascript
基于Vue实现关键词实时搜索高亮显示关键词
2018/07/21 Javascript
Array数组对象中的forEach、map、filter及reduce详析
2018/08/02 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
2019/01/17 Javascript
巧妙运用v-model实现父子组件传值的方法示例
2019/04/07 Javascript
Windows下搭建python开发环境详细步骤
2020/07/20 Python
200 行python 代码实现 2048 游戏
2018/01/12 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
python给图像加上mask,并提取mask区域实例
2020/01/19 Python
Scrapy框架实现的登录网站操作示例
2020/02/06 Python
浅谈python输出列表元素的所有排列形式
2020/02/26 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
2020/03/18 Python
keras在构建LSTM模型时对变长序列的处理操作
2020/06/29 Python
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
HelloFresh澳大利亚:订购你的美味食品盒、健康餐食
2018/03/28 全球购物
顶丰TOPPIK台湾官网:增发纤维假发,告别秃发困扰
2018/06/13 全球购物
Bally巴利中国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/10/09 全球购物
一套软件测试笔试题
2014/07/25 面试题
文秘专业大学生求职信
2013/11/10 职场文书
领导干部群众路线个人对照检查材料思想汇报
2014/09/30 职场文书
12.4全国法制宣传日活动方案
2014/11/02 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
利用Python多线程实现图片下载器
2022/03/25 Python