python 企业微信群机器人_python生成折线图并调用企业微信群机器人发送图片消息...

利用企业微信群机器人可以推送三种类型的消息,文本信息、markdown格式、图文消息。

前面写过文本消息、markdown格式文本消息的推送,公司小伙伴觉得如果能把最近的业绩数据生成曲线图发送到群里,就更直观了。这当然也难不到phthon,要知道python在科学计算和图表生成方面可是很强的。

企业微信群机器人发送图片消息的格式如下:企业微信群机器人接口说明

图片消息是以base64编码方式发送的,需要生成图片的base64编码和文件的md5值,所以这个功能中需要用到python的几个库:

import time # 用于取当前时间,生成图片文件名用的

import pymssql # 连接数据库的操作

import requests # 请求接口

import matplotlib.pyplot as plt # 生成图表

import hashlib # 生成图片文件的md5

import os # 文件操作

import base64 # 生成图片文件的base64编码

看上去并不复杂的功能,需要用到以上7个库,涉及的知识内容还是有点多的,具体实现的程序流程如下:程序流程

最后实现的效果如下(我只做了一个简单的折线图,要生成其它图形也是可以的,原理一样,举一反三吧):生成折线图并自动发送到群的效果

下面是奉上完整代码:

# -*- coding: utf-8 -*-

# s = '中文' # 注意这里的 str 是 str 类型的,而不是 unicode

# s.encode('gb2312')

import time

import pymssql

import requests

import matplotlib.pyplot as plt

import hashlib

import os

import base64

# 获取文件的Base64编码

def get_file_base64(filepath):

if not os.path.isfile(filepath):

return

with open(filepath, "rb") as f:

image = f.read()

image_base64 = str(base64.b64encode(image), encoding='utf-8') # 这里要说明编码,否则不成功

return image_base64

# 获取文件md5函数

def get_file_md5(filepath):

# 获取文件的md5

if not os.path.isfile(filepath):

return

myhash = hashlib.md5()

f = open(filepath, "rb")

while True:

b = f.read(8096)

if not b:

break

myhash.update(b)

f.close

# print(myhash.hexdigest())

return myhash.hexdigest()

# 发送消息函数, msgtype定义:text 发送字符串消息,markdown 发送图片消息,image 发送图片消息, news 发送图文消息

def postmsg(url, post_data, msgtype):

# sss = "这是一条用python发送的测试信息,请忽略!"

post_data = '{"msgtype" : "%s", "%s" : %s}' % (msgtype, msgtype, post_data)

# post_data = '{"msgtype": "markdown","markdown": {"content": "%s"}}' % sss

# print(post_data)

if url == '':

print('URL地址为空!')

else:

r = requests.post(url, data=post_data.encode())

rstr = r.json()

if r.status_code == 200 and 'error' not in rstr:

result = '发送成功'

return result

else:

return 'Error'

def querySQL():

# 数据库连接配置

config_dict = {

'user': '***',

'password': '******',

'host': '******',

'database': '******'

}

def conn():

connect = pymssql.connect(**config_dict)

if connect:

print("connect success!!!")

return connect

else:

print("连接失败!请检查配置信息!")

conn = conn()

cursor = conn.cursor()

sql = "select * from [TableName] order by [Fields]" # 编写SQL查询字符串

cursor.execute(sql)

col = cursor.description

resultdata = cursor.fetchall()

return resultdata, col

cursor.close()

conn.close()

if __name__ == '__main__':

url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=*******-****-****-****-******" # 群机器人地址

resultdata, col = querySQL()

# print(resultdata)

# print(col) 查询到的表的列名

datelist = []

for i in range(len(resultdata)):

datelist.append(resultdata[i][0])

# print(datelist)

saleslist = []

for j in range(len(resultdata)):

saleslist.append(int(resultdata[j][1]))

# print(saleslist) # 销售数据清单

# 刻度和序列值

x_data = datelist

y_data = saleslist

# plt.plot(x_data, y_data)

# 设置画布大小

plt.figure(figsize=(16, 8))

plt.title("The Recent 7 Days Sales")

plt.plot(x_data, y_data, label='金额', linewidth=3, color='black', marker='o', markerfacecolor='r',

markersize=10) # 标记点

# 设置数字标签

for a, b in zip(x_data, y_data):

plt.text(a, b, b, ha='center', va='bottom', fontsize=14)

# 取当前时间为文件名

pic_full_name = './' + time.strftime("%Y%m%d%H%M%S", time.localtime()) + '.jpg'

plt.savefig(pic_full_name)

pic_md5 = get_file_md5(pic_full_name)

pic_base64s = get_file_base64(pic_full_name)

# print(pic_md5)

# print(pic_base64s)

# plt.show() # 显示图表

out_mk_msg = "### 最近七天市场业绩:\n"

for i in range(len(resultdata)):

out_mk_msg = out_mk_msg + r">日期:%s , 业绩:%d , 店数:%s , 新会员:%s , 老会员:%s " % (

resultdata[i][0], resultdata[i][1], resultdata[i][2], resultdata[i][3], resultdata[i][4]) + "\n"

out_mk_msg = '{"content": "%s"}' % out_mk_msg

# print(out_mk_msg)

# 调用postmsg向接口提交数据,分别提并markdwon格式及图片格式消息

result = postmsg(url, out_mk_msg, "markdown")

# print(result)

out_pic_msg = '{"base64":"%s", "md5":"%s"}' % (pic_base64s, pic_md5)

result = postmsg(url, out_pic_msg, "image")

print(result)

代码运行环境为phthon3.8,如果把以上代码设定为windows任务计划,就可以实现定时自动推送了。至此,企业微信群机器人的几种调用方式,还差一种图文消息没有写了:)

赠人玫瑰、手留余香,如果本文对你有用,顺手点个赞吧,谢谢!

你可能感兴趣的:(python,企业微信群机器人)