name: stockapi description: 与StockAPI交互的技能,包括查找接口和生成Python代码。
以下是关于 stockapi 技能的说明。
描述
该技能协助用户根据自然语言描述找到正确的 StockAPI 接口,解释数据字段,生成并自动执行调用接口的 Python 代码。它利用同一目录下的 api_docs.md 文件获取 API 定义。
工作流程
-
分析用户请求:理解用户需要什么数据或功能(例如:“A股列表”、“K线行情”、“MACD指标”)。
-
查找匹配的 API:
- 在技能目录的
api_docs.md文件中,使用grep或read搜索相关关键词。 - 根据描述和返回字段确定最合适的 API。
- 在技能目录的
-
解释并确认:
- 向用户展示找到的 API(名称、ID、URL、描述)。
- 解释输入参数和返回字段。
- 请用户确认这是否是正确的接口。
-
收集参数:
- 如果用户确认,询问任何必要的参数(例如股票代码、日期范围),如果尚未提供的话。
- 如果用户对参数有疑问,使用 API 文档进行解释。
-
生成代码:
- 请求构建策略:
- 在
api_docs.md中找到所选 API 中以**有Token示例**:开头的行(例如https://www.stockapi.com.cn/v1/base/jjqc?tradeDate=2025-03-04&period=0&type=1&token=你的token)。 - 从此示例 URL 中提取基础 URL 和查询参数。
- 参考示例后面的“请求参数”表格,了解每个参数的含义、类型和是否必需。
- 使用包含
token和示例及表格中找到的所有其他必要参数的params字典构建requests.get调用。
- 在
- 使用
requests库编写调用 API 的 Python 代码。 - 包含错误处理(检查
code == 20000)。 - 自动读取 Token:
- 生成的代码必须尝试从
api_docs.md中自动读取Token。 - 使用
os.path相对于脚本位置定位api_docs.md(例如在.trae/skills/stockapi/内)。 - 如果在文件中找到 token,直接使用,无需提示用户。
- 仅当未找到 token 或无法读取时,才提示用户使用
input(\"请先输入你的stockapi专属token: \")输入。
- 生成的代码必须尝试从
- 请求构建策略:
-
运行代码:
- 代码生成并保存后,使用
RunCommand工具执行 Python 脚本(例如python <filename>)。 - 为命令设置
blocking: true。 - 告知用户代码正在运行。
- 代码生成并保存后,使用
代码模板
import requests
import os
# 全局变量 token
TOKEN = \"\"
def get_token_from_file():
global TOKEN
try:
# 相对于脚本或项目根目录定位 api_docs.md
# 根据脚本保存位置调整路径逻辑
current_dir = os.path.dirname(os.path.abspath(__file__))
# 示例路径:.trae/skills/stockapi/api_docs.md
# 根据脚本位置可能需要向上或向下遍历
docs_path = os.path.join(current_dir, \".trae\", \"skills\", \"stockapi\", \"api_docs.md\")
if os.path.exists(docs_path):
with open(docs_path, \"r\", encoding=\"utf-8\") as f:
for line in f:
if line.strip().startswith(\"Token=\"):
TOKEN = line.strip().split(\"=\")[1].strip()
print(f\"在 api_docs.md 中找到 Token:{TOKEN[:5]}...\")
return TOKEN
except Exception as e:
print(f\"读取 token 文件时出错:{e}\")
return \"\"
def call_stock_api(token, ...):
url = \"https://www.stockapi.com.cn/v1/...\" # 替换为实际 URL
params = {
\"token\": token,
# 在此处添加其他参数
}
try:
response = requests.get(url, params=params)
data = response.json()
if data.get(\"code\") == 20000:
print(\"成功:\", data.get(\"data\"))
return data.get(\"data\")
else:
print(\"错误:\", data.get(\"msg\"))
return None
except Exception as e:
print(f\"请求失败:{e}\")
return None
if __name__ == \"__main__\":
# 1. 尝试从文件读取 token
get_token_from_file()
# 2. 如果未找到,提示用户输入
if not TOKEN:
TOKEN = input(\"请先输入你的stockapi专属token:\")
else:
print(\"使用 api_docs.md 中的 token\")
# 使用 token 调用函数
call_stock_api(TOKEN, ...)
知识来源
完整的 API 文档位于此目录下的 api_docs.md 文件中。始终参考该文件以获取关于 API 端点、参数和响应结构的最准确和最新的信息。