当前位置: 首页 > news >正文

python发送企业微信群webhook消息(文本、文件)

import datetime
import os
import time
from copy import copyimport requests
from loguru import logger
from urllib3 import encode_multipart_formdataclass WeiXin_Robot:def __init__(self,url: str = ""):# 测试cartest_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx"self.url = url or test_urlself.mHeader = {'Content-Type': 'application/json; charset=UTF-8'}def send_cars_msg(self, car_dict):logger.info(f"{car_dict=}")cars = f"  ##通知\n" \f"一一一一一一一一一一一一一一\n"for vin, info in car_dict.items():info_str = f"{vin}:<font color=\"info\">{info}</font>\n"cars += info_strdata = {"msgtype": "markdown","markdown": {'content': cars}}self.send(data=data)def send_error_msg(self, info):data = {"msgtype": "text","text": {"content":f"企业微信异常提醒\n"f"问题描述:{info.get('desc')}\n"f"名称:{info.get('name')}\n"f"id:{info.get('media_id')}\n","mentioned_mobile_list": ["18817957261"]}}self.send(data=data)def send(self, data):try:info = requests.post(url=self.url, json=data, headers=self.mHeader)if info.json().get("errcode") == 0 and info.json().get("errmsg") == "ok":logger.info(f"企业微信通知发送成功,msg={info.json()}")else:logger.warning(f"企业微信通知发送异常,{info.json()=}")except Exception as e:logger.warning("企业微信通知发送异常")logger.warning(e)pass# file_path: e.g /root/data/test_file.xlsx# 如果D:\\windows\\ 下面file_name的split需要调整一下# upload_file 是为了生成 media_id, 供消息使用def upload_file(self, file_path):try:key = self.url.split('=')[1]wx_upload_url = f"https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key={key}&type=file"file_name = file_path.split("/")[-1]with open(file_path, 'rb') as f:length = os.path.getsize(file_path)data = f.read()print(file_name)headers = {"Content-Type": "application/octet-stream"}params = {"name": 'media',"filename": file_name,"filelength": length,}file_data = copy(params)file_data['file'] = (file_path.split('/')[-1:][0], data)encode_data = encode_multipart_formdata(file_data)file_data = encode_data[0]headers['Content-Type'] = encode_data[1]r = requests.post(wx_upload_url, data=file_data, headers=headers)print(r.text)if r.json().get("errcode") == 0 and r.json().get("errmsg") == "ok":logger.info(f"上传文件到企业微信成功,msg={r.json()},{file_path=}")media_id = r.json()['media_id']return media_idelse:logger.warning(f"上传文件到企业微信异常,{r.json()=},{file_path=}")except Exception as e:logger.warning("上传文件到企业微信失败")logger.warning(e)pass# media_id 通过上一步上传的方法获得def send_file(self, file_path=None, media_id=""):"""企业微信发送文件"""if not media_id:media_id = self.upload_file(file_path=file_path)time.sleep(1)try:# headers = {"Content-Type": "text/plain"}data = {"msgtype": "file","file": {"media_id": media_id}}for i in range(3):r = requests.post(url=self.url, json=data, headers=self.mHeader)if r.json().get("errcode") == 0 and r.json().get("errmsg") == "ok":logger.info(f"企业微信发送文件成功,msg={r.json()},{file_path=},{media_id=}")breakelse:logger.warning(f"企业微信发送文件异常,{r.json()=},{file_path=}")logger.warning('3s后再次尝试发送文件...')time.sleep(3)if i == 2:self.send_error_msg(info={'desc': f'企业微信发送文件异常',"name": file_path,'media_id': media_id,})# print(r.text)except Exception as e:logger.warning("企业微信发送文件异常")logger.warning(e)passif __name__ == "__main__":pass
http://www.lryc.cn/news/220561.html

相关文章:

  • 高数笔记06:无穷级数
  • Android工具栏ToolBar
  • 2.3 - 网络协议 - ICMP协议工作原理,报文格式,抓包实战
  • 北京陪诊小程序|陪诊系统开发|陪诊小程序未来发展不可小觑
  • 前端面试题总结(一)
  • LeetCode107. Binary Tree Level Order Traversal II
  • 【大模型应用开发教程】04_大模型开发整体流程 基于个人知识库的问答助手 项目流程架构解析
  • 【Unity ShaderGraph】| 快速制作一个 表面水纹叠加效果
  • 大模型的实践应用5-百川大模型(Baichuan-13B)的模型搭建与模型代码详细介绍,以及快速使用方法
  • 用友U8定制版在集简云:无需API即可集成客服系统和用户运营
  • APP埋点:页面统计与事件统计
  • Kotlin学习笔记-Kotlin基础-01
  • gma 1.x 气候气象指数计算源代码(分享)
  • 酒水展示预约小程序的效果如何
  • 蓝桥杯练习
  • python设计模式11:观察者模式
  • STM32 GPIO 描述
  • lerna在项目中使用
  • java智能在线考试系统源码 基于SpringBoot+Vue开发
  • 防逆流系统中防逆流电表的正确安装位置-安科瑞黄安南
  • Hello Qt!
  • pytorch加载的cifar10数据集,到底有没有经过归一化
  • Day1 ARM基础
  • ns3入门基础教程
  • 计算机视觉
  • NSSCTF第10页(3)
  • MySQL性能分析工具的使用
  • Uniapp使用AES128加解密16进制
  • C++基础——类与对象
  • 人工智能-卷积神经网络