本文实际上是企业微信机器人 + 天气预报,但拆开有点短,所以组合到一起了
# 企业微信机器人
# 数据和模块准备
请求头:head = {
'Content-Type': 'application/json', # 声明为 json 类型
}
数据 (负载):data = '''{
"msgtype": "markdown",
"markdown": {
"content": "暂时留空"
}'''
这里作者选用了 markdown 格式,markdown 语法可自行百度。
安装 requests 库:pip install requests
# 定义 post 函数
使用 requests 自带的 post 函数,如果数据内有中文会无法编码,需要包装函数
代码如下:import requests
def post(url, data=None, header=None):
try:
data = data.encode("utf-8")
res = requests.post(url, data=data, headers=header, verify=False)
return res
except BaseException as error:
print("post请求错误,错误原因:%s" % error)
raise error
# 准备运行用代码
res = post("yourwebhook&debug=1", | |
header=head, data=data) | |
print(res.json()) |
带上 &debug=1
参数是方便排查错误,如果你有信心可以不加
# 天气预报 API
本文选择和风天气 API 进行开发
本文为现在天气
# 发送 get 请求
请求内容不涉及中文,使用系统 get 函数即可
r = requests.get(yoururl) | |
r_dict = r.json() |
<yoururl> 格式如下:https://devapi.qweather.com/v7/weather/now?key=&location=
在 key 的等号后写入你的应用 key,location 查询见这篇文章
# 结果处理
返回格式应该如下{
"code": "200",
"updateTime": "2022-03-18T09:27+08:00",
"fxLink": "http://hfx.link/2bp1",
"now": {
"obsTime": "2022-03-18T09:13+08:00",
"temp": "2",
"feelsLike": "0",
"icon": "104",
"text": "阴",
"wind360": "135",
"windDir": "东南风",
"windScale": "1",
"windSpeed": "4",
"humidity": "76",
"precip": "0.0",
"pressure": "1017",
"vis": "8",
"cloud": "100",
"dew": "",-4""
},
"refer": {
"sources": [
"QWeather",
"NMC",
"ECMWF"
],
"license": [
"no commercial use"
]
}
}
有可能是单引号的,但不影响使用
上面的 r_dict
变量已经是 dict 类型了,无需 eval()
# 发送到企业微信
import requests | |
def post(url, data=None, file=None, header=None, cookie=None): | |
try: | |
# data = json.dumps(data) | |
data = data.encode("utf-8") | |
res = requests.post(url, data=data, files=file, headers=header, cookies=cookie, verify=False) | |
return res | |
except BaseException as e: | |
print("post请求错误,错误原因:%s" % e) | |
raise e | |
def get(url, data=None, file=None, header=None, cookie=None): | |
try: | |
# data = json.dumps(data) | |
data = data.encode("utf-8") | |
res = requests.get(url, data=data, files=file, headers=header, cookies=cookie, verify=False) | |
return res | |
except BaseException as e: | |
print("get请求错误,错误原因:%s" % e) | |
raise e | |
head = { | |
'Content-Type': 'application/json', | |
} | |
r = requests.get("https://devapi.qweather.com/v7/weather/now?key=&location=") | |
r_dict = r.json() | |
str1 = f""" | |
天气beta版 \n | |
>更新时间:**{r_dict["updateTime"]}** | |
>观测时间:**{r_dict["now"]["obsTime"]}** | |
>温度:**{r_dict["now"]["temp"]}**℃ | |
>体感温度:**{r_dict["now"]["feelsLike"]}**℃ | |
>天气:**{r_dict["now"]["text"]}** | |
>风向:**{r_dict["now"]["windDir"]}** | |
>风力:**{r_dict["now"]["windScale"]}**级 | |
>湿度:**{r_dict["now"]["humidity"]}**% | |
>降水量:**{r_dict["now"]["precip"]}**mm | |
""" | |
print(str1) | |
data = '''{ | |
"msgtype": "markdown", | |
"markdown": { | |
"content": "%s" | |
}'''% str1 | |
bot = post("https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=any&debug=1", | |
header=head, data=data) | |
print(bot.json()) |
这个就是完整代码了,建议使用 f-string 格式化,在 data 里必须使用 %
格式化
假如一切正常,运行完后会输出:{
"errcode": 0,
"errmsg": "ok. Warning: wrong json format. "
}
企业微信里的机器人应该会正确的发出消息不正确多半是排版错误