| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- #!/usr/bin/env python3
- """
- 获取可用工具列表接口
- 从API获取所有可用的工具列表
- """
- import requests
- import json
- import os
- import argparse
- from datetime import datetime
- from typing import Dict, Any
- import sys
- from pathlib import Path
- # 添加项目根目录到路径并导入配置
- sys.path.insert(0, str(Path(__file__).parent.parent.parent))
- from lib.config import get_data_dir
- class ToolsListFetcher:
- """工具列表获取API封装类"""
- BASE_URL = "http://47.84.182.56:8001"
- API_ENDPOINT = "/tools"
- def __init__(self, results_dir: str = None):
- """
- 初始化API客户端
- Args:
- results_dir: 结果输出目录,默认为项目根目录下的 data/tools_list 文件夹
- """
- self.api_url = f"{self.BASE_URL}{self.API_ENDPOINT}"
- # 设置结果输出目录
- if results_dir:
- self.results_base_dir = results_dir
- else:
- # 默认从配置读取
- self.results_base_dir = get_data_dir("tools_list")
- def get_tools_list(self, timeout: int = 30) -> Dict[str, Any]:
- """
- 获取工具列表
- Args:
- timeout: 请求超时时间(秒),默认30秒
- Returns:
- API响应的JSON数据
- Raises:
- requests.exceptions.RequestException: 请求失败时抛出异常
- """
- try:
- response = requests.get(
- self.api_url,
- timeout=timeout,
- headers={"Content-Type": "application/json"}
- )
- response.raise_for_status()
- return response.json()
- except requests.exceptions.RequestException as e:
- print(f"请求失败: {e}")
- raise
- def save_result(self, result: Dict[str, Any]) -> str:
- """
- 保存结果到文件
- 目录结构: results/tools_list_时间戳.json
- Args:
- result: API返回的结果
- Returns:
- 保存的文件路径
- """
- # 创建目录结构
- os.makedirs(self.results_base_dir, exist_ok=True)
- # 文件名使用时间戳
- timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
- filename = f"tools_list_{timestamp}.json"
- filepath = os.path.join(self.results_base_dir, filename)
- # 保存结果
- with open(filepath, 'w', encoding='utf-8') as f:
- json.dump(result, f, ensure_ascii=False, indent=2)
- return filepath
- def main():
- """示例使用"""
- # 解析命令行参数
- parser = argparse.ArgumentParser(description='获取可用工具列表接口')
- parser.add_argument(
- '--results-dir',
- type=str,
- default=None,
- help='结果输出目录 (默认: 从配置读取)'
- )
- args = parser.parse_args()
- # 创建API客户端实例
- client = ToolsListFetcher(results_dir=args.results_dir)
- # 获取工具列表并保存
- try:
- result = client.get_tools_list()
- filepath = client.save_result(result)
- print(f"Output: {filepath}")
- except Exception as e:
- print(f"Error: {e}", file=__import__('sys').stderr)
- if __name__ == "__main__":
- main()
|