nas_tools.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import requests
  2. import logging
  3. class NasToolsClient:
  4. def __init__(self, base_url, api_key=None):
  5. self.base_url = base_url
  6. self.api_key = api_key
  7. self.token = None
  8. # def login(self, username, password):
  9. # """
  10. # 登录以获取Token
  11. # """
  12. # url = f'{self.base_url}/api/v1/user/login'
  13. # data = {'username': username, 'password': password}
  14. # headers = {'Content-Type': 'application/x-www-form-urlencoded'}
  15. # response = requests.post(url, data=data, headers=headers)
  16. # if response.status_code == 200:
  17. # self.token = response.json().get('token')
  18. # return self.token
  19. # else:
  20. # raise Exception("Login failed with status code: " + str(response.status_code))
  21. def login(self, username, password):
  22. """登录并获取令牌"""
  23. url = f'{self.base_url}/api/v1/user/login'
  24. data = {
  25. "username": username,
  26. "password": password
  27. }
  28. headers = {'Content-Type': 'application/x-www-form-urlencoded'}
  29. response = requests.post(url, data=data, headers=headers)
  30. if response.status_code == 200:
  31. self.token = response.json().get("data", {}).get("token")
  32. logging.info(self.token)
  33. logging.info(self.api_key)
  34. return self.token
  35. else:
  36. raise Exception("Failed to login:", response.text)
  37. def get(self, endpoint):
  38. """执行带有令牌的 GET 请求"""
  39. url = f"{self.base_url}{endpoint}"
  40. headers = {
  41. "Authorization": f"Bearer {self.token}" if self.token else f"ApiKey {self.api_key}"
  42. }
  43. response = requests.get(url, headers=headers)
  44. if response.status_code == 200:
  45. return response.json()
  46. else:
  47. raise Exception("Failed to get data:", response.text)
  48. def sync_list(self):
  49. """
  50. 同步目录
  51. """
  52. url = f'{self.base_url}/api/v1/sync/directory/list'
  53. # {"Bearer Auth": {"type": "apiKey", "name": "Authorization", "in": "header"}}
  54. headers = {
  55. 'accept': 'application/json',
  56. 'Content-Type': 'application/x-www-form-urlencoded',
  57. "Authorization": f"{self.token}",
  58. }
  59. logging.info(f"headers: {headers}")
  60. params = {
  61. 'apikey': self.api_key
  62. }
  63. response = requests.post(url, params=params, headers=headers)
  64. logging.info(response.json())
  65. return response.json()
  66. def sync(self, sid):
  67. """
  68. 同步目录 {cmd: "run_directory_sync", data: {sid: []}}
  69. """
  70. url = f'{self.base_url}/api/v1/sync/directory/run'
  71. # {"Bearer Auth": {"type": "apiKey", "name": "Authorization", "in": "header"}}
  72. headers = {
  73. 'accept': 'application/json',
  74. 'Content-Type': 'application/x-www-form-urlencoded',
  75. "Authorization": f"{self.token}",
  76. }
  77. logging.info(f"headers: {headers}")
  78. params = {
  79. 'apikey': self.api_key,
  80. 'sid': sid
  81. }
  82. response = requests.get(url, params=params, headers=headers)
  83. logging.info(response.json())
  84. return response.json()
  85. def run_service(self, service_name):
  86. """
  87. 运行指定的服务
  88. """
  89. url = f'{self.base_url}/api/v1/service/run'
  90. # {"Bearer Auth": {"type": "apiKey", "name": "Authorization", "in": "header"}}
  91. headers = {
  92. 'accept': 'application/json',
  93. 'Content-Type': 'application/x-www-form-urlencoded',
  94. 'security': self.api_key,
  95. "Authorization": f"{self.token}",
  96. }
  97. logging.info(f"headers: {headers}")
  98. payload = {'item': service_name}
  99. response = requests.post(url, data=payload, headers=headers)
  100. logging.info(response.json())
  101. return response.json()
  102. # # 使用示例
  103. # base_url = "http://your-nas-tools-address/api/v1"
  104. # username = "your_username"
  105. # password = "your_password"
  106. # api_key = "your_api_key"
  107. #
  108. # client = NasToolsClient(base_url, api_key)
  109. # token = client.login(username, password)
  110. # print("Token:", token)
  111. #
  112. # # 现在可以使用 client.get 方法来调用其他 API