get_tools_list.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #!/usr/bin/env python3
  2. """
  3. 获取可用工具列表接口
  4. 从API获取所有可用的工具列表
  5. """
  6. import requests
  7. import json
  8. import os
  9. import argparse
  10. from datetime import datetime
  11. from typing import Dict, Any
  12. class ToolsListFetcher:
  13. """工具列表获取API封装类"""
  14. BASE_URL = "http://47.84.182.56:8001"
  15. API_ENDPOINT = "/tools"
  16. def __init__(self, results_dir: str = None):
  17. """
  18. 初始化API客户端
  19. Args:
  20. results_dir: 结果输出目录,默认为项目根目录下的 data/tools_list 文件夹
  21. """
  22. self.api_url = f"{self.BASE_URL}{self.API_ENDPOINT}"
  23. # 设置结果输出目录
  24. if results_dir:
  25. self.results_base_dir = results_dir
  26. else:
  27. # 默认使用项目根目录的 data/tools_list 文件夹
  28. script_dir = os.path.dirname(os.path.abspath(__file__))
  29. project_root = os.path.dirname(script_dir)
  30. self.results_base_dir = os.path.join(project_root, "data", "tools_list")
  31. def get_tools_list(self, timeout: int = 30) -> Dict[str, Any]:
  32. """
  33. 获取工具列表
  34. Args:
  35. timeout: 请求超时时间(秒),默认30秒
  36. Returns:
  37. API响应的JSON数据
  38. Raises:
  39. requests.exceptions.RequestException: 请求失败时抛出异常
  40. """
  41. try:
  42. response = requests.get(
  43. self.api_url,
  44. timeout=timeout,
  45. headers={"Content-Type": "application/json"}
  46. )
  47. response.raise_for_status()
  48. return response.json()
  49. except requests.exceptions.RequestException as e:
  50. print(f"请求失败: {e}")
  51. raise
  52. def save_result(self, result: Dict[str, Any]) -> str:
  53. """
  54. 保存结果到文件
  55. 目录结构: results/tools_list_时间戳.json
  56. Args:
  57. result: API返回的结果
  58. Returns:
  59. 保存的文件路径
  60. """
  61. # 创建目录结构
  62. os.makedirs(self.results_base_dir, exist_ok=True)
  63. # 文件名使用时间戳
  64. timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
  65. filename = f"tools_list_{timestamp}.json"
  66. filepath = os.path.join(self.results_base_dir, filename)
  67. # 保存结果
  68. with open(filepath, 'w', encoding='utf-8') as f:
  69. json.dump(result, f, ensure_ascii=False, indent=2)
  70. return filepath
  71. def main():
  72. """示例使用"""
  73. # 解析命令行参数
  74. parser = argparse.ArgumentParser(description='获取可用工具列表接口')
  75. parser.add_argument(
  76. '--results-dir',
  77. type=str,
  78. default='data/tools_list',
  79. help='结果输出目录 (默认: data/tools_list)'
  80. )
  81. args = parser.parse_args()
  82. # 创建API客户端实例
  83. client = ToolsListFetcher(results_dir=args.results_dir)
  84. # 获取工具列表并保存
  85. try:
  86. result = client.get_tools_list()
  87. filepath = client.save_result(result)
  88. print(f"Output: {filepath}")
  89. except Exception as e:
  90. print(f"Error: {e}", file=__import__('sys').stderr)
  91. if __name__ == "__main__":
  92. main()