發送文件到企業微信,可用於發送定時報告等內容。
文件名稱:wechat_send_file.py
#!/usr/bin/python3
#--coding: utf-8--
import os
import json
import urllib3
import sys
file_path = sys.argv[1] # 文件路徑
class WinxinApi(object):
def __init__(self,corpid,secret,agentid,touser):
self.secret = secret # 企業微信應用憑證
self.corpid = corpid # 企業微信id
self.agentid = agentid # 應用Agentid
self.touser = touser # 接收消息的userid
self.http = urllib3.PoolManager()
def __get_token(self):
'''token獲取'''
url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={}&corpsecret={}".format(self.corpid,self.secret)
r = self.http.request('GET', url)
req = r.data.decode("utf-8")
data = json.loads(req)
if data["errcode"] == 0:
return data['access_token']
else:
raise data["errmsg"]
def __upload_file(self,file_path,type='file'):
'''上傳臨時文件'''
if not os.path.exists(file_path):
raise ValueError("{},文件不存在".format(file_path))
file_name = file_path.split("\\")[-1]
token = self.__get_token()
with open(file_path,'rb') as f:
file_content = f.read()
files = {
'filefield': (file_name, file_content, 'text/plain')}
url = "https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token={}&type={}".format(token,type)
r = self.http.request('POST', url,fields=files)
req = r.data.decode("utf-8")
data = json.loads(req)
if data["errcode"] == 0:
return data['media_id']
else:
raise data["errmsg"]
def send_file_message(self,file_path):
token = self.__get_token()
media_id = self.__upload_file(file_path)
body = {
"agentid" : self.agentid, # agentid
"touser" : self.touser,
"msgtype" : "file", # 消息類型,此時固定為:file
"file" : {
"media_id" : media_id},# 文件id,可以調用上傳臨時素材接口獲取
"safe":0 # 表示是否是保密消息,0表示否,1表示是
}
url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={}".format(token)
bodyjson = json.dumps(body)
r = self.http.request('POST', url, body=bodyjson)
req = r.data.decode("utf-8")
data = json.loads(req)
if data["errcode"] == 0:
print("發送文件到企業微信成功")
else:
raise data["errmsg"]
wechat = WinxinApi("***corpid***","***secret***","***agentid***","***touser***")
wechat.send_file_message(file_path)
./wechat_send_file.py myfile.txt
# 如果執行時提示缺少urllib3:
File "./wechat_send_file.py", line 5, in <module>
import urllib3
ModuleNotFoundError: No module named 'urllib3'
# 解決辦法:
yum install -y python3-pip
pip3 install urllib3
— 結束 —