Install
openclaw skills install @thcjp/weather-toolkit-freeopenclaw skills install @thcjp/weather-toolkit-free基于 wttr.in 与 Open-Meteo 两大免费公开服务的天气查询工具包,无需API Key,适合个人用户在命令行或脚本中快速获取天气信息。
本工具包整合两个免费天气数据源:wttr.in(主要,支持中文与多种格式)和 Open-Meteo(备选,JSON结构化输出),无需注册与API Key即可使用。支持当前天气查询、天气预报、多格式输出与单位切换,适合个人出行规划与脚本集成。
| 能力 | 免费版 | 说明 |
|---|---|---|
| 当前天气查询 | 支持 | 一行命令获取 |
| 天气预报 | 支持 | 3天预报 |
| 紧凑格式输出 | 支持 | 适合脚本解析 |
| 完整格式输出 | 支持 | 含详细图表 |
| PNG图片输出 | 支持 | 天气图导出 |
| JSON结构化数据 | 支持 | Open-Meteo源 |
| 单位切换 | 支持 | 公制/美制 |
| 历史天气查询 | 不支持 | 需PRO版 |
| 多城市批量查询 | 不支持 | 需PRO版 |
| 天气预警推送 | 不支持 | 需PRO版 |
| 自定义数据源 | 不支持 | 需PRO版 |
用input_params参数进行配置。
输入: 用户提供核心功能执行所需的指令和必要参数。 处理: 解析核心功能执行的输入参数,完成核心逻辑,返回结构化响应。 输出: 返回核心功能执行的响应数据,包含状态码、结果和日志。
input_params参数,支持创建/查询/导出操作用config_options参数进行配置。
输入: 用户提供参数配置与调用所需的指令和必要参数。 处理: 解析参数配置与调用的输入参数,完成核心逻辑,返回结构化响应。 输出: 返回参数配置与调用的响应数据,包含状态码、结果和日志。
config_options参数,支持修改/重置/导入操作用output_format参数进行配置。
输入: 用户提供结果处理与输出所需的指令和必要参数。 处理: 解析结果处理与输出的输入参数,完成核心逻辑,返回结构化响应。 输出: 返回结果处理与输出的响应数据,包含状态码、结果和日志。
output_format参数,支持导出/保存/转换操作
能力覆盖范围:本skill的核心能力覆盖以下场景关键词:wttr、的免费天气查询、API、Key、支持当前天气与预、面向个人用户的免、费天气查询工具包、即可获取当前天气、与预报、Use、when、需要数据库操作、SQL、数据存储管理时使、不适用于数据库架、构设计决策、适用于独立开发者、企业团队和自动化、工作流场景等。这些关键词对应description中声明的使用场景,均已在上述能力点中提供对应的操作支持。# 最简洁的一行查询
curl -s "wttr.in/Beijing?format=3"
# ...
# 示例
# ...
# 紧凑格式(位置+天气+温度+湿度+风速)
curl -s "wttr.in/Beijing?format=%l:+%c+%t+%h+%w"
# ...
# 完整预报(中文显示)
curl -s "wttr.in/Beijing?lang=zh&T"
# ...
# 仅查看当天
curl -s "wttr.in/Beijing?1&lang=zh"
# ...
# 仅查看当前状态
curl -s "wttr.in/Beijing?0&lang=zh"
# Python脚本集成Open-Meteo JSON数据
import urllib.request
import json
# ...
def get_weather(lat, lon):
"""获取指定坐标的当前天气"""
url = (
f"https://api.open-meteo.com/v1/forecast"
f"?latitude={lat}&longitude={lon}¤t_weather=true"
)
with urllib.request.urlopen(url) as response:
data = json.loads(response.read())
return data["current_weather"]
# ...
# 北京坐标查询示例
weather = get_weather(39.9, 116.4)
print(f"温度: {weather['temperature']}°C")
print(f"风速: {weather['windspeed']} km/h")
print(f"风向: {weather['winddirection']}°")
print(f"天气代码: {weather['weathercode']}")
# 导出天气PNG图片
curl -s "wttr.in/Shanghai.png" -o /tmp/weather_shanghai.png
# ...
# 使用机场代码查询
curl -s "wttr.in/JFK?format=3"
# ...
# URL编码空格(多词城市名)
curl -s "wttr.in/New+York?format=3"
# ...
# 切换单位制式
curl -s "wttr.in/London?m&format=3" # 公制(默认)
curl -s "wttr.in/London?u&format=3" # 美制
# ...
# wttr.in 格式代码速查:
# %c - 天气状况图标
# %t - 温度
# %h - 湿度
# %w - 风速
# %l - 位置
# %m - 月相
curl(Windows/macOS/Linux默认自带)# 免费版天气查询配置(环境变量)
export WEATHER_DEFAULT_SOURCE="wttr" # 默认数据源: wttr 或 open-meteo
export WEATHER_DEFAULT_LANG="zh" # 默认语言
export WEATHER_DEFAULT_UNIT="m" # 默认单位: m(公制) 或 u(美制)
export WEATHER_DEFAULT_FORMAT="3" # 默认输出格式
# ...
# 常用城市坐标配置(用于Open-Meteo)
# 城市: 纬度 经度
# 北京: 39.9 116.4
# 上海: 31.2 121.5
# 广州: 23.1 113.3
# 深圳: 22.5 114.1
# 成都: 30.6 104.1
# 香港: 22.3 114.2
# 台北: 25.0 121.5
# 东京: 35.7 139.7
# 首尔: 37.6 127.0
# 新加坡: 1.4 103.8
+ 或 %20 编码空格| 序号 | 错误场景 | 原因 | 处理方式 | 优先级 |
|---|---|---|---|---|
| 1 | 输入参数缺失 | 用户未提供必要参数 | 提示用户提供所需参数后执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令 | P0 |
| 2 | 执行超时 | 处理时间过长 | 检查输入数据量,分批处理 | P1 |
| 3 | 输出格式错误 | 结果不符合预期格式 | 检查output_format参数配置 | P1 |
完全免费,无需注册与API Key。wttr.in 与 Open-Meteo 均为公开免费服务。高频请求(每分钟数十次)可能被限流,正常使用不会触发。
几乎所有有人居住的城市都支持。wttr.in 支持城市名、机场代码查询;Open-Meteo 通过经纬度查询,覆盖全球。
免费版不支持历史天气查询。如需历史数据(如过去30天的天气),请使用PRO版本。
# 错误处理
#!/bin/bash
CITY=${1:-Beijing}
# ...
# 主数据源
result=$(curl -s --max-time 5 "wttr.in/$CITY?format=3" 2>/dev/null)
if [ -n "$result" ] && [ "$result" != *"Unknown"* ]; then
echo "$result"
exit 0
fi
# ...
# 备选数据源
echo "wttr.in 不可用,切换到 Open-Meteo..."
curl -s --max-time 5 "https://api.open-meteo.com/v1/forecast?latitude=39.9&longitude=116.4¤t_weather=true" 2>/dev/null | python -c "
import sys, json
try:
data = json.load(sys.stdin)
w = data['current_weather']
print(f\"{w['temperature']}°C, 风速{w['windspeed']}km/h\")
except:
print('天气查询失败,请稍后重试')
"
# Open-Meteo 天气代码对照表
WEATHER_CODES = {
0: "晴朗",
1: "大致晴朗", 2: "局部多云", 3: "阴天",
45: "雾", 48: "雾凇",
51: "小毛毛雨", 53: "毛毛雨", 55: "大毛毛雨",
61: "小雨", 63: "中雨", 65: "大雨",
71: "小雪", 73: "中雪", 75: "大雪",
77: "冰粒",
80: "阵雨", 81: "中阵雨", 82: "大阵雨",
85: "阵雪", 86: "大阵雪",
95: "雷暴", 96: "雷暴冰雹", 99: "强雷暴冰雹"
}
# ...
def describe_weather(code):
return WEATHER_CODES.get(code, "未知天气")
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| LLM API | API | 必需 | 由Agent内置LLM提供 |
| wttr.in | 公开API | 可选 | 免费免Key,主要数据源 |
| Open-Meteo | 公开API | 可选 | 免费免Key,备选数据源 |
| curl | 系统工具 | 推荐 | 系统自带,命令行查询 |
| Python 3.x | 运行时 | 可选 | 脚本集成时使用 |
https://wttr.in/{city},无需任何认证https://api.open-meteo.com/v1/forecast,无需任何认证输入:用户提供操作指令和必要参数
输出:返回执行结果,包含操作状态和输出数据
用户: 执行核心功能
Skill: 正在执行核心功能...
Skill: 执行完成,结果如下: 操作成功
{
"success": true,
"data": {
"result": "天气查询工具包免费版处理结果",
"execution_time": "0.5s",
"metadata": {
"version": "1.0",
"processor": "weatherkit"
}
},
"execution_log": ["解析输入参数", "执行核心处理", "格式化输出结果"],
"error": null
}