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随机生成一个6位的验证码代码分享
Mar 24 Python
Python实现比较两个文件夹中代码变化的方法
Jul 10 Python
Python实现破解12306图片验证码的方法分析
Dec 29 Python
python使用xslt提取网页数据的方法
Feb 23 Python
python实现多进程代码示例
Oct 31 Python
python远程邮件控制电脑升级版
May 23 Python
使用Python计算玩彩票赢钱概率
Jun 26 Python
Flask配置Cors跨域的实现
Jul 12 Python
详解Python实现进度条的4种方式
Jan 15 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
Feb 27 Python
给Django Admin添加验证码和多次登录尝试限制的实现
Jul 26 Python
Python 创建TCP服务器的方法
Jul 28 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
用php过滤危险html代码的函数
2008/07/22 PHP
PHP下利用header()函数设置浏览器缓存的代码
2010/09/01 PHP
探讨PHP中OO之静态关键字以及类常量的详解
2013/06/07 PHP
深入PHP数据加密详解
2013/06/18 PHP
帝国CMS留言板回复后发送EMAIL通知客户
2015/07/06 PHP
举例讲解PHP面对对象编程的多态
2015/08/12 PHP
Yii2增删改查之查询 where参数详细介绍
2016/08/08 PHP
详解PHP5.6.30与Apache2.4.x配置
2017/06/02 PHP
Yii2框架自定义类统一处理url操作示例
2019/05/25 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
js函数使用技巧之 setTimeout(function(){},0)
2009/02/09 Javascript
用jquery实现学校的校历(asp.net+jquery ui 1.72)
2010/01/01 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
2015/03/17 Javascript
jQuery实现简单滚动动画效果
2016/04/07 Javascript
react.js CMS 删除功能的实现方法
2017/04/17 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
Node.js 进程平滑离场剖析小结
2019/01/24 Javascript
vue实现form表单与table表格的数据关联功能示例
2019/01/29 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
[13:56]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第一场
2018/04/06 DOTA
动态规划之矩阵连乘问题Python实现方法
2017/11/27 Python
Python3非对称加密算法RSA实例详解
2018/12/06 Python
python基于C/S模式实现聊天室功能
2019/01/09 Python
python使用PyQt5的简单方法
2019/02/27 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
2019/10/11 Python
wxPython实现文本框基础组件
2019/11/18 Python
关于tf.TFRecordReader()函数的用法解析
2020/02/17 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
Java中实现多态的机制
2015/08/09 面试题
什么是数据抽象
2016/11/26 面试题
人力资源专员自我评价怎么写
2013/09/19 职场文书
团购业务员岗位职责
2014/03/15 职场文书
党政领导班子群众路线对照检查材料思想汇报
2014/09/27 职场文书
党员评议思想汇报
2014/10/08 职场文书
查摆问题自查报告范文
2014/10/13 职场文书