Weather Query
Overview
查询全球任意城市的当前天气与未来多日预报。基于免费且无需 API 密钥的 Open-Meteo API,通过内置 Python 脚本一键完成"城市名 → 经纬度 → 天气数据 → 友好中文输出"的全流程。
When To Use
当出现以下任一情形时触发此技能:
- 用户直接询问某地天气:"北京今天天气怎么样?"、"东京下雨吗?"
- 用户询问温度或穿衣建议:"上海多少度?"、"去巴黎要带外套吗?"
- 用户询问降水或出行建议:"广州今天会下雨吗?"、"需要带伞吗?"
- 用户询问未来几天天气:"杭州未来一周天气如何?"
- 用户询问日出日落、风力、湿度等具体气象要素
How To Use
Quick Start
直接运行脚本查询,无需安装任何依赖(仅使用 Python 标准库):
python scripts/weather.py <城市名>
运行环境:使用受管理的 Python 解释器,路径为
C:\Users\zhang\.workbuddy\binaries\python\versions\3.13.12\python.exe
Common Usage Patterns
| 需求 | 命令 |
|---|---|
| 当前天气 + 3 天预报(默认) | python scripts/weather.py 北京 |
| 只看当前天气 | python scripts/weather.py 上海 --current |
| 查询未来 7 天预报 | python scripts/weather.py Tokyo --days 7 |
| 查询英文城市名 | python scripts/weather.py "New York" |
| 输出原始 JSON(调试用) | python scripts/weather.py Paris --json |
Parameters
<city>(必填):城市名,支持中文或英文,如北京、Tokyo、New York、深圳--days N:预报天数,范围 1-16,默认 3--current:只显示当前天气,不显示多日预报--json:输出原始 JSON 数据,用于调试或二次处理
Output Format
默认输出为格式化的中文文本,包含:
- 当前天气块:天气状况、温度、体感温度、湿度、风向风速、降水量、气压
- 多日预报表:日期、天气、温度区间、降水、风速
- 日出日落:当日日出与日落时间
示例输出:
☀️ 北京, 中国 · 当前天气(白天)
┌──────────────────────────────
│ 天气状况:晴
│ 温度: 22.4°C(体感 21.8°C)
│ 湿度: 45%
│ 风: 西北风 12 km/h
│ 降水: 0.0 mm
│ 气压: 1018.2 hPa
└──────────────────────────────
📅 未来 3 天预报:
┌────────────┬──────┬───────────┬───────┬────────┐
│ 日期 │ 天气 │ 温度区间 │ 降水 │ 风速 │
├────────────┼──────┼───────────┼───────┼────────┤
│ 2026-07-18 │ ☀️晴 │ 18~28°C │ — │ 15km/h │
│ ...
└────────────┴──────┴───────────┴───────┴────────┘
🌅 今日日出:05:12 🌇 日落:19:38
Workflow
执行天气查询时,按以下步骤操作:
- 识别城市:从用户请求中提取目标城市名。若用户只说"明天天气"未指定城市,需先询问用户所在城市。
- 确定需求:判断用户是想看当前天气还是多日预报。默认返回当前天气 + 3 天预报;若用户明确说"未来一周",使用
--days 7。 - 运行脚本:使用受管理的 Python 解释器执行
scripts/weather.py,传入城市名与相应参数。 - 解读结果:将脚本输出转述给用户。若用户有具体问题(如"要带伞吗"),结合降水数据给出明确建议;若问穿衣,结合温度与体感温度给出建议。
- 异常处理:
- 若返回"找不到城市",提示用户使用更标准的城市名,或尝试英文/拼音。
- 若网络请求失败,建议用户稍后重试,或改用curl wttr.in/<城市>作为备选方案。
Resources
scripts/weather.py
核心查询脚本,仅依赖 Python 3 标准库(urllib、json、argparse),无需安装第三方包。
功能:
- 调用 Open-Meteo Geocoding API 将城市名转为经纬度
- 调用 Open-Meteo Forecast API 获取当前天气与多日预报
- 将 WMO 天气代码映射为中文描述与 emoji
- 将风向角度转换为中文方位(北、东北、东...)
- 格式化输出为表格化的中文文本
references/api_reference.md
Open-Meteo API 的详细参考文档,包含:
- 地理编码 API 的参数与返回字段
- 预报 API 的可用参数与字段
- 完整的 WMO 天气代码对照表
- 调用示例与速率限制说明
当需要扩展脚本功能、添加新的气象要素,或排查字段问题时参考此文档。
Notes
- 免费无密钥:Open-Meteo 提供免费的非商业用途 API,每天最多 10000 次请求,无需注册或 API 密钥。
- 中文城市名支持:地理编码 API 的
language=zh参数会返回中文名称,且能识别中文城市名输入。 - 时区处理:预报 API 使用
timezone=auto,返回的时间为当地时间。 - 温度单位:默认摄氏度。如需华氏度,可修改脚本中的 API 参数添加
temperature_unit=fahrenheit。