Python / 编程开发

通过Python发消息给企业微信机器人

浅时光博客 · 5月18日 · 2020年 · 20.9w 次已读

一、创建机器人

登入到企业微信或者钉钉,创建群组(加你自己至少三人才能创建群聊),然后右键群组添加机器人,然后点击机器人配置,获取机器人的webhook地址并复制保存。

二、编写Py脚本

注意:需要安装 requests 模块

1、发送文本类型

[root@localhost ~]# vim /script/python3/wechat.py 
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import requests
import json

def wechatwork():
    webhook = "企业微信机器人的webhook"
    header = {
        "Content-Type": "application/json",
        "Charset": "UTF-8"
}
    tex = "今天是个好日子,加油,DqzBoy"
    message ={

        "msgtype": "text",
        "text": {
            "content": tex
        },
        "at": {

            "isAtAll": True
        }

    }
    message_json = json.dumps(message)
    info = requests.post(url=webhook,data=message_json,headers=header)
    print(info.text)

if __name__=="__main__":
    wechatwork()

2、发送图片类型

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import requests
import json

def wechatwork():
    #机器人webhook
    webhook = "#机器人webhook"
    header = {
        "Content-Type": "application/json",
        "Charset": "UTF-8"
}
    message ={
        "msgtype": "news",
        "news": {
        "articles" : [
           {
               "title" : "dqz个人博客",		##标题
               "description" : "欢迎访问",		##描述信息
               "url" : "https://www.dqzboy.com/",   ##点击跳转的链接
               "picurl" : "https://www.dqzboy.com/blog.jpg" #图片存储路径
           }
        ]
      }
    }
    message_json = json.dumps(message)
    info = requests.post(url=webhook,data=message_json,headers=header)
    print(info.text)

if __name__=="__main__":
    wechatwork()

3、参数说明

三、查看消息

[root@localhost ~]# chmod +x /script/python3/wechat.py 
[root@localhost ~]# /script/python3/wechat.py

1、文本消息

2、图文消息

四、结合定时任务

  • 现在我们可以通过定时发送消息到指定的工作群等,Linux环境下就是通过crontab调用该脚本定时发送信息到工作群。
0 9 * * * /script/python3/wechat.py	#每天上午9点执行脚本

五、脚本升级改写

  • 上面我们是通过定时任务去推送消息的,缺点就是不管是节假日还是工作日都会去推送消息;现在我们调用法定节假日API接口,进行判断是否为工作日或是法定节假日,然后进行推送消息;
  • 这里我们想要文章来源(Source):https://dqzboy.com实现的是,工作日则每天9点进行准时消息推送(这里还是在定时任务里写死),而节假日则不进行推送消息。

1、改写代码

[root@localhost ~]# vim /script/python3/wechat.py 
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import requests
import time
import time,datetime	#获取当前系统的时间和日期
import json

holiday_info = {}
#定义年份
CUR_YEAR = '2020'
#企业微信webhook
WORK_WX_URL = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx'
#发送消息到企业机器人,定义信息类型
def post_to_wx(content):
    data = {
      "msgtype": "text",
      "text": {
        "content": content,
        "mentioned_list":["@all"],
      }
    }
    headers = {'Content-Type':'application/object'}
    jdata = json.dumps(data)
    jdata = bytes(jdata, encoding="utf8")
    rep = requests.post(url=WORK_WX_URL, data=jdata, headers=headers) 

#获取法定节假日信息
def init_holiday_info():
    global holiday_info
    rep = requests.get('http://tool.bitefu.net/jiari/?d=' + CUR_YEAR)
    info_txt = rep.content.decode()
    holiday_info =  json.loads(info_txt)
#判断是否为工作日
def check_if_is_work_day():
    day_info = time.strftime("%m%d",time.localtime(time.time()))
    print(day_info)   #将当前日志打印出来
    if day_info in holiday_info[CUR_YEAR]:
        return False
    week = datetime.datetime.now().weekday()
if 0 <= week and 4 >= week:
	#定义发送的信息内容
        post_to_wx('今天是个好日子,加油,DqzBoy')
    return False            
if __name__ == "__main__":
    init_holiday_info()
check_if_is_work_day()

2、脚本测试

  • 这里我们将系统时间进行调整
    • 1、先调整为工作日时间,然后手动触发脚本,检查是否会推文章来源(Source):https://dqzboy.com送消息;
    • 2、调整时间为节假日时间,然后手动触发脚本,检查是否会推送消息。
  • 工作日
[root@localhost python3]# ./wechat.py 
0518
{"errcode":0,"errmsg":"ok"}
  • 节假日
[root@localhost python3]# ./wechat.py 
0523   #非工作日企业微信收不到消息

本文作者:浅时光博客
原文链接:https://www.dqzboy.com/2563.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可,转载时请以>超链接形式标明文章原始出处和作者信息
免责声明:本站内容仅供个人学习与研究,严禁用于商业或非法目的。请在下载后24小时内删除相应内容。继续浏览或下载即表明您接受上述条件,任何后果由用户自行承担。