介绍:
使用 shell 获取当地天气,并调用企业微信机器人发送当天天气情况。
一、新建创建机器人,获取 webhook 地址
- 准备一个企业微信群,并右键选择「添加群机器人」
- 选择创建群机器人
- 填写名称后确定,会生成对应的 webhook
二、编写 shell 脚本,获取天气情况
1. 调用天气情况 API
天气 API (需要注册后才能使用)
注册后在用户中心可以查看 APPID 和 APPSecret
# 在终端输入该命令可以测试下
curl -s https://www.yiketianqi.com/free/day\?appid\=[替换自己的appid]\&appsecret\=[替换自己的密钥]\&unescape\=1\&cityid\=[城市 ID]
参数名 | 是否必填 | 类型 | 说明 | 备注 |
---|---|---|---|---|
appid | 是 | string | 用户appid | 注册开发账号 |
appsecret | 是 | string | 用户appsecret | |
cityid | 否 | string | 城市 ID | 城市 id 参考 |
city | 否 | string | 城市名称 | 不要带市和区, 支持市区县, 不支持乡镇级别; 如: 青岛、铁西 |
更多请查看 天气 API
响应 JSON
{
# 城市 ID
"cityid":"101120101",
# 城市名称
"city":"济南",
# 更新时间
"update_time":"20:55",
# 天气
"wea":"晴",
# 天气 icon
"wea_img":"qing",
# 实时温度
"tem":"11",
# 最高气温
"tem_day":"17",
# 最低气温
"tem_night":"7",
# 风向
"win":"东南风 ",
# 风力
"win_speed":"1级",
# 风速
"win_meter":"小于12km/h",
# 空气质量
"air":"73"
}
2. json 返回值解析方法
- 使用专门的Json解析库: jq - Command-line JSON processor
- 安装,使用系统的包管理器:
yum install jq
- 使用
curl -s https://www.yiketianqi.com/free/day\?appid\=[替换自己的appid]\&appsecret\=[替换自己的密钥]\&unescape\=1\&cityid\=[城市 ID] | jq
- 取对应值
| jq -r ‘.[key]’
curl -s https://www.yiketianqi.com/free/day\?appid\=[替换自己的appid]\&appsecret\=[替换自己的密钥]\&unescape\=1\&cityid\=[城市 ID] | jq -r '.wea'
3. shell 脚本思路
- 将 curl 获取天气结果返回值赋值给变量
RESULT=$(curl -s https://www.yiketianqi.com/free/day\?appid\=[替换自己的appid]\&appsecret\=[替换自己的密钥]\&unescape\=1\&cityid\=[城市 ID])
- 使用 jq 获取自己需要的天气信息
# 输出天气情况
WEATHER=$(echo $RESULT | jq -r '.wea')
# 输出温度 e.g:3➖-7
TEMP=$(echo $RESULT | jq -r '.tem_day')"➖"$(echo $RESULT | jq -r '.tem_night')
# 输出风向和风力 西南风,1级
WIN=$(echo $RESULT | jq -r '.win')","$(echo $RESULT | jq -r '.win_speed')
# 输出空气质量
AIR=$(echo $RESULT | jq -r '.air')
- 使用 curl 推送消息给微信群
curl '你的 webhook' \-H 'Content-Type: application/json' \-d "{\"msgtype\":\"markdown\",\"markdown\":{\"content\": \" 具体信息\"}}"
4. 完整 shell 脚本
RESULT=$(curl -s https://www.yiketianqi.com/free/day\?appid\=[替换自己的appid]\&appsecret\=[替换自己的密钥]\&unescape\=1\&cityid\=[城市 ID])
# 输出天气情况
WEATHER=$(echo $RESULT | jq -r '.wea')
TEMP=$(echo $RESULT | jq -r '.tem_day')"➖"$(echo $RESULT | jq -r '.tem_night')
WIN=$(echo $RESULT | jq -r '.win')","$(echo $RESULT | jq -r '.win_speed')
AIR=$(echo $RESULT | jq -r '.air')
#这里做了些天气判断,根据情况输出不同的信息
if [ $WEATHER == "晴" ] ; then
INFO='今日天气:'$WEATHER'☀️ ,今天有阳光,午休时间可以去散散步~'
elif [ $WEATHER == "云" ] || [ $WEATHER == "多云" ];
then
INFO='今日天气:'$WEATHER'☁️ ,多出门呼吸新鲜空气哟~'
elif [ $WEATHER == "阴" ] || [ $WEATHER == "多云转阴" ];
then
INFO='今日天气:'$WEATHER'⛅ ,今天是阴天,但心情不要是阴天'
elif [ $WEATHER == "雨" ] || [ $WEATHER == "小雨" ] || [ $WEATHER == "中雨" ] || [ $WEATHER=="大雨"];
then
INFO='今日天气:'$WEATHER'🌧️ ,今天有雨,记得带伞'
else
INFO='今日天气:'$WEATHER'⭐,新的一天开始了'
fi
# 格式可用 text 和 markdown
curl '自己的 webhook' \-H 'Content-Type: application/json' \-d "{\"msgtype\":\"markdown\",\"markdown\":{\"content\": \"$INFO \\n >温度: $TEMP \\n >风力: $WIN \\n >空气质量: $AIR\"}}"
三、crontab 定时执行
- 写定时任务命令行
crontab -e
全局打开定时任务sudo crontab -e
- 查看所有定时任务
crontab -l
- crontab 格式:
* * * * * command to execute
│ │ │ │ │
│ │ │ │ └─── 一周的星期几 (0 - 6) (0 - 6 周天到周六, 0、和 7 是星期天)
│ │ │ └──────── 月 (1 - 12)
│ │ └───────────── 天 (1 - 31)
│ └────────────────── 小时 (0 - 23)
└─────────────────────── 分钟 (0 - 59)
- 每天十点执行汇报天气
0 10 * * * cd ~ && ./test.sh
# 分 时 天 月 周 定位到 shell 脚本位置 && 执行 shell 脚本
四、输出展示
今日天气:晴☀️ ,今天有阳光,午休时间可以去散散步~
温度: 4➖-8
风力: 西南风,3级
空气质量: 20
五、遇到的问题
- crontab 不执行
可能是因为,shell 脚本权限不足
chmod u+x [ shell 脚本 ]
后续有其他问题再做补充