最近筆者的項目需要找到一種方法能自動將Python爬蟲產(chǎn)生的一些結果用告警的信息的方式發(fā)送到手機上,以往我們用來發(fā)送告警的方式往往是短信或者郵件凶硅,但是這兩種方式要么不夠靈活要么實時性不夠》觳茫現(xiàn)在越來越多的互聯(lián)網(wǎng)應用選擇用微信作為平臺發(fā)送告警信息,這種方式的前提就是你的應用需要能夠訪問到微信的服務器足绅。
根據(jù)筆者的了解捷绑,目前集成微信告警主要有兩種方式:
- 用個人號發(fā)送告警
- 用公眾號(企業(yè)號)發(fā)送告警
個人號發(fā)送告警
顧名思義,雖然也是調用微信的API實現(xiàn)發(fā)送信息氢妈,但是這種方式需要使用個人賬號掃描登錄以后腳本才能運行粹污,另外從接受告警的形式上看起來也就像是跟一個人在聊天。當前已經(jīng)有很多熱心的大神將微信的接口封裝成了更加易于調用的接口SDK首量,如wxpy和wechat sender可以大大簡化接口調用的復雜度壮吩,感興趣的讀者可以自行研究,上述兩個項目的文檔已經(jīng)寫的非常詳細了
公眾號發(fā)送告警
使用公眾號發(fā)送告警加缘,從形式上看起來更加正式鸭叙,并且不需要掃碼登錄,更適合部署在服務器上長期運行拣宏。因為近期微信的企業(yè)號和公眾號做了合并沈贝,因此申請的流程有了一些變化,但是總體來說更加簡單了蚀浆,即使沒有真正的公司注冊信息也同樣可以申請到缀程,只是未驗證主體信息的賬號只能有200個成員,發(fā)送次數(shù)的限制為:帳號上限數(shù)*30人次/天
注冊公眾號(企業(yè)號)
現(xiàn)在申請的過程非常簡單市俊,申請入口:https://work.weixin.qq.com/
查看公眾號
注冊完成后可以進入到后臺管理頁面杨凑,點擊微信插件,可以看到我們企業(yè)號的二維碼摆昧,并可以進行添加成員等操作
創(chuàng)建應用
在開始調用公眾號的API之前撩满,我們要先創(chuàng)建一個應用,告警可以發(fā)送到指定的應用中绅你,同時我們還可以對應用授權伺帘,以限制可以看到告警的人員范圍
創(chuàng)建完成后,點擊應用圖標可以看到以下頁面
其中AgentId和Secret兩個字段在后面的代碼中要用到
微信API
要實現(xiàn)簡單的消息發(fā)送忌锯,我們只需要用到兩個微信的API接口
Python調用微信API
廢話不多說伪嫁,直接上代碼
import json
import requests
class WeChatPub:
s = requests.session()
token = None
def __init__(self):
self.token = self.get_token("<corpid>", "<secret>")
print("token is " + self.token)
def get_token(self, corpid, secret):
url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={0}&corpsecret={1}".format(corpid, secret)
rep = self.s.get(url)
if rep.status_code == 200:
return json.loads(rep.content)['access_token']
else:
print("request failed.")
return None
def send_msg(self, content):
url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + self.token
header = {
"Content-Type": "application/json"
}
form_data = {
"touser": "@all",
"toparty": " PartyID1 | PartyID2 ",
"totag": " TagID1 | TagID2 ",
"msgtype": "textcard",
"agentid": 1000002,
"textcard": {
"title": "領獎通知",
"description": content,
"url": "URL",
"btntxt": "更多"
},
"safe": 0
}
rep = self.s.post(url, data=json.dumps(form_data).encode('utf-8'), headers=header)
if rep.status_code == 200:
return json.loads(rep.content)
else:
print("request failed.")
return None
if __name__ == '__main__':
wechat = WeChatPub()
wechat.send_msg("<div class=\"gray\">2016年9月26日</div> <div class=\"normal\">恭喜你抽中iPhone 7一臺,領獎碼:xxxx</div><div class=\"highlight\">請于2016年10月10日前聯(lián)系行政同事領取</div>")
CorpID在我的企業(yè)->企業(yè)信息 頁面的最下面
執(zhí)行以后在目標群里會收到以下信息:
接下來的事情就簡單了偶垮,我們在已經(jīng)準備好的爬蟲腳本中需要告警的位置加上 wechat.send_msg()即可將相關的信息發(fā)送到我們的企業(yè)號上张咳,實現(xiàn)自動發(fā)送告警帝洪。