python 企业微信群机器人_python生成折线图并调用企业微信群机器人发送图片消息...
利用企業(yè)微信群機(jī)器人可以推送三種類型的消息,文本信息、markdown格式、圖文消息。
前面寫過(guò)文本消息、markdown格式文本消息的推送,公司小伙伴覺(jué)得如果能把最近的業(yè)績(jī)數(shù)據(jù)生成曲線圖發(fā)送到群里,就更直觀了。這當(dāng)然也難不到phthon,要知道python在科學(xué)計(jì)算和圖表生成方面可是很強(qiáng)的。
企業(yè)微信群機(jī)器人發(fā)送圖片消息的格式如下:企業(yè)微信群機(jī)器人接口說(shuō)明
圖片消息是以base64編碼方式發(fā)送的,需要生成圖片的base64編碼和文件的md5值,所以這個(gè)功能中需要用到python的幾個(gè)庫(kù):
import time # 用于取當(dāng)前時(shí)間,生成圖片文件名用的
import pymssql # 連接數(shù)據(jù)庫(kù)的操作
import requests # 請(qǐng)求接口
import matplotlib.pyplot as plt # 生成圖表
import hashlib # 生成圖片文件的md5
import os # 文件操作
import base64 # 生成圖片文件的base64編碼
看上去并不復(fù)雜的功能,需要用到以上7個(gè)庫(kù),涉及的知識(shí)內(nèi)容還是有點(diǎn)多的,具體實(shí)現(xiàn)的程序流程如下:程序流程
最后實(shí)現(xiàn)的效果如下(我只做了一個(gè)簡(jiǎn)單的折線圖,要生成其它圖形也是可以的,原理一樣,舉一反三吧):生成折線圖并自動(dòng)發(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') # 這里要說(shuō)明編碼,否則不成功
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ā)送的測(cè)試信息,請(qǐng)忽略!"
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ù)庫(kù)連接配置
config_dict = {
'user': '***',
'password': '******',
'host': '******',
'database': '******'
}
def conn():
connect = pymssql.connect(**config_dict)
if connect:
print("connect success!!!")
return connect
else:
print("連接失敗!請(qǐng)檢查配置信息!")
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=*******-****-****-****-******" # 群機(jī)器人地址
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)
# 設(shè)置畫布大小
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) # 標(biāo)記點(diǎn)
# 設(shè)置數(shù)字標(biāo)簽
for a, b in zip(x_data, y_data):
plt.text(a, b, b, ha='center', va='bottom', fontsize=14)
# 取當(dāng)前時(shí)間為文件名
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 = "### 最近七天市場(chǎng)業(yè)績(jī):\n"
for i in range(len(resultdata)):
out_mk_msg = out_mk_msg + r">日期:%s , 業(yè)績(jī):%d , 店數(shù):%s , 新會(huì)員:%s , 老會(huì)員:%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)
# 調(diào)用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)
代碼運(yùn)行環(huán)境為phthon3.8,如果把以上代碼設(shè)定為windows任務(wù)計(jì)劃,就可以實(shí)現(xiàn)定時(shí)自動(dòng)推送了。至此,企業(yè)微信群機(jī)器人的幾種調(diào)用方式,還差一種圖文消息沒(méi)有寫了:)
贈(zèng)人玫瑰、手留余香,如果本文對(duì)你有用,順手點(diǎn)個(gè)贊吧,謝謝!
總結(jié)
以上是生活随笔為你收集整理的python 企业微信群机器人_python生成折线图并调用企业微信群机器人发送图片消息...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 低代码开发平台+巡检管理系统解决方案
- 下一篇: pythonppt_python学习课件