from threading import Thread import requests import json from apps.utils.tools import print_roundtrip from server import settings import time requests.packages.urllib3.disable_warnings() class XxClient: """ 寻息 """ def __init__(self, licence=settings.XX_LICENCE, username=settings.XX_USERNAME) -> None: self.licence = licence self.username = username self.isGetingToken = False self.isRuning = True self.token = '' self.t = None self.setup() def _get_token_loop(self): while self.isRuning: json = { 'licence':self.licence } r = requests.post(json=json, url=settings.XX_BASE_URL + '/getAccessTokenV2', verify=False, timeout=20) ret = r.json() if ret.get('errorCode', 1) == 0: self.token = ret['data']['token'] time.sleep(3600) def get_token(self): self.isGetingToken = True json = { 'licence':self.licence } r = requests.post(json=json, url=settings.XX_BASE_URL + '/getAccessTokenV2', verify=False, timeout=20) ret = r.json() if ret.get('errorCode', 1) == 0: self.isGetingToken = False self.token = ret['data']['token'] def setup(self): self.t = Thread(target= self._get_token_loop, args=(), daemon=True) self.t.start() def __del__(self): """ 自定义销毁 """ self.isRuning = False self.t.join() def request(self, url:str, method:str='post', params=dict(), json=dict(), timeout=20): params['accessToken'] = self.token json['username'] = self.username if self.isGetingToken: req_num = 0 while True: time.sleep(0.5) if not self.isGetingToken: self.request(url, method, params, json, timeout) req_num = req_num + 1 if req_num > 4: break else: r = getattr(requests, method)('{}{}'.format(settings.XX_BASE_URL, url) , params=params, json=json, verify=False) if settings.DEBUG: print_roundtrip(r) ret = r.json() if ret.get('errorCode') == '1060000': self.get_token() # 重新获取token self.request(url, method, params, json, timeout) # 重新请求 else: msg = '{}|{}'.format(str(ret['errorCode']), '|'.join(ret['errorMsg'])) res = dict(success=True, code=200000, msg= msg, data=ret['data']) if ret['errorCode'] != 0: res['success'] = False res['code'] = 400000 return res return dict(success=False, code=400900, msg='寻息接口访问异常', data=None) if settings.XX_ENABLED: xxClient = XxClient()