项目中需要通过 python 实现由企业微信接口发送通知的功能,由于实现过程中发现了一些小问题,因此将各种情况总结一下。
import requests
import json
def request_token():
param = "{\n\t\"appkey\":\"appkey\",\n\t\"appsecret\":\"appsecret\"\n}"
headers_token = {
'Content-Type': "application/json",
'User-Agent': "agent_name"
}
response_token = requests.request("POST", url='url', headers=headers_token, data=param)
dict = json.loads(response_token.text)
token = dict['data']['token']
注意:
- appkey 和 appsecret 是请求 token 时的账号和密码。
- 代理 ‘User-Agent’ 可以根据实际情况选填,由于项目中如果不填则服务器拒绝访问,因此列入。
- ‘Content-Type’ 为 json格式,若更改为其他格式,则会返回 400。
- 由于项目中请求 token 返回的包含多个字段的字典类型结果,其中 data 包含 token 和 exp ,token 字段返回的是获取的token值,exp 字段返回该值的有效时间。不同封装库设置不同,返回的字段也不同,需根据实际情况判断。
- 在提取返回信息时需要用
json.loads
解码,可通过dict
提取返回结果中的 token 值。
import requests
def send_notice():
headers_port = {
'Authorization': token,
'User-Agent': "agent_name"
}
dict_data = {
'receiver': receiver,
'message': message
}
response = requests.request("POST", url='url', headers=headers_port, data=dict_data)
注意:
- headers_port 里,‘Authorization’ 为获取的 token值, ‘User-Agent’ 为代理名。
- dict_data 则是按照封装库要求填写的通知主体。
import json
def msg():
message['title'] = "邮件主题"
message['content'] = """
>事件日期:%(DATE)s
>事件内容:%(SCOPE)s
>
>**事件详情**
>%(CONTENT)s
""" % dict(
DATE=date,
SCOPE=scope,
CONTENT=content
)
message = json.dumps(message)
注意:
- ‘data’、‘scope’、‘content’ 均为外部传入的参数,可自行定义。
- message 主体支持 html类型,因此可以通过 html类型设置不同显示效果,突出通知重点。
- 封装库要求中明确 messge 内容为 json类型,因此最后需用
json.dumps
编码。