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计算字符宽度的方法
Jun 14 Python
python中文分词,使用结巴分词对python进行分词(实例讲解)
Nov 14 Python
python遍历一个目录,输出所有的文件名的实例
Apr 23 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
May 16 Python
Python实现的远程登录windows系统功能示例
Jun 21 Python
python迭代dict的key和value的方法
Jul 06 Python
python opencv旋转图像(保持图像不被裁减)
Jul 26 Python
Python Flask框架模板操作实例分析
May 03 Python
python自动发微信监控报警
Sep 06 Python
python3让print输出不换行的方法
Aug 24 Python
浅析Python requests 模块
Oct 09 Python
详解Python自动化之文件自动化处理
Jun 21 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
浅析Mysql 数据回滚错误的解决方法
2013/08/05 PHP
php json转换成数组形式代码分享
2014/11/10 PHP
javascript与CSS复习(三)
2010/06/29 Javascript
JavaScript类和继承 prototype属性
2010/09/03 Javascript
JavaScript下利用fso判断文件是否存在的代码
2010/12/11 Javascript
TBCompressor js代码压缩
2011/01/05 Javascript
javascript学习笔记(六) Date 日期类型
2012/06/19 Javascript
javascript获得当前的信息的一些常用命令
2015/02/25 Javascript
javascript基础知识分享之类与函数化
2016/02/13 Javascript
JS实现为排序好的字符串找出重复行的方法
2016/03/02 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
JS如何判断浏览器类型和详细区分IE各版本浏览器
2017/03/04 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
微信小程序 配置顶部导航条标题颜色的实现方法
2017/09/20 Javascript
js input输入百分号保存数据库失败的解决方法
2018/05/26 Javascript
Vue请求JSON Server服务器数据的实现方法
2018/11/02 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
JS实现iframe中子父页面跨域通讯的方法分析
2020/03/10 Javascript
ant-design-vue按需加载的坑的解决
2020/05/14 Javascript
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
python批量下载图片的三种方法
2013/04/22 Python
Python实现通讯录功能
2018/02/22 Python
Django 实现下载文件功能的示例
2018/03/06 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
2018/07/09 Python
python读取word文档,插入mysql数据库的示例代码
2018/11/07 Python
Python 3.x基于Xml数据的Http请求方法
2018/12/28 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
Python使用pyexecjs代码案例解析
2020/07/13 Python
纯CSS实现菜单、导航栏的3D翻转动画效果
2014/04/23 HTML / CSS
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
美国婴儿和儿童服装购物网站:PatPat
2020/10/01 全球购物
自荐书范文范例
2014/02/13 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
2015年119消防宣传日活动总结
2015/03/24 职场文书
焦裕禄观后感
2015/06/03 职场文书
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android