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