python实现企业微信机器人自动发消息

一)创建企业微信群机器人

1)先创建一个测试用临时对话群

操作步骤:先在手机端打开企业微信,点击右上角+按钮 -> 发起群聊 -> 联系人中选择2人点击确定,即可创建一个临时对话群

2)点击群对话右上角3个点“...”打开菜单 -> 在群机器人这里点击右侧“未添加” -> 添加机器人 -> 点击右上角“添加”

 

3)对新加的机器人进行姓名编辑 -> 点击确定,机器人添加成功。Webhook地址点击复制,保存

二)python脚本实现机器人自动发送消息

 1)python脚本实现机器人发送文本消息

import requests,base64,hashlib

class WXWork_SMS:
    def __init__(self):
        self.headers = {"Content-Type": "text/html"}
        self.send_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxx"  # 测试机器人webhook地址
        self.auth = ('Content-Type', 'application/json')


    def send_requests(self,send_data):
        res = requests.post(url=self.send_url, headers=self.headers, json=send_data, auth=self.auth)
        print(res.json())
        
    def send_msg(self):
        # 发送消息
        send_data = {
            "msgtype": "text",  # 消息类型,此时固定为news
            "text": {
                "content": '测试消息',
                "mentioned_list":  ["@all"]
            }
        }
        self.send_requests(send_data)
if __name__ == '__main__':
    sms = WXWork_SMS()
   sms.send_msg()

2)python脚本实现机器人发送本地图片

    def img_md5(self):
        #将本地图片转换为base64编码和md5值
        pic=r"F:\img\img.png"
        with open(pic,'rb')as f:
            image=f.read()
            image_base64=str(base64.b64encode(image),encoding='utf-8')
            my_md5=hashlib.md5()
            img_data=base64.b64decode(image_base64)
            my_md5.update(img_data)
            myhash=my_md5.hexdigest()
        return image_base64,myhash

    def send_img(self,image_base64,myhash):
        # 发送图片
        send_data = {
            "msgtype": "image",  # 消息类型,此时固定为news
            "image": {
                "base64": image_base64,
                "md5":myhash
            }
        }
        self.send_requests(send_data)

if __name__ == '__main__':
    sms = WXWork_SMS()
    image_base64,myhash=sms.img_md5()
    sms.send_img(image_base64,myhash)

3)python脚本实现机器人发送图文消息

    def send_news(self):
        # 图文类型消息
        send_data = {
            "msgtype": "news",  # 消息类型,此时固定为news
            "news": {
                "articles": [  # 图文消息,一个图文消息支持1到8条图文
                    {
                        "title": "下班啦",  # 标题,不超过128个字节,超过会自动截断
                        "description": "准备下班了,记得打卡~",  # 描述,不超过512个字节,超过会自动截断
                        "url": "www.baidu.com",  # 点击后跳转的链接。
                        "picurl": "http://res.mail.qq.com/node/ww/wwopenmng/images/independent/doc/test_pic_msg1.png"
                        # 图文消息的图片链接,支持JPG、PNG格式,较好的效果为大图 1068*455,小图150*150。
                    }

                ]
            }
        }
        self.send_requests(send_data)
if __name__ == '__main__':
    sms = WXWork_SMS()
    sms.send_news()

4)定时发送消息

import requests
import json
import datetime
import time

wx_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxx"  # 测试机器人webhook
send_message1 = "测试消息1"
send_message2="测试消息2"
send_message3='测试消息3'
send_message4 = "测试消息4"

def get_current_time():
    """获取当前时间,当前时分秒"""
    now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    hour = datetime.datetime.now().strftime("%H")
    mm = datetime.datetime.now().strftime("%M")
    ss = datetime.datetime.now().strftime("%S")
    today = datetime.datetime.now().date()
    is_work = today.isoweekday()
    print(now_time)
    print(is_work)
    return now_time, hour, mm, ss,is_work

def sleep_time(hour, m, sec):
    return hour * 3600 + m * 60 + sec

def send_msg(content):
    data = json.dumps({"msgtype": "text", "text": {"content": content, "mentioned_list": ["@all"]}})
    r = requests.post(wx_url, data, auth=('Content-Type', 'application/json'))
    print(r.json())

def every_time_send_msg(h1='16', m1='00',h2='11', m2='00',h3='18', m3='00',h4='10', m4='05',mode="game"):
    # 死循环

    while True:
        if  mode == "game" :
            # 获取当前时间和当前时分秒
            c_now, c_h, c_m, c_s,work_day = get_current_time()
            if work_day in range (1,7) and c_h == h1 and c_m == m1:
                print(work_day)
                send_msg(send_message1)
            elif work_day in range (1,7) and c_h == h3 and c_m == m3:
                print(work_day)
                send_msg(send_message3)
            elif work_day in range (1,7) and c_h == h4 and c_m == m4:
                print(work_day)
                send_msg(send_message4)
            elif work_day==5 and c_h == h2 and c_m == m2:
                print(work_day==5)
                send_msg(send_message2)
            time.sleep(60)

if __name__ == '__main__':
    every_time_send_msg(mode="game")

 

posted @ 2022-09-02 17:24  沐小木  Views(3493)  Comments(0Edit  收藏  举报