Python得到百度統計API的數據併發送郵件

Python得到百度統計API的數據併發送郵件

原本這麼晚是不許備寫博客的,當是想到了那個狗子絕對會在開學的時候跟我逼逼這個事情,因此,仍是老老實實地寫一下吧。html

 


 

 

Baidu統計API的使用

系統環境:python

  • Python2
    • requests庫:發出請求
    • json庫:json處理

getSiteList的使用

官方文檔在此,說實話,這是我使用百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

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的數據。api

使用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了。app

進入linux,輸入crontab -e,而後在裏面30 23 * * * python ~/Home/tongji.py【你的Python文件地址】 >> tongji.txt就能夠設置爲,在晚上的11.30分發送該郵件。ide

晚上仍是不適合寫博客,否則寫着寫着就餓了,/(ㄒoㄒ)/~~工具

 

相關文章
相關標籤/搜索