by12 发表于 2024-5-28 17:08

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:}

hack78 发表于 2024-5-30 09:10

换成企业微信版本
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)

kun5815 发表于 2024-5-28 19:48

感谢分享

yzmb8456 发表于 2024-5-28 19:55

感谢楼主分享

laustar 发表于 2024-5-28 21:02

感谢楼主分享

yuzilin 发表于 2024-5-28 21:57

感谢分享!

meder 发表于 2024-5-28 22:36

感谢楼主分享

hjsen 发表于 2024-5-28 23:16

icode_isky 发表于 2024-5-29 08:51

楼主你好,今天早上发现钉钉机器人无法获取正确的天气信息,昨天晚上手动执行的时候还有天气信息。
https://pic.rmb.bdstatic.com/bjh/240529/88becb75e1b4c0c0e6474b06975e42b55989.png

xiaofu666 发表于 2024-5-29 09:10

支持顶一下

by12 发表于 2024-5-29 11:14

icode_isky 发表于 2024-5-29 08:51
楼主你好,今天早上发现钉钉机器人无法获取正确的天气信息,昨天晚上手动执行的时候还有天气信息。

那需要你检查一下计划任务是否设置正确。设置完你先执行一下看看效果。
页: [1] 2 3
查看完整版本: Python写的一个钉钉机器人城市天气脚本