本文实际上是企业微信机器人+天气预报,但拆开有点短,所以组合到一起了
# 企业微信机器人
# 数据和模块准备
请求头:
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. "
}
企业微信里的机器人应该会正确的发出消息不正确多半是排版错误