python向企业微信发送文字和图片消息的示例


Posted in Python onSeptember 28, 2020

吐槽一下企业微信的api文档真的不好读······

企业微信本来是有功能,可以直接把图片显示到正文的,但是那个api我调用一直出错,各种折腾也没解决。后来感觉就算了,没必要,用url拼接在文字中也行,这样的好处就是以后可以换图床,不局限在企业微信内部(好像免费版一天之内可以上传200张图片,所以如果需求比较大的话可以采用第三方图床)

我把上传部分封装了一个使用新线程的方法,以防使用的时候因为上传卡住主线程(亲测如果不这样的话确实会卡住)

import requests
import json
from threading import Thread
import cv2
import os


class Wechat_Info():
  def __init__(self):
    self.partyID = ''
    self.corpID = ''
    self.secret = ''
    self.agentID = ''
    self.token = None
    self.pic = None

  def __get_token(self, corpid, secret):
    Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
    Data = {
      "corpid": corpid,
      "corpsecret": secret
    }
    r = requests.get(url=Url, params=Data)
    token = r.json()['access_token']
    return token

  def send_message(self, message):
    url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={}".format(
      self.__get_token(self.corpID, self.secret))
    data = {
      "toparty": self.partyID,
      "msgtype": "text",
      "agentid": self.agentID,
      "text": {
        "content": message
      },
      "safe": "0"
    }
    result = requests.post(url=url, data=json.dumps(data))
    return result.text

  def get_media_url(self, path): ##上传到图片素材 图片url
    Gtoken = self.__get_token(self.corpID, self.secret)
    img_url = "https://qyapi.weixin.qq.com/cgi-bin/media/uploadimg?access_token={}".format(Gtoken)
    files = {'media': open(path, 'rb')}
    r = requests.post(img_url, files=files)
    re = json.loads(r.text)
    # print("media_id: " + re['media_id'])
    return re['url']

  def send_pic(self, pic_path):
    img_url = self.get_media_url(pic_path)
    url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={}".format(
      self.__get_token(self.corpID, self.secret))
    data = {
      "toparty": self.partyID,
      "msgtype": "text",
      "agentid": self.agentID,
      "text": {
        "content": img_url
      },
      "safe": "0"
    }
    result = requests.post(url=url, data=json.dumps(data))
    return result.text

  def send_violence_warning(self, pic_path):
    img_url = self.get_media_url(pic_path)
    url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={}".format(
      self.__get_token(self.corpID, self.secret))
    data = {
      "toparty": self.partyID,
      "msgtype": "text",
      "agentid": self.agentID,
      "text": {
        "content": '【管理员注意】,有校园暴力行为发生,请及时处理!监控图片>>' + img_url
      },
      "safe": "0"
    }
    result = requests.post(url=url, data=json.dumps(data))
    return result.text

  def send_violence_warning_read_path_from_class(self):
    pic_path = 'temp.jpg'
    cv2.imwrite(pic_path, self.pic)
    self.send_violence_warning(pic_path)
    os.remove(pic_path)

  def send_violence_warning_in_new_thread(self, pic):
    self.pic = pic
    thread = Thread(target=self.send_violence_warning_read_path_from_class)
    thread.start()



if __name__ == '__main__':
  wechat_info = Wechat_Info()
  # result = wechat_info.send_message('微信测试_2020')
  # result = wechat_info.send_pic('C:\\Users\\JiaDing\\Desktop\\pic.jpg')
  result = wechat_info.send_violence_warning('C:\\Users\\JiaDing\\Desktop\\pic.jpg')
  print(result)

在主线程里面调用那个send_violence_warning_in_new_thread,把opencv的图片传进来就行

效果:

python向企业微信发送文字和图片消息的示例

虽然是url,但是效果其实也挺好的,点一下就能显示了,即使是第三方图床也没有提示什么的,操作速度也很快,没有其他幺蛾子

以上就是python向企业微信发送文字和图片消息的示例的详细内容,更多关于python发送文字和图片的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python使用7z解压软件备份文件脚本分享
Feb 21 Python
Python中字典的基础知识归纳小结
Aug 19 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
Dec 28 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
Apr 06 Python
深入浅析Python 中 is 语法带来的误解
May 07 Python
详解python pandas 分组统计的方法
Jul 30 Python
Python使用百度api做人脸对比的方法
Aug 28 Python
python KNN算法实现鸢尾花数据集分类
Oct 24 Python
python列表推导和生成器表达式知识点总结
Jan 10 Python
python读取当前目录下的CSV文件数据
Mar 11 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
Jun 22 Python
Python截图并保存的具体实例
Jan 14 Python
python利用tkinter实现图片格式转换的示例
Sep 28 #Python
python在CMD界面读取excel所有数据的示例
Sep 28 #Python
python调用摄像头的示例代码
Sep 28 #Python
python 调用API接口 获取和解析 Json数据
Sep 28 #Python
记录一下scrapy中settings的一些配置小结
Sep 28 #Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
Sep 28 #Python
详解scrapy内置中间件的顺序
Sep 28 #Python
You might like
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
2013/05/07 PHP
图解找出PHP配置文件php.ini的路径的方法
2014/08/20 PHP
PHP中执行cmd命令的方法
2014/10/11 PHP
php计算到指定日期还有多少天的方法
2015/04/14 PHP
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
IE 下Enter提交表单存在重复提交问题的解决方法
2014/05/04 Javascript
什么是Node.js?Node.js详细介绍
2014/06/01 Javascript
javascript限制用户只能输汉字中文的方法
2014/11/20 Javascript
jQuery中eq()方法用法实例
2015/01/05 Javascript
jQuery热气球动画半透明背景的后台登录界面代码分享
2015/08/28 Javascript
JavaScript编程学习技巧汇总
2016/02/21 Javascript
Angular.js之作用域scope'@','=','&'实例详解
2017/02/28 Javascript
vue里面父组件修改子组件样式的方法
2018/02/03 Javascript
微信小程序canvas实现刮刮乐效果
2018/07/09 Javascript
jQuery实现网页拼图游戏
2020/04/22 jQuery
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
2019/11/24 Javascript
vue实现井字棋游戏
2020/09/29 Javascript
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[54:18]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS BO3 第一场 1月22日
2021/03/11 DOTA
python对html代码进行escape编码的方法
2015/05/04 Python
Python实现比较两个文件夹中代码变化的方法
2015/07/10 Python
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
python读写文件write和flush的实现方式
2020/02/21 Python
python简单的三元一次方程求解实例
2020/04/02 Python
python 中的9个实用技巧,助你提高开发效率
2020/08/30 Python
Python常用模块函数代码汇总解析
2020/08/31 Python
Dillard’s百货官网:Dillards.com
2018/05/26 全球购物
Linux操作面试题
2012/05/16 面试题
采购意向书范本
2014/03/31 职场文书
中秋客户感谢信
2015/01/22 职场文书
2015年世界无烟日演讲稿
2015/03/18 职场文书
博士生专家推荐信
2015/03/25 职场文书
2017年寒假少先队活动总结
2016/04/06 职场文书
生鲜超市—未来中国最具有潜力零售业态
2019/08/02 职场文书