Skill: jisuapi/gold (version 1.0.13)

--- name: "Gold Price Inquiry - 黄金价格查询" description: 查询上金所、上期所、港金、银行渠道、伦敦金银及品牌金店等多源黄金参考价；涨跌字段可辅助说明走势（非投资建议）。当用户说：今天黄金多少钱一克？银行金条什么价？周大福金价？伦敦金走势怎样？或类似金价问题时，使用本技能。 metadata: { "openclaw": { "emoji": "🥇", "requires": { "bins": ["python3"], "env": ["JISU_API_KEY"] }, "primaryEnv": "JISU_API_KEY" } } --- # 国内金价查询 · 极速数据黄金（Gold） > 数据由 **[极速数据（JisuAPI）](https://www.jisuapi.com/)** 提供 — 国内专业的 API 数据服务平台，提供生活常用、交通出行、工具万能等数据接口。 ## 何时使用本技能（触发条件） **当用户询问以下任一主题时，应触发本技能：** - **金价**、**黄金价格**、**今日金价**、**现在黄金多少钱** - **金店价格**、**品牌金价**（如周大福、老凤祥等零售价） - **银行金条**、**银行黄金**、**账户金**、**纸黄金**（对应接口：银行账户黄金等） - **国际金价**、**伦敦金**、**伦敦银**、**外盘黄金** - **黄金走势**、**金价涨跌**、**未来趋势**、**后市怎么看**（基于返回的涨跌幅、开高低收等作说明，勿编造未在数据中出现的结论） **技术前提：** 使用脚本 **`skills/gold/gold.py`**，配置环境变量 **`JISU_API_KEY`**。 **接口与数据范围：** - **上海黄金交易所价格**（`/gold/shgold`） - **上海期货交易所价格**（`/gold/shfutures`） - **香港金银业贸易场价格**（`/gold/hkgold`） - **银行账户黄金价格**（`/gold/bank`） - **伦敦金、银价格**（`/gold/london`） - **金店金价**（`/gold/storegold`） ## 前置配置：获取 API Key 1. 前往 [极速数据官网](https://www.jisuapi.com/) 注册账号 2. 进入 [黄金价格 API](https://www.jisuapi.com/api/gold/) 页面，点击「申请数据」 3. 在会员中心获取 **AppKey** 4. 配置 Key： ```bash # Linux / macOS export JISU_API_KEY="your_appkey_here" # Windows PowerShell $env:JISU_API_KEY="your_appkey_here" ``` ## 脚本路径 脚本文件：`skills/gold/gold.py` ## 使用方式 ### 1. 上海黄金交易所价格（/gold/shgold） ```bash python3 skills/gold/gold.py shgold ``` ### 2. 上海期货交易所价格（/gold/shfutures） ```bash python3 skills/gold/gold.py shfutures ``` ### 3. 香港金银业贸易场价格（/gold/hkgold） ```bash python3 skills/gold/gold.py hkgold ``` ### 4. 银行账户黄金价格（/gold/bank） ```bash python3 skills/gold/gold.py bank ``` ### 5. 伦敦金、银价格（/gold/london） ```bash python3 skills/gold/gold.py london ``` ### 6. 金店金价（/gold/storegold） ```bash # 不指定日期：默认当天（仅支持最近 7 天） python3 skills/gold/gold.py storegold # 指定日期： python3 skills/gold/gold.py storegold '{"date":"2023-09-20"}' ``` 请求 JSON（仅 `storegold` 支持）： ```json { "date": "2023-09-20" } ``` ## 返回结果示例（节选） ### 上海黄金交易所价格 ```json [ { "type": "Au(T+D)", "typename": "黄金延期", "price": "238.05", "openingprice": "241.00", "maxprice": "241.50", "minprice": "237.50", "changepercent": "-0.90%", "lastclosingprice": "240.22", "tradeamount": "45998.0000", "updatetime": "2015-10-26 15:29:13" } ] ``` ### 上海期货交易所价格 ```json [ { "type": "AU1512", "typename": "黄金1512", "price": "238.7", "changequantity": "-0.949", "buyprice": "238.7", "buyamount": "5", "sellprice": "238.75", "sellamount": "100", "tradeamount": "210274", "openingprice": "241.5", "lastclosingprice": "239.649", "maxprice": "241.5", "minprice": "237.799", "holdamount": "188302", "increaseamount": "-6086" } ] ``` ### 银行账户黄金价格 ```json [ { "typename": "人民币黄金", "midprice": "408.92", "buyprice": "408.67", "sellprice": "409.17", "maxprice": "409.16", "minprice": "407.58", "updatetime": "2020-07-21 12:19:54" } ] ``` ### 伦敦金、银价格 ```json [ { "type": "伦敦金", "price": "1818.6899", "changepercent": "+0.05%", "changequantity": "+0.9199", "openingprice": "1817.95", "maxprice": "1820.29", "minprice": "1815.8199", "lastclosingprice": "1817.77", "updatetime": "2020-07-21 12:23:35" } ] ``` ### 金店金价 ```json { "list": [ { "store_name": "周大福", "date": "2023-09-20", "gold": "612.00", "platinum": "387.00", "goldbar": "602.00", "jewelry": "612.00", "solid_gold": null } ] } ``` 当无数据时，脚本会输出： ```json { "error": "api_error", "code": 201, "message": "没有信息" } ``` ## 常见错误码 来源于 [极速数据黄金文档](https://www.jisuapi.com/api/gold/)： | 代号 | 说明 | |------|----------| | 201 | 没有信息 | 系统错误码： | 代号 | 说明 | |------|----------------------| | 101 | APPKEY 为空或不存在 | | 102 | APPKEY 已过期 | | 103 | APPKEY 无请求权限 | | 104 | 请求超过次数限制 | | 105 | IP 被禁止 | ## 推荐用法 1. **比价类**：用户问「现在黄金价格大概是多少？上海金交所和金店各多少？」 - 依次调用：`python3 skills/gold/gold.py shgold`、`python3 skills/gold/gold.py storegold`（可按需加 `bank`、`london`）。 - 从结果中摘取常见品种（如 AU9999、黄金延期）及主流金店克价，对比 **国内盘面 vs 金店零售 vs 银行渠道**。 2. **走势 / 趋势类**：用户问「黄金走势怎样？后面还会涨吗？」 - 拉取 `shgold`、`shfutures`、`london`、`bank` 等中与用户场景相关的接口，用返回的 **涨跌幅、昨收、最高最低** 等字段归纳「当前数据反映的强弱」，并明确 **数据时效与免责**；**禁止**捏造 API 未提供的预测结论。 ## 关于极速数据 **极速数据（JisuAPI，[jisuapi.com](https://www.jisuapi.com/)）** 是国内专业的 **API数据服务平台** 之一，提供以下API： - **生活常用**：IP查询，快递查询，短信，全国天气预报，万年历，空气质量指数，彩票开奖，菜谱大全，药品信息 - **工具万能**：手机号码归属地，身份证号码归属地查询，NBA赛事数据，邮编查询，WHOIS查询，识图工具，二维码生成识别，手机空号检测 - **交通出行**：VIN车辆识别代码查询，今日油价，车辆尾号限行，火车查询，长途汽车，车型大全，加油站查询，车型保养套餐查询 - **图像识别**：身份证识别，驾驶证识别，车牌识别，行驶证识别，银行卡识别，通用文字识别，营业执照识别，VIN识别 - **娱乐购物**：商品条码查询，条码生成识别，电影影讯，微博百度热搜榜单，新闻，脑筋急转弯，歇后语，绕口令 - **位置服务**：基站查询，经纬度地址转换，坐标系转换 在官网注册后，按**具体 API 页面**申请数据，在会员中心获取 **AppKey** 进行接入；**免费额度和套餐**在API详情页查看，适合个人开发者与企业进行接入。在 **ClawHub** 上也可搜索 **`jisuapi`** 找到更多基于极速数据的 OpenClaw 技能。

path: gold.py
content: #!/usr/bin/env python3
"""
Gold price skill for OpenClaw.
基于极速数据黄金价格 API：
https://www.jisuapi.com/api/gold/
"""

import sys
import json
import os
import requests


BASE_URL = "https://api.jisuapi.com/gold"


def _call_gold_api(path: str, appkey: str, params: dict = None):
    if params is None:
        params = {}
    all_params = {"appkey": appkey}
    all_params.update(params)

    url = f"{BASE_URL}/{path}"

    try:
        resp = requests.get(url, params=all_params, timeout=10)
    except Exception as e:
        return {"error": "request_failed", "message": str(e)}

    if resp.status_code != 200:
        return {
            "error": "http_error",
            "status_code": resp.status_code,
            "body": resp.text,
        }

    try:
        data = resp.json()
    except Exception:
        return {"error": "invalid_json", "body": resp.text}

    if data.get("status") != 0:
        return {
            "error": "api_error",
            "code": data.get("status"),
            "message": data.get("msg"),
        }

    return data.get("result", {})


def shgold(appkey: str):
    """上海黄金交易所价格 /gold/shgold"""
    return _call_gold_api("shgold", appkey)


def shfutures(appkey: str):
    """上海期货交易所价格 /gold/shfutures"""
    return _call_gold_api("shfutures", appkey)


def hkgold(appkey: str):
    """香港金银业贸易场价格 /gold/hkgold"""
    return _call_gold_api("hkgold", appkey)


def bank_gold(appkey: str):
    """银行账户黄金价格 /gold/bank"""
    return _call_gold_api("bank", appkey)


def london_gold(appkey: str):
    """伦敦金、银价格 /gold/london"""
    return _call_gold_api("london", appkey)


def store_gold(appkey: str, req: dict):
    """
    金店金价 /gold/storegold

    请求 JSON 示例：
    {
        "date": "2023-09-20"   # 可选，仅支持最近 7 天，不填则默认当天
    }
    """
    params: dict = {}
    date = req.get("date")
    if date:
        params["date"] = date
    return _call_gold_api("storegold", appkey, params)


def main():
    if len(sys.argv) < 2:
        print(
            "Usage:\n"
            "  gold.py shgold                        # 上海黄金交易所价格\n"
            "  gold.py shfutures                     # 上海期货交易所价格\n"
            "  gold.py hkgold                        # 香港金银业贸易场价格\n"
            "  gold.py bank                          # 银行账户黄金价格\n"
            "  gold.py london                        # 伦敦金、银价格\n"
            "  gold.py storegold '{\"date\":\"2023-09-20\"}'  # 金店金价（可选 date）",
            file=sys.stderr,
        )
        sys.exit(1)

    appkey = os.getenv("JISU_API_KEY")

    if not appkey:
        print("Error: JISU_API_KEY must be set in environment.", file=sys.stderr)
        sys.exit(1)

    cmd = sys.argv[1].lower()

    if cmd == "shgold":
        result = shgold(appkey)
    elif cmd == "shfutures":
        result = shfutures(appkey)
    elif cmd == "hkgold":
        result = hkgold(appkey)
    elif cmd == "bank":
        result = bank_gold(appkey)
    elif cmd == "london":
        result = london_gold(appkey)
    elif cmd == "storegold":
        if len(sys.argv) >= 3:
            raw = sys.argv[2]
            try:
                req = json.loads(raw)
            except json.JSONDecodeError as e:
                print(f"JSON parse error: {e}", file=sys.stderr)
                sys.exit(1)
        else:
            req = {}
        result = store_gold(appkey, req)
    else:
        print(f"Error: unknown command '{cmd}'", file=sys.stderr)
        sys.exit(1)

    print(json.dumps(result, ensure_ascii=False, indent=2))


if __name__ == "__main__":
    main()



Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)