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 相关文章推荐
Pyramid Mako模板引入helper对象的步骤方法
Nov 27 Python
Python的语言类型(详解)
Jun 24 Python
python根据unicode判断语言类型实例代码
Jan 17 Python
python生成ppt的方法
Jun 07 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
May 07 Python
对于Python深浅拷贝的理解
Jul 29 Python
Python 用turtle实现用正方形画圆的例子
Nov 21 Python
python使用numpy实现直方图反向投影示例
Jan 17 Python
pyautogui自动化控制鼠标和键盘操作的步骤
Apr 01 Python
使用keras根据层名称来初始化网络
May 21 Python
pycharm 2020 1.1的安装流程
Sep 29 Python
基于python定位棋子位置及识别棋子颜色
Jul 26 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数据库中并显示的实现代码
2010/05/27 PHP
实例讲解通过​PHP创建数据库
2019/01/20 PHP
jQuery 第二课 操作包装集元素代码
2010/03/14 Javascript
JQuery从头学起第一讲
2010/07/04 Javascript
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
基于JavaScript创建动态Dom
2015/12/08 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
jQuery实现自动输入email、时间和域名的方法
2016/08/24 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
2017/01/11 Javascript
JS中跳出循环的示例代码
2017/09/14 Javascript
webpack构建react多页面应用详解
2017/09/15 Javascript
es6新特性之 class 基本用法解析
2018/05/05 Javascript
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
详解vue为什么要求组件模板只能有一个根元素
2019/07/22 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
2018/12/24 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
2020/03/19 Python
Django多数据库配置及逆向生成model教程
2020/03/28 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
2020/04/23 Python
Python虚拟环境的创建和包下载过程分析
2020/06/19 Python
html5指南-7.geolocation结合google maps开发一个小的应用
2013/01/07 HTML / CSS
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
精油和天然健康美容产品:Art Naturals
2018/01/27 全球购物
Book Depository亚太地区:一家领先的国际图书零售商
2019/05/05 全球购物
银行营业厅大堂经理岗位职责
2014/01/06 职场文书
电焊工工作岗位职责
2014/02/06 职场文书
文员岗位职责范本
2014/03/08 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
新闻发布会活动策划方案
2014/09/15 职场文书
圣诞晚会主持词
2015/07/01 职场文书