• 如何用 Python 发送告警通知到微信?


    最近当上了阿里云的推广大使,带了 200 名读者一起免费领取了阿里云的服务器,每个人都说 『真香』。

    PS:有想参与领取免费服务器的同学,可加我v:hello-wbm,我发你操作流程。

    组织第一期活动,其实还是有不少的问题,主要流程上的问题。

    为了让整个流程更加自动化,操作更加流畅,我利用公众号的开发能力,将整个过程集成到公众号消息的自助查询。

    其中有一步就是确认用户的购买资格,只要在我的公众号后台回复对应的阿里云ID 我这边就会去查询阿里云后台的关联数据,但阿里云的 cookie 数个小时就会失效,这样一来就有点尴尬,后台的爬虫失效了参与的读者还在一直查,一直查,查到的都是未关联的数据。

    这时候实时告警就显得非常重要,常见的告警方式有:邮件,电话,短信,微信。

    短信和电话,通常是收费的(有不收费的,可以分享一下),而邮件又不是那么及时,因此最后我选择微信通知。

    这里说的微信,是企业微信,而我之前用注册过个体户的执照,因此可以很轻松就可以注册自己的企业微信。

    1. 新建应用

    登陆网页版企业微信 (https://work.weixin.qq.com/),点击 应用管理 -> 应用 -> 创建应用

    上传应用的 logo,输入应用名称,再选择可见范围,成功创建一个告警应用

    2. 获取Secret

    使用 Python 发送告警请求,其实就只使用到两个接口

    • 获取 Tokenhttps://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={corpid}&corpsecret={secret}
    • 发送请求https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={token}

    可以看到,最重要的是 corpid 和 secret:

    • corpid:唯一标识你的企业
    • secret:应用级的密钥,有了程序才知道你要发送该企业的哪个应用

    corpid 可以通过 我的企业 -> 企业信息 获取

    而 secret 获取相对麻烦一点,点击前面创建应用,点击 查看 secret

    然后再点击发送就会发送到你的企业微信上

    最后将 corpid 和 secret 填入下面的常量中。

    import json
    import datetime
    import requests
    
    CORP_ID = ""
    SECRET = ""
    
    class WeChatPub:
        s = requests.session()
    
        def __init__(self):
            self.token = self.get_token()
    
        def get_token(self):
            url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={CORP_ID}&corpsecret={SECRET}"
            rep = self.s.get(url)
            if rep.status_code != 200:
                print("request failed.")
                return
            return json.loads(rep.content)['access_token']
    
    
        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:
                print("request failed.")
                return
            return json.loads(rep.content)
    

    然后就可以通过 send_msg 函数发送消息了。

    wechat = WeChatPub()
    now = datetime.datetime.now()
    timenow = now.strftime('%Y年%m月%d日 %H:%M:%S')
    wechat.send_msg(f"<div class=\"gray\">{timenow}</div> <div class=\"normal\">阿里云 cookie 已失效</div><div class=\"highlight\">请尽快更换新的 cookie</div>")
    

    只要你的企业微信没有关闭通知的权限,那你的手机立马就会弹出这个告警信息。

    简单几步就对接了企业微信,实现了手机的实时告警功能,推荐有企业微信的同学使用。

    当然一定有更多,更好用的实现方法,我只是我选择了其中一种,大家有不错的思路也可以分享在评论区。


    文章最后给大家介绍三个我自己写的在线文档:

    第一个文档PyCharm 中文指南 1.0 文档

    花了两个多月的时间,整理了 100 个 PyCharm 的使用技巧,为了让新手能够直接上手,我花了很多的时间录制了上百张 GIF 动图,有兴趣的前往在线文档阅读。

    第二个文档PyCharm 黑魔法指南 1.0 文档

    系统收录各种 Python 冷门知识,Python Shell 的多样玩法,令人疯狂的 Python 炫技操作,Python 的超详细进阶知识解读,非常实用的 Python 开发技巧等。

    第三个文档Python 中文指南 1.0 文档

    花了三个月时间写的一本 适合零基础入门 Python 的全中文教程,搭配大量的代码案例,让初学者对 代码的运作效果有一个直观感受,教程既有深度又有广度,每篇文章都会标内容的难度,是基础还是进阶的,可供读者进行选择,是一本难得的 Python 中文电子教程。

  • 相关阅读:
    R语言:常用统计检验
    用R语言的quantreg包进行分位数回归
    使用adagio包解决背包问题
    手机上的微型传感器
    JS常用字符串、数组的方法(备查)
    Threejs 纹理贴图2--凹凸贴图、法线贴图
    Three.js 纹理贴图1--旋转的地球
    Three.js 帧动画
    Three.js光源、相机知识梳理
    Three.js 点、线、网络模型及材质知识梳理
  • 原文地址:https://www.cnblogs.com/wongbingming/p/15519131.html
Copyright © 2020-2023  润新知