Python獲得百度統計API的資料併發送郵件
小工具
本來這麼晚是不準備寫部落格的,當是想到了那個狗子絕對會在開學的時候跟我逼逼這個事情,所以,還是老老實實地寫一下吧。
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分發送該郵件。
晚上還是不適合寫部落格,不然寫著寫著就餓了,/(ㄒoㄒ)/~~