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 相关文章推荐
详解字典树Trie结构及其Python代码实现
Jun 03 Python
Python用 KNN 进行验证码识别的实现方法
Feb 06 Python
python logging日志模块以及多进程日志详解
Apr 18 Python
Python 实现「食行生鲜」签到领积分功能
Sep 26 Python
python清除字符串前后空格函数的方法
Oct 21 Python
详解Python二维数组与三维数组切片的方法
Jul 18 Python
python实现对服务器脚本敏感信息的加密解密功能
Aug 13 Python
Python 随机生成测试数据的模块:faker基本使用方法详解
Apr 09 Python
python缩进长度是否统一
Aug 02 Python
详解Python调用系统命令的六种方法
Jan 28 Python
Python读写Excel表格的方法
Mar 02 Python
Python中的datetime包与time包包和模块详情
Feb 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
thinkphp实现数组分页示例
2014/04/13 PHP
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
PHP PDOStatement::errorInfo讲解
2019/01/31 PHP
详解PHP神奇又有用的Trait
2019/03/25 PHP
document.all与WEB标准
2020/05/13 Javascript
用JQuery 实现的自定义对话框
2007/03/24 Javascript
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
js实现右下角可关闭最小化div(可用于展示推荐内容)
2013/06/24 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
JS连连看源码完美注释版(推荐)
2013/12/09 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
2015/11/20 Javascript
分享javascript计算时间差的示例代码
2020/03/19 Javascript
Jquery实现的简单轮播效果【附实例】
2016/04/19 Javascript
深入理解jQuery之事件移除
2016/06/02 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
2016/10/15 Javascript
js微信支付实现代码
2016/12/22 Javascript
JavaScript函数中的this四种绑定形式
2017/08/15 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
[00:47]DOTA2荣耀之路6:玩不了啦!
2018/05/30 DOTA
自己编程中遇到的Python错误和解决方法汇总整理
2015/06/03 Python
python使用MySQLdb访问mysql数据库的方法
2015/08/03 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
Python3实现飞机大战游戏
2020/04/24 Python
给Django Admin添加验证码和多次登录尝试限制的实现
2020/07/26 Python
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
说一下Linux下有关用户和组管理的命令
2016/01/04 面试题
行政经理的岗位职责
2013/11/23 职场文书
美德好少年事迹材料
2014/01/19 职场文书
女娲补天教学反思
2014/02/05 职场文书
高三政治教学反思
2014/02/06 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
接收函
2019/04/22 职场文书