利用微信实现自动发送监控告警

举报
菊花茶 发表于 2018/04/06 23:00:51 2018/04/06
【摘要】 最近笔者的项目需要找到一种方法能自动将Python爬虫产生的一些结果用告警的信息的方式发送到手机上,以往我们用来发送告警的方式往往是短信或者邮件,但是这两种方式要么不够灵活要么实时性不够。现在越来越多的互联网应用选择用微信作为平台发送告警信息,这种方式的前提就是你的应用需要能够访问到微信的服务器。根据笔者的了解,目前集成微信告警主要有两种方式:用个人号发送告警用公众号(企业号)发送告警个人号...

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

  • 用个人号发送告警

  • 用公众号(企业号)发送告警


个人号发送告警

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

公众号发送告警

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

注册公众号(企业号)

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

查看公众号

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


700


创建应用

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


700


创建完成后,点击应用图标可以看到以下页面


700


其中AgentId和Secret两个字段在后面的代码中要用到

微信API

要实现简单的消息发送,我们只需要用到两个微信的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日前联系行政同事领取</div>")

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


700


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


700

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


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。