原本这么晚是不许备写博客的,当是想到了那个狗子绝对会在开学的时候跟我逼逼这个事情,因此,仍是老老实实地写一下吧。html
系统环境:python
官方文档在此,说实话,这是我使用百BaiduAPI最坑的一次,在这个官方文档的getSiteList中,彻底不告诉你请求参数是什么。linux
首先,须要得到百度统计API的token,在这里写了token得到的流程。json
# 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
# 假设个人网站的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的数据。api
在这里,我使用的是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了。app
进入linux,输入crontab -e
,而后在里面30 23 * * * python ~/Home/tongji.py【你的Python文件地址】 >> tongji.txt
就能够设置为,在晚上的11.30分发送该邮件。ide
晚上仍是不适合写博客,否则写着写着就饿了,/(ㄒoㄒ)/~~工具