• Python3调用企业微信用于告警


    代码实现请见文末

    前段时间利用py爬虫抓取一些网页信息,然后通过wxpy发送到微信群,以用作日常告警,感觉还是很方便。

    但好景不长,我的小号微信被腾讯封了(很常见咯), 显示无法登录网页版微信,至今已经有半个多月了。

    image

    怎么办,已经体验过微信告警的方便后,无法回归原始人工查看了。思来想去,决定探(bai)索(du)Python调用微信企业号试试看;

    一、申请企业微信

    具体见企业微信官网:https://work.weixin.qq.com/wework_admin/register_wx?from=myhome_mp_home

    反正比较麻烦,我是怎么申请的?我当了一次伸手党,前期有同事申请过微信公众号,后来直接升级为企业微信。经过深层次的沟通,同事给我加了个管理员权限,哈哈!

    开发之前还是要认真研究一下企业微信的API文档

    二、创建应用

    1、管理员进入企业微信“管理后台” — “企业应用”创建应用


    2、设置应用logo、名称、描述、可见范围等。

    开发阶段“应用可见范围”可先选择小范围可见,待开发完成后再开放给企业员工。

    三、获取access_token

    开发者可以使用access_token来访问企业微信的接口。需要注意的是,所有的接口需使用Https协议、Json数据格式、UTF8编码。

    请求方式:GET(HTTPS
    请求URL:https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=id&corpsecret=secrect

    image

    权限说明:

    每个应用有独立的secret,所以每个应用的access_token应该分开来获取

    术语介绍

    • corpid:每个企业都拥有唯一的corpid,获取此信息可在管理后台“我的企业”-“企业信息”下查看(需要有管理员权限)
    • secret:secret是企业应用里面用于保障数据安全的“钥匙”,每一个应用都有一个独立的访问密钥,为了保证数据的安全,secret务必不能泄漏。通讯录接口的密钥在“管理工具”-“通讯录同步”里面查看,企业自定义的应用的密钥可以在企业应用的详情里面手动生成
    • access_token:access_token是企业后台去企业微信的后台获取信息时的重要票据,由corpid和secret产生。所有接口在通信时都需要携带此信息用于验证接口的访问权限

    corpid:

    2017-09-04_171908

    secret:

    image

    四、发送消息

    应用支持推送文本、图片、视频、文件、图文等类型。

    请求方式:POST(HTTPS
    请求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN

    五、代码实现

    import urllib.request
    import json
    
    #--------------------------------
    # 获取企业微信token
    #--------------------------------
    
    def get_token(url, corpid, corpsecret):
        token_url = '%s/cgi-bin/gettoken?corpid=%s&corpsecret=%s' % (url, corpid, corpsecret)
        token = json.loads(urllib.request.urlopen(token_url).read().decode())['access_token']
        return token
    
    #--------------------------------
    # 构建告警信息json
    #--------------------------------
    def messages(msg):
        values = {
            "touser": '@all',
            "msgtype": 'text',
            "agentid": 1000002, #偷懒没有使用变量了,注意修改为对应应用的agentid
            "text": {'content': msg},
            "safe": 0
            }
        msges=(bytes(json.dumps(values), 'utf-8'))
        return msges
    
    #--------------------------------
    # 发送告警信息
    #--------------------------------
    def send_message(url,token, data):
            send_url = '%s/cgi-bin/message/send?access_token=%s' % (url,token)
            respone=urllib.request.urlopen(urllib.request.Request(url=send_url, data=data)).read()
            x = json.loads(respone.decode())['errcode']
            # print(x)
            if x == 0:
                print ('Succesfully')
            else:
                print ('Failed')
    
    ##############函数结束########################
    
    corpid = 'wx***********************'
    corpsecret = 'Iwy******************************'
    url = 'https://qyapi.weixin.qq.com'
    msg='test,Python调用企业微信测试'
    
    #函数调用
    test_token=get_token(url, corpid, corpsecret)
    msg_data= messages(msg)
    send_message(url,test_token, msg_data)
  • 相关阅读:
    linq 查询-“必须是可缩小的节点”
    在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。”
    将字符串转换为double类型的list
    mysql新增用户无法授权!? 解决方案
    eclipse项目有红色感叹号
    错误: 找不到或无法加载主类 java操作hbase出错
    org.apache.hadoop.conf.Configuration无法引用 解决方法
    jdbc的数据库驱动类DriverManager.getConnection()详解
    MySQL [Err] 1055--1064
    控制反转
  • 原文地址:https://www.cnblogs.com/Eric-Young/p/7474729.html
Copyright © 2020-2023  润新知