企业微信群机器人每日天气提醒(shell + crontab)

一、新建创建机器人,获取 webhook 地址

二、编写 shell 脚本,获取天气情况

1. 调用天气情况 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 city 否 string 城市名称 不要带市和区, 支持市区县, 不支持乡镇级别; 如: 青岛、铁西

更多请查看

响应 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 脚本思路

  1. 将 curl 获取天气结果返回值赋值给变量
RESULT=$(curl -s https://www.yiketianqi.com/free/day?appid=[替换自己的appid]&appsecret=[替换自己的密钥]&unescape=1&cityid=[城市 ID])
  1. 使用 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 你的 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 脚本 ]

后续有其他问题再做补充

经验分享 程序员 微信小程序 职场和发展