2018/4/16 15:07:48当前位置推荐好文程序员浏览文章

最近笔者的项目需要找到一种方法可以自动将Python爬虫产生的少量结果消耗告警的信息的方式发送到手机上,以往我们消耗来发送告警的方式往往是短信或者者邮件,但是这两种方式要么不够灵活要么实时性不够。现在越来越多的互联网应消耗选择消耗微信作为平台发送告警信息,这种方式的前提就是你的应消耗需要可以够访问到微信的服务器。
根据笔者的理解,目前集成微信告警主要有两种方式:

  • 消耗个人号发送告警
  • 消耗公众号(企业号)发送告警

个人号发送告警

顾名思义,尽管也是调消耗微信的API实现发送信息,但是这种方式需要使消耗个人账号扫描登录以后脚本才可以运行,另外从接受告警的形式上看起来也就像是跟一个人在聊天。当前已经有很多热心的大神将微信的接口封装成了更加易于调消耗的接口SDK,如wxpy和wechat sender能大大简化接口调消耗的复杂度,感兴趣的读者能自行研究,上述两个项目的文档已经写的非常详细了

公众号发送告警

使消耗公众号发送告警,从形式上看起来更加正式,并且不需要扫码登录,更适合部署在服务器上长期运行。由于近期微信的企业号和公众号做了合并,因而申请的流程有了少量变化,但是总体来说更加简单了,即便没有真正的公司注册信息也同样能申请到,只是未验证主体信息的账号只可以有200个成员,发送次数的限制为:帐号上限数30人次/天

注册公众号(企业号)

现在申请的过程非常简单,申请入口:https://work.weixin.qq.com/

查看公众号

注册完成后能进入到后端管理页面,点击微信插件,能看到我们企业号的二维码,并能进行增加成员等操作


微信插件

创立应消耗

在开始调消耗公众号的API之前,我们要先创立一个应消耗,告警能发送到指定的应消耗中,同时我们还能对应消耗受权,以限制能看到告警的人员范围


创立应消耗

创立完成后,点击应消耗图标能看到以下页面


应消耗信息
其中AgentId和Secret两个字段在后面的代码中要消耗到

微信API

要实现简单的消息发送,我们只要要消耗到两个微信的API接口

  • 获取token:https://work.weixin.qq.com/api/doc#10013
  • 发送消息:https://work.weixin.qq.com/api/doc#10167

Python调消耗微信API

废话不多说,直接上代码

import jsonimport requestsclass 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 Noneif __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日前联络行政同事领取</div>")

CorpID在我的企业->企业信息 页面的最下面


mark

执行以后在目标群里会收到以下信息:


mark

接下来的事情就简单了,我们在已经准备好的爬虫脚本中需要告警的位置加上 wechat.send_msg()就可将相关的信息发送到我们的企业号上,实现自动发送告警。

原文链接:《利消耗微信实现自动发送监控告警》

网友评论