Files
claude-code/weather_example.py
abel533andCopilot 9f4023bdf0 refactor: apply BaseSlashCommand to all 54 command implementations
- implements SlashCommand -> extends BaseSlashCommand (all 54 files)
- Replace CommandUtils.parseArgs/args null checks -> args(args)
- Replace agentLoop null checks -> requireAgentLoop(context)/noSession()
- Replace context.agentLoop().getToolContext() -> toolCtx(context)
- Replace CommandUtils.success/error/header/subtitle/warning/info -> instance methods
- Remove unused CommandUtils/AnsiStyle imports where applicable
- 87 tests passing, zero compilation errors

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-05 13:16:55 +08:00

171 lines
5.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
使用OpenWeatherMap API查询天气的示例代码
需要先注册获取API密钥:https://openweathermap.org/api
"""
import requests
import json
import sys
def get_weather_by_city(city_name, api_key, units="metric"):
"""
根据城市名称查询天气
Args:
city_name: 城市名称(如:"Beijing"
api_key: OpenWeatherMap API密钥
units: 温度单位,"metric"为摄氏度,"imperial"为华氏度
Returns:
天气数据的字典
"""
base_url = "http://api.openweathermap.org/data/2.5/weather"
params = {
"q": city_name,
"appid": api_key,
"units": units,
"lang": "zh_cn" # 中文返回
}
try:
response = requests.get(base_url, params=params, timeout=10)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print(f"请求错误: {e}")
return None
except json.JSONDecodeError as e:
print(f"JSON解析错误: {e}")
return None
def get_weather_by_coords(lat, lon, api_key, units="metric"):
"""
根据经纬度坐标查询天气
Args:
lat: 纬度
lon: 经度
api_key: OpenWeatherMap API密钥
units: 温度单位
Returns:
天气数据的字典
"""
base_url = "http://api.openweathermap.org/data/2.5/weather"
params = {
"lat": lat,
"lon": lon,
"appid": api_key,
"units": units,
"lang": "zh_cn"
}
try:
response = requests.get(base_url, params=params, timeout=10)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print(f"请求错误: {e}")
return None
except json.JSONDecodeError as e:
print(f"JSON解析错误: {e}")
return None
def display_weather(weather_data):
"""
显示天气信息
Args:
weather_data: 天气数据字典
"""
if not weather_data or "cod" in weather_data and weather_data["cod"] != 200:
print("无法获取天气数据")
if weather_data and "message" in weather_data:
print(f"错误信息: {weather_data['message']}")
return
print("\n=== 天气信息 ===")
print(f"城市: {weather_data.get('name', '未知')}")
if "sys" in weather_data:
country = weather_data["sys"].get("country", "")
print(f"国家: {country}")
if "main" in weather_data:
main = weather_data["main"]
print(f"温度: {main.get('temp', '未知')}°C")
print(f"体感温度: {main.get('feels_like', '未知')}°C")
print(f"最低温度: {main.get('temp_min', '未知')}°C")
print(f"最高温度: {main.get('temp_max', '未知')}°C")
print(f"湿度: {main.get('humidity', '未知')}%")
print(f"气压: {main.get('pressure', '未知')} hPa")
if "weather" in weather_data and len(weather_data["weather"]) > 0:
weather = weather_data["weather"][0]
print(f"天气状况: {weather.get('description', '未知')}")
print(f"天气图标: http://openweathermap.org/img/wn/{weather.get('icon', '')}@2x.png")
if "wind" in weather_data:
wind = weather_data["wind"]
print(f"风速: {wind.get('speed', '未知')} m/s")
if "deg" in wind:
print(f"风向: {wind.get('deg', '未知')}°")
if "clouds" in weather_data:
print(f"云量: {weather_data['clouds'].get('all', '未知')}%")
if "visibility" in weather_data:
visibility = weather_data["visibility"]
if visibility >= 1000:
print(f"能见度: {visibility/1000:.1f} km")
else:
print(f"能见度: {visibility} m")
if "dt" in weather_data:
from datetime import datetime
dt = datetime.fromtimestamp(weather_data["dt"])
print(f"数据时间: {dt.strftime('%Y-%m-%d %H:%M:%S')}")
if "timezone" in weather_data:
offset = weather_data["timezone"] / 3600
print(f"时区: UTC{offset:+g}")
def main():
"""
主函数:演示如何使用API
"""
print("OpenWeatherMap API 天气查询示例")
print("=" * 40)
# 您需要在这里填写您的API密钥
API_KEY = "YOUR_API_KEY_HERE" # 请替换为您的实际API密钥
if API_KEY == "YOUR_API_KEY_HERE":
print("\n⚠️ 请先注册OpenWeatherMap并获取API密钥:")
print(" https://openweathermap.org/api")
print("\n注册步骤:")
print("1. 访问 https://openweathermap.org/api")
print("2. 点击 'Subscribe' 或 'Sign Up'")
print("3. 注册免费账户(Current Weather Data API 免费套餐每天可调用60次)")
print("4. 在控制台获取您的API密钥")
print("\n获取API密钥后,请替换代码中的 'YOUR_API_KEY_HERE'")
return
# 示例:查询北京的天气
print("\n示例1:查询北京天气")
weather_data = get_weather_by_city("Beijing", API_KEY)
if weather_data:
display_weather(weather_data)
# 示例:使用经纬度查询(纽约的坐标)
print("\n" + "=" * 40)
print("示例2:使用经纬度查询纽约天气")
weather_data = get_weather_by_coords(40.7128, -74.0060, API_KEY)
if weather_data:
display_weather(weather_data)
if __name__ == "__main__":
main()