python 企业微信群机器人_python生成折线图并调用企业微信群机器人发送图片消息...
利用企業(yè)微信群機器人可以推送三種類型的消息,文本信息、markdown格式、圖文消息。
前面寫過文本消息、markdown格式文本消息的推送,公司小伙伴覺得如果能把最近的業(yè)績數(shù)據(jù)生成曲線圖發(fā)送到群里,就更直觀了。這當然也難不到phthon,要知道python在科學計算和圖表生成方面可是很強的。
企業(yè)微信群機器人發(fā)送圖片消息的格式如下:企業(yè)微信群機器人接口說明
圖片消息是以base64編碼方式發(fā)送的,需要生成圖片的base64編碼和文件的md5值,所以這個功能中需要用到python的幾個庫:
import time # 用于取當前時間,生成圖片文件名用的
import pymssql # 連接數(shù)據(jù)庫的操作
import requests # 請求接口
import matplotlib.pyplot as plt # 生成圖表
import hashlib # 生成圖片文件的md5
import os # 文件操作
import base64 # 生成圖片文件的base64編碼
看上去并不復雜的功能,需要用到以上7個庫,涉及的知識內容還是有點多的,具體實現(xiàn)的程序流程如下:程序流程
最后實現(xiàn)的效果如下(我只做了一個簡單的折線圖,要生成其它圖形也是可以的,原理一樣,舉一反三吧):生成折線圖并自動發(fā)送到群的效果
下面是奉上完整代碼:
# -*- 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函數(shù)
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()
# 發(fā)送消息函數(shù), msgtype定義:text 發(fā)送字符串消息,markdown 發(fā)送圖片消息,image 發(fā)送圖片消息, news 發(fā)送圖文消息
def postmsg(url, post_data, msgtype):
# sss = "這是一條用python發(fā)送的測試信息,請忽略!"
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 = '發(fā)送成功'
return result
else:
return 'Error'
def querySQL():
# 數(shù)據(jù)庫連接配置
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) # 銷售數(shù)據(jù)清單
# 刻度和序列值
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) # 標記點
# 設置數(shù)字標簽
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 = "### 最近七天市場業(yè)績:\n"
for i in range(len(resultdata)):
out_mk_msg = out_mk_msg + r">日期:%s , 業(yè)績:%d , 店數(shù):%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向接口提交數(shù)據(jù),分別提并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)
代碼運行環(huán)境為phthon3.8,如果把以上代碼設定為windows任務計劃,就可以實現(xiàn)定時自動推送了。至此,企業(yè)微信群機器人的幾種調用方式,還差一種圖文消息沒有寫了:)
贈人玫瑰、手留余香,如果本文對你有用,順手點個贊吧,謝謝!
總結
以上是生活随笔為你收集整理的python 企业微信群机器人_python生成折线图并调用企业微信群机器人发送图片消息...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 低代码开发平台+巡检管理系统解决方案
- 下一篇: pythonppt_python学习课件