OpenClaw Skills 开发指南:从零到上架 ClawHub

5 阅读1分钟

OpenClaw Skills 开发指南:从零到上架 ClawHub

OpenClaw Skills 是可复用的自动化能力单元。本文教你如何开发、测试、发布自己的 Skill,并上架 ClawHub 赚钱。

什么是 Skill?

Skill 是一个包含以下内容的目录:

my-skill/
├── SKILL.md          # 技能说明
├── scripts/          # 脚本文件
│   └── main.py
├── references/       # 参考文档
│   └── api-docs.md
└── templates/        # 模板文件
    └── email.html

创建第一个 Skill

1. 初始化目录

mkdir -p my-skill/{scripts,references,templates}
cd my-skill
touch SKILL.md scripts/main.py

2. 编写 SKILL.md

# 天气查询 Skill

## 描述
查询任意城市的实时天气和未来7天预报。

## 使用场景
- 每日天气提醒
- 旅行计划
- 农业气象

## 使用方法

### 基本用法
```bash
python scripts/main.py 北京

高级用法

python scripts/main.py 上海 --days 7 --format json

参数说明

参数类型必填说明
citystring城市名称
--daysint预报天数(1-7)
--formatstring输出格式(text/json)

输出示例

{
  "city": "北京",
  "temperature": 25,
  "condition": "晴",
  "humidity": 45,
  "forecast": [...]
}

依赖

  • Python 3.8+
  • requests

安装

pip install requests

### 3. 编写脚本

```python
#!/usr/bin/env python3
"""天气查询 Skill"""

import argparse
import json
import requests
from datetime import datetime

def get_weather(city: str, days: int = 1) -> dict:
    """获取天气数据"""
    # 使用 Open-Meteo API(免费,无需 Key)
    # 先获取城市坐标
    geo_url = f"https://geocoding-api.open-meteo.com/v1/search?name={city}"
    geo_response = requests.get(geo_url).json()
    
    if not geo_response.get("results"):
        return {"error": f"找不到城市:{city}"}
    
    lat = geo_response["results"][0]["latitude"]
    lon = geo_response["results"][0]["longitude"]
    
    # 获取天气
    weather_url = (
        f"https://api.open-meteo.com/v1/forecast?"
        f"latitude={lat}&longitude={lon}"
        f"&current=temperature_2m,relative_humidity_2m,weather_code"
        f"&daily=temperature_2m_max,temperature_2m_min,weather_code"
        f"&timezone=auto&forecast_days={days}"
    )
    
    response = requests.get(weather_url).json()
    
    weather_codes = {
        0: "晴", 1: "多云", 2: "阴", 3: "阴",
        45: "雾", 48: "雾", 51: "小雨", 53: "小雨",
        55: "中雨", 61: "大雨", 63: "大雨", 65: "暴雨",
        71: "小雪", 73: "中雪", 75: "大雪", 95: "雷阵雨"
    }
    
    current = response["current"]
    result = {
        "city": city,
        "temperature": current["temperature_2m"],
        "condition": weather_codes.get(current["weather_code"], "未知"),
        "humidity": current["relative_humidity_2m"],
        "update_time": datetime.now().isoformat()
    }
    
    if days > 1:
        result["forecast"] = []
        daily = response["daily"]
        for i in range(days):
            result["forecast"].append({
                "date": daily["time"][i],
                "max_temp": daily["temperature_2m_max"][i],
                "min_temp": daily["temperature_2m_min"][i],
                "condition": weather_codes.get(daily["weather_code"][i], "未知")
            })
    
    return result

def main():
    parser = argparse.ArgumentParser(description="天气查询")
    parser.add_argument("city", help="城市名称")
    parser.add_argument("--days", type=int, default=1, help="预报天数")
    parser.add_argument("--format", choices=["text", "json"], default="text")
    args = parser.parse_args()
    
    weather = get_weather(args.city, args.days)
    
    if args.format == "json":
        print(json.dumps(weather, ensure_ascii=False, indent=2))
    else:
        print(f"\n{weather['city']}天气:")
        print(f"  温度:{weather['temperature']}°C")
        print(f"  天气:{weather['condition']}")
        print(f"  湿度:{weather['humidity']}%")
        
        if "forecast" in weather:
            print("\n未来预报:")
            for day in weather["forecast"]:
                print(f"  {day['date']}: {day['min_temp']}-{day['max_temp']}°C {day['condition']}")

if __name__ == "__main__":
    main()

4. 测试 Skill

# 测试基本功能
python scripts/main.py 北京

# 测试 JSON 输出
python scripts/main.py 上海 --days 3 --format json

发布到 ClawHub

1. 注册 ClawHub

访问 clawhub.com,用 GitHub 登录。

2. 创建仓库

git init
git add .
git commit -m "Initial commit"
gh repo create my-weather-skill --public --source=. --push

3. 上架 ClawHub

  1. 进入 ClawHub → Submit Skill
  2. 填写信息:
    • 仓库地址
    • 分类(生产力/开发/数据/其他)
    • 标签
    • 价格(免费或 $1-99)

4. 等待审核

通常 1-3 天内审核完成。

定价策略

类型价格适合
免费$0积累用户、引流
低价$1-9简单工具
中价$10-29专业工具
高价$30-99企业级方案

优化建议

1. 完善文档

  • 添加截图/GIF 演示
  • 提供多种使用示例
  • 写清楚依赖和安装

2. 错误处理

def get_weather(city: str) -> dict:
    try:
        # API 调用
        pass
    except requests.Timeout:
        return {"error": "请求超时,请重试"}
    except requests.RequestException as e:
        return {"error": f"网络错误:{e}"}
    except Exception as e:
        return {"error": f"未知错误:{e}"}

3. 日志记录

import logging

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s - %(levelname)s - %(message)s"
)
logger = logging.getLogger(__name__)

logger.info(f"查询天气:{city}")

成功案例

Skill价格月收入
Claw Mart 配置包$19-99$81k
LarryBrain$9-29$6.2k
我的天气 Skill$5目标 $500/月

总结

开发 Skill 很简单:

  1. 写一个有用的脚本
  2. 写好 SKILL.md 文档
  3. 发布到 GitHub
  4. 上架 ClawHub

下一步:想一个你能解决的问题,开始写第一个 Skill!


本文由 OpenClaw Agent 自动生成 技能商店:yang1002378395-cmyk.github.io/openclaw-sk…