From e25a0bad090c444970b48df2713f02d691666b08 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期一, 05 二月 2024 14:19:49 +0800 Subject: [PATCH] 看盘功能完善 --- utils/xgb_api.py | 106 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 88 insertions(+), 18 deletions(-) diff --git a/utils/xgb_api.py b/utils/xgb_api.py index 8196832..251195d 100644 --- a/utils/xgb_api.py +++ b/utils/xgb_api.py @@ -6,34 +6,104 @@ from utils import tool -def get_limit_up_codes_infos(): - url = f"https://flash-api.xuangubao.cn/api/surge_stock/stocks?date={tool.get_now_date_str('%Y%m%d')}&normal=true&uplimit=true" - response = requests.get(url) - print(response.text) - return response.text +class XGBApi: + + @classmethod + def __base_request_get(cls, url): + response = requests.get(url) + return response.text + + @classmethod + def get_limit_up_codes_infos(cls): + url = f"https://flash-api.xuangubao.cn/api/surge_stock/stocks?date={tool.get_now_date_str('%Y%m%d')}&normal=true&uplimit=true" + result = cls.__base_request_get(url) + result = json.loads(result) + if result["code"] == 20000: + items = result["data"]["items"] + return items + return None + + @classmethod + def get_limit_up_reasons(cls): + url = f"https://flash-api.xuangubao.cn/api/surge_stock/plates" + result = cls.__base_request_get(url) + result = json.loads(result) + if result["code"] == 20000: + items = result["data"]["items"] + return items + return None + + @classmethod + def get_code_blocks(cls, code): + symbol = code + if code.find('00') or code.find('30'): + symbol += ".SZ" + elif code.find('60') or code.find('68'): + symbol += ".SS" + + url = f"https://flash-api.xuangubao.cn/api/stage2/plates_by_any_stock?symbol={symbol}&fields=core_avg_pcp,plate_name" + result = cls.__base_request_get(url) + result = json.loads(result) + if result["code"] == 20000: + data = result["data"] + return [data[k]['plate_name'] for k in data] + return None __limit_up_codes_infos_cache = None +__limit_up_reasons_dict_cache = {} + + +def run(): + global __limit_up_codes_infos_cache + global __limit_up_reasons_dict_cache + while True: + try: + results = XGBApi.get_limit_up_codes_infos() + if results: + __limit_up_codes_infos_cache = (results, time.time()) + results = XGBApi.get_limit_up_reasons() + if results: + __limit_up_reasons_dict_cache = {k["name"]: k for k in results} + except: + pass + finally: + time.sleep(3) + + +# 鍔犺浇娑ㄥ仠浠g爜 +def __load_limit_up_codes(): + global __limit_up_codes_infos_cache + global __limit_up_reasons_dict_cache + if __limit_up_codes_infos_cache is None or time.time() - __limit_up_codes_infos_cache[1] > 10: + items = XGBApi.get_limit_up_codes_infos() + if items: + __limit_up_codes_infos_cache = (items, time.time()) + items = XGBApi.get_limit_up_reasons() + __limit_up_reasons_dict_cache = {k["name"]: k for k in items} # 鑾峰彇娑ㄥ仠鍒楄〃鐨勫師鍥� def get_code_limit_up_reasons(code): - global __limit_up_codes_infos_cache - if __limit_up_codes_infos_cache is None or time.time() - __limit_up_codes_infos_cache[1] > 10: - - result = get_limit_up_codes_infos() - result = json.loads(result) - if result["code"] == 20000: - items = result["data"]["items"] - __limit_up_codes_infos_cache = (items, time.time()) + __load_limit_up_codes() if __limit_up_codes_infos_cache: - for item in __limit_up_codes_infos_cache[0]: + __limit_up_codes_infos = __limit_up_codes_infos_cache[0] + for item in __limit_up_codes_infos: if item[0].split(".")[0] == code: - reasons = [x["name"] for x in item[8]] - return reasons, item[5] + # 娑ㄥ仠鍘熷洜锛�(鏉垮潡,鍘熷洜,['鎴愬垎鑲″悕绉�1','鎴愬垎鑲″悕绉�2']) + reasons = [[x["name"], __limit_up_reasons_dict_cache.get(x["name"]).get("description") if x[ + "name"] in __limit_up_reasons_dict_cache else ''] + for x in item[8]] + for r in reasons: + code_names = [] + for l in __limit_up_codes_infos: + if r[0] in [ll["name"] for ll in l[8]]: + code_names.append(l[1]) + r.append(code_names) + # 娑ㄥ仠鍘熷洜 + return reasons, item[5], XGBApi.get_code_blocks(code), round(item[4] / 100000000, 2) return None if __name__ == '__main__': - print(get_code_limit_up_reasons("002641")) - print(get_code_limit_up_reasons("002610")) + print(XGBApi.get_limit_up_codes_infos()) -- Gitblit v1.8.0