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下MySQLdb用法实例分析
Jun 08 Python
安装Python和pygame及相应的环境变量配置(图文教程)
Jun 04 Python
Python实现的手机号归属地相关信息查询功能示例
Jun 08 Python
Python实现句子翻译功能
Nov 14 Python
Python的SimpleHTTPServer模块用处及使用方法简介
Jan 22 Python
python smtplib模块自动收发邮件功能(二)
May 22 Python
详解python uiautomator2 watcher的使用方法
Sep 09 Python
基于python的docx模块处理word和WPS的docx格式文件方式
Feb 13 Python
浅谈Python 钉钉报警必备知识系统讲解
Aug 17 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
Jan 12 Python
实例讲解Python中sys.argv[]的用法
Jun 03 Python
Opencv中cv2.floodFill算法的使用
Jun 18 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中register_globals参数为OFF和ON的区别(register_globals 使用详解)
2012/02/05 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
JS 进度条效果实现代码整理
2011/05/21 Javascript
JS文本框追加多个下拉框的值的简单实例
2013/07/12 Javascript
Jquery绑定事件(bind和live的区别介绍)
2013/08/23 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
2013/11/29 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
2013/12/24 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
JavaScript控制两个列表框listbox左右交换数据的方法
2015/03/18 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
2015/10/25 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
javascript Function函数理解与实战
2017/12/01 Javascript
微信小程序实现星级评价效果
2018/12/28 Javascript
nodejs提示:cross-device link not permitted, rename错误的解决方法
2019/06/10 NodeJs
Vuex 模块化使用详解
2019/07/31 Javascript
Vuex的各个模块封装的实现
2020/06/05 Javascript
wxpython 最小化到托盘与欢迎图片的实现方法
2014/06/09 Python
Python代码的打包与发布详解
2014/07/30 Python
python算法表示概念扫盲教程
2017/04/13 Python
python 实现提取某个索引中某个时间段的数据方法
2019/02/01 Python
Python3.5装饰器典型案例分析
2019/04/30 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
全球性的在线商店:Vogca
2019/05/10 全球购物
意大利单身交友网站:Meetic
2020/07/12 全球购物
屈臣氏菲律宾官网:Watsons菲律宾
2020/06/30 全球购物
英国珠宝和手表专家:Pleasance & Harper
2020/10/21 全球购物
专业求职信撰写要诀
2014/02/18 职场文书
新教师培训方案
2014/06/08 职场文书
房屋出租协议书范本(标准版)
2014/09/24 职场文书
2015年全国科普日活动总结
2015/03/23 职场文书
出生证明格式
2015/06/15 职场文书
优秀教师工作总结2015
2015/07/22 职场文书
2015年城乡环境综合治理工作总结
2015/07/24 职场文书
聘任通知书
2015/09/21 职场文书