Python写的一个钉钉机器人城市天气脚本
本帖最后由 by12 于 2024-5-29 11:55 编辑由于该脚本是存放在服务器上,所以想得知本地天气这个问题肯定不能从获取本机IP来实现,所以我使用的是获取城市名。
将城市名保存到city.txt里,例如我这里写的是杭州。
那么每次运行脚本,钉钉机器人就会获取杭州这个名字加天气情况反馈到群聊中。
用到的是心知天气的api,需要直接注册一个就行。反正免费的。
钉钉的机器人hook跟加签获取到后直接替换到链接上就行了。
我用的是宝塔的计划任务,定得每天早上8点执行,
看效果。
脚本下载就放下面啦,求点CB~{:1_937:}
-----------------------
二次修改;
经过反馈有时候会出现无法获取城市的问题提示:
未能获取到天气信息,请检查城市名称。
经过排查发现是API里面没有城市天气信息导致的。应该是吧。
如果修改一个具体的就没问题了。
现在代码支持直接查看调试内容了。
-,-上面泄露的展示的key地址已经改了,所以大家需要还是去申请自己的吧。
最新下载地址:
https://www.lanzouw.com/id9RP202i2id
求CB来一波{:1_923:} 换成企业微信版本
import requests
import time
import hmac
import hashlib
import base64
import json
def get_weather(city):
api_key = 'xxxxxxxx'# 替换为您的心知天气 API 密钥
url = f'https://api.seniverse.com/v3/weather/now.json?key={api_key}&location={city}&language=zh-Hans'
response = requests.get(url)
print(f"Requesting weather data with URL: {url}")
if response.status_code != 200:
print(f"Failed to get weather data: {response.status_code} - {response.text}")
return None
data = response.json()
if 'results' in data and data['results']:
weather_info = data['results']['now']
weather_desc = weather_info['text']
weather_icon = get_weather_icon(weather_desc)
temperature = weather_info['temperature']
return weather_desc, weather_icon, temperature
else:
print("No results found in weather data")
return None
def get_weather_forecast(city):
api_key = 'xxxxxxx'# 替换为您的心知天气 API 密钥
url = f'https://api.seniverse.com/v3/weather/daily.json?key={api_key}&location={city}&language=zh-Hans&days=3'
response = requests.get(url)
print(f"Requesting weather forecast data with URL: {url}")
if response.status_code != 200:
print(f"Failed to get weather forecast data: {response.status_code} - {response.text}")
return None
data = response.json()
if 'results' in data and data['results']:
forecasts = data['results']['daily']
return forecasts
else:
print("No results found in weather forecast data")
return None
def get_weather_icon(weather_desc):
if '晴' in weather_desc:
return '☀️'
elif '多云' in weather_desc:
return '☁️'
elif '雨' in weather_desc:
return '🌧️'
else:
return ''
def send_to_wechat(message, webhook_url):
headers = {'Content-Type': 'application/json'}
data = {
'msgtype': 'markdown',
'markdown': {
'content': message
}
}
response = requests.post(webhook_url, data=json.dumps(data), headers=headers)
if response.status_code == 200:
print("Message sent successfully to WeChat!")
else:
print(f"Failed to send message to WeChat: {response.status_code}")
# 直接指定城市名称
city = '北京'
# 从环境变量中获取企业微信机器人的 Webhook URL
webhook_url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxx'# 替换为您的企业微信机器人的 Webhook URL
# 获取天气信息
weather_data = get_weather(city)
forecasts = get_weather_forecast(city)
# 构建消息内容
if weather_data and forecasts:
weather_desc, weather_icon, temperature = weather_data
message = f"### 今日天气提醒\n\n城市:{city}\n天气:{weather_icon} {weather_desc}\n温度:{temperature}°C\n\n【未来3天天气预报】\n\n"
for forecast in forecasts:
date = forecast['date']
weather_desc = forecast['text_day']
temperature_high = forecast['high']
temperature_low = forecast['low']
message += f"{date}: {weather_desc}, 温度:{temperature_low}°C ~ {temperature_high}°C\n\n"
else:
message = "未能获取到天气信息,请检查城市名称。"
# 发送消息到企业微信机器人
send_to_wechat(message, webhook_url)
感谢分享 感谢楼主分享 感谢楼主分享
感谢分享!
感谢楼主分享 楼主你好,今天早上发现钉钉机器人无法获取正确的天气信息,昨天晚上手动执行的时候还有天气信息。
https://pic.rmb.bdstatic.com/bjh/240529/88becb75e1b4c0c0e6474b06975e42b55989.png
支持顶一下 icode_isky 发表于 2024-5-29 08:51
楼主你好,今天早上发现钉钉机器人无法获取正确的天气信息,昨天晚上手动执行的时候还有天气信息。
那需要你检查一下计划任务是否设置正确。设置完你先执行一下看看效果。