From 64454325c9610a08fae19a7977645a6618a0ffa8 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期三, 09 七月 2025 13:17:22 +0800
Subject: [PATCH] 脚本构建服务器
---
third_data/kpl_api.py | 253 ++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 241 insertions(+), 12 deletions(-)
diff --git a/third_data/kpl_api.py b/third_data/kpl_api.py
index c82f5e0..28b5e54 100644
--- a/third_data/kpl_api.py
+++ b/third_data/kpl_api.py
@@ -3,7 +3,9 @@
import requests
-from utils import middle_api_protocol
+import constant
+from third_data import kpl_util
+from utils import middle_api_protocol, tool
# 绔炰环
DABAN_TYPE_BIDDING = 8
@@ -17,7 +19,7 @@
DABAN_TYPE_EVER_LIMIT_DOWN = 5
-def __base_request(url, data, timeout=60):
+def __base_request(url, data, timeout=10):
DELEGATE = True
if not DELEGATE:
headers = {
@@ -32,21 +34,54 @@
raise Exception("璇锋眰鍑洪敊")
return response.text
else:
- fdata = middle_api_protocol.load_kpl(url, data)
+ fdata = middle_api_protocol.load_kpl(url, data, timeout)
return middle_api_protocol.request(fdata)
def daBanList(pidType, page_size=50, index=0):
- data = f"Order=1&a=DaBanList&st={page_size}&c=HomeDingPan&PhoneOSNew=1&DeviceID=a38adabd-99ef-3116-8bb9-6d893c846e23" \
+ data = f"Order=1&a=DaBanList&st={page_size}&c=HomeDingPan&PhoneOSNew=1&DeviceID=a38adabd-99ef-3116-8bb9-6d893c846e24" \
f"&VerSion=5.8.0.2&Index={index}&Is_st=1&PidType={pidType}&apiv=w32&Type=4&FilterMotherboard=0&Filter=0&FilterTIB=0" \
- "&FilterGem=0 "
+ "&FilterGem=0"
result = __base_request("https://apphq.longhuvip.com/w1/api/index.php", data=data)
return result
+def __getLimitUpInfo(pidType, page, pageSize):
+ data = f"Order=0&a=DailyLimitPerformance&st={pageSize}&apiv=w35&Type=4&c=HomeDingPan&PhoneOSNew=1&DeviceID=a38adabd-99ef-3116-8bb9-6d893c846e24&VerSion=5.13.0.0&Index={(page - 1) * pageSize}&PidType={pidType}&"
+ result = __base_request("https://apphq.longhuvip.com/w1/api/index.php", data=data)
+ return result
+
+
+def getLimitUpInfoNew():
+ pids = [(1, "棣栨澘"), (2, "2杩炴澘"), (3, "3杩炴澘"), (4, "4杩炴澘"), (5, "")]
+ fresults = []
+ day = ''
+ for pid_info in pids:
+ results = []
+ for i in range(100):
+ start_time = time.time()
+ result = __getLimitUpInfo(pid_info[0], i + 1, 20)
+ result = json.loads(result)
+ datas = result["info"][0]
+ results.extend(datas)
+ day = result["info"][1]
+ if len(datas) < 20:
+ break
+ for r in results:
+ if not r[18] and pid_info[1]:
+ r[18] = pid_info[1]
+ # 鏇挎崲鎺夋澘鍧楀悕绉�
+ for i in range(len(r)):
+ if type(r[i]) == str:
+ r[i] = kpl_util.filter_block(r[i])
+ fresults.extend(results)
+
+ return json.dumps({"errcode": 0, "list": fresults, "day": day})
+
+
def getLimitUpInfo():
list_ = []
- page_size = 50
+ page_size = 20
MAX_SIZE = 150
for i in range(0, 10):
result_str = daBanList(DABAN_TYPE_LIMIT_UP, page_size=page_size, index=len(list_))
@@ -59,6 +94,19 @@
elif len(list_) > MAX_SIZE:
return json.dumps(result)
return None
+
+
+def getHistoryLimitUpInfo(day):
+ fresults = []
+ for i in range(0, 100):
+ data = f"Order=1&a=HisDaBanList&st=20&c=HisHomeDingPan&PhoneOSNew=1&DeviceID=a38adabd-99ef-3116-8bb9-6d893c846e23&VerSion=5.8.0.2&Index={i * 20}&Is_st=1&PidType=1&apiv=w32&Type=6&FilterMotherboard=0&Filter=0&FilterTIB=0&Day={day}&FilterGem=0&"
+ result = __base_request("https://apphis.longhuvip.com/w1/api/index.php", data=data)
+ result = json.loads(result)
+ result = result["list"]
+ fresults.extend(result)
+ if len(result) < 20:
+ break
+ return fresults
# 甯傚満琛屾儏-琛屼笟
@@ -77,6 +125,13 @@
return result
+def getMarketJingXuanRealRankingInfoByTimeRange(startTime, endTime, date, orderJingE_DESC=True):
+ data = f"Order={1 if orderJingE_DESC else 0}&st=30&a=RealRankingInfo&apiv=w35&Type=5&Index=0&RStart={startTime}&c=ZhiShuRanking&VerSion=5.13.0.0&REnd={endTime}&Date={date}&PhoneOSNew=1&ZSType=7&DeviceID=d6f20ce9-fa08-31c9-a493-536ebb8e9773&"
+ result = __base_request("https://apphq.longhuvip.com/w1/api/index.php",
+ data=data)
+ return result
+
+
# 鑾峰彇浠g爜鐨勬澘鍧�
def getStockIDPlate(code):
data = f"a=GetStockIDPlate_New&apiv=w32&c=StockL2Data&StockID={code}&PhoneOSNew=1&UserID=0&DeviceID=a38adabd-99ef-3116-8bb9-6d893c846e23&VerSion=5.8.0.2&Token=0&"
@@ -90,6 +145,30 @@
# 鑾峰彇姒傚康浠g爜
def getCodesByPlate(plate_code):
data = f"Order=1&a=ZhiShuStockList_W8&st=30&c=ZhiShuRanking&PhoneOSNew=1&old=1&DeviceID=a38adabd-99ef-3116-8bb9-6d893c846e23&VerSion=5.8.0.2&IsZZ=0&Token=0&Index=0&apiv=w32&Type=6&IsKZZType=0&UserID=0&PlateID={plate_code}&"
+ return __base_request("https://apphq.longhuvip.com/w1/api/index.php",
+ data=data)
+
+
+def getCodesByPlateOrderByLZCS(plate_code):
+ """
+ 鏍规嵁棰嗘定娆℃暟鎺掑簭
+ @param plate_code:
+ @return:
+ """
+ data = f"Order=1&a=ZhiShuStockList_W8&st=30&c=ZhiShuRanking&PhoneOSNew=1&old=1&DeviceID=a38adabd-99ef-3116-8bb9-6d893c846e23&VerSion=5.8.0.2&IsZZ=0&Token=0&Index=0&apiv=w32&Type=27&IsKZZType=0&UserID=0&PlateID={plate_code}&"
+ return __base_request("https://apphq.longhuvip.com/w1/api/index.php",
+ data=data)
+
+
+def getHistoryCodesByPlateOrderByLZCS(plate_code, date, time_str):
+ """
+ 鏍规嵁棰嗘定娆℃暟鎺掑簭
+ @param date: 2025-05-25
+ @param time_str: 1025
+ @param plate_code: 110505
+ @return:
+ """
+ data = f"Order=1&a=ZhiShuStockList_W8&st=30&c=ZhiShuRanking&PhoneOSNew=1&RStart=0925&old=1&DeviceID=b692e51c-1bc4-3e8c-a01b-620aa6240e28&VerSion=5.8.0.4&IsZZ=0&Token=0&Index=0&Date={date}&REnd={time_str}&apiv=w33&Type=1&IsKZZType=0&UserID=0&PlateID={plate_code}&"
return __base_request("https://apphq.longhuvip.com/w1/api/index.php",
data=data)
@@ -116,12 +195,20 @@
# 鑾峰彇浠g爜鐨勭簿閫夋澘鍧�
# 杩斿洖鏍煎紡锛歔(鏉垮潡浠g爜,鏉垮潡鍚嶇О,娑ㄥ箙鐧惧垎姣�)]
-def getCodeJingXuanBlocks(code):
+def getCodeJingXuanBlocks(code, jx=True):
data = f"a=GetStockIDPlate&apiv=w32&Type=2&c=StockL2Data&StockID={code}&PhoneOSNew=1&UserID=0&DeviceID=a38adabd-99ef-3116-8bb9-6d893c846e23&VerSion=5.8.0.2&Token=0&"
result = __base_request("https://apphq.longhuvip.com/w1/api/index.php", data=data)
result = json.loads(result)
- print(result)
- return result.get("ListJX") if result.get("ListJX") else result.get("List")
+ # print(result)
+ if jx:
+ return result.get("ListJX") if result.get("ListJX") else result.get("List")
+ else:
+ fresults = []
+ if result.get("List"):
+ fresults.extend(result.get("List"))
+ if result.get("ListJX"):
+ fresults.extend(result.get("ListJX"))
+ return fresults
# 鑾峰彇鑷敱娴侀�氬競鍊�
@@ -134,7 +221,149 @@
return None
+# 鑾峰彇F10涓殑绮鹃�夋澘鍧�
+def __getConceptJXBK(code):
+ data = f"a=GetConceptJXBKw23&apiv=w32&c=StockF10Basic&StockID={code}&PhoneOSNew=1&DeviceID=a38adabd-99ef-3116-8bb9-6d893c846e23&VerSion=5.8.0.2&"
+ result = __base_request("https://apparticle.longhuvip.com/w1/api/index.php", data=data, timeout=3)
+ result = json.loads(result)
+ if result:
+ if "List" in result:
+ names = [kpl_util.filter_block(x["CName"]) for x in result["List"]]
+ return names if len(names) < 3 else names[:2]
+ return []
+
+
+# 鑾峰彇F10甯歌鏉垮潡
+def __getConceptBK(code):
+ data = f"a=GetConceptw23&apiv=w32&c=StockF10Basic&StockID={code}&PhoneOSNew=1&DeviceID=a38adabd-99ef-3116-8bb9-6d893c846e23&VerSion=5.8.0.2&"
+ result = __base_request("https://apparticle.longhuvip.com/w1/api/index.php", data=data, timeout=3)
+ result = json.loads(result)
+ if result:
+ if "List" in result:
+ names = [kpl_util.filter_block(x["CName"]) for x in result["List"]]
+ return names
+ return []
+
+
+# 鑾峰彇浠g爜鐨勬澘鍧�
+def getCodeBlocks(code):
+ blocks = []
+ try:
+ _bks = getCodeJingXuanBlocks(code)
+ # 鍙栧墠2涓�
+ if _bks and len(_bks) > 2:
+ _bks = _bks[:2]
+ _bks = [x[1] for x in _bks]
+ if _bks:
+ blocks.extend(_bks)
+ except:
+ pass
+ if not blocks:
+ try:
+ _bks = __getConceptBK(code)
+ print(_bks)
+ if _bks:
+ blocks.extend(_bks)
+ except:
+ pass
+ return list(set(blocks))
+
+
+# 鑾峰彇F10閲岄潰鐨勫ぇ浜嬩欢
+def __getF10BigReminders(code):
+ data = f"a=BigReminder&st=25&apiv=w32&c=StockF10Basic&StockID={code}&PhoneOSNew=1&DeviceID=a38adabd-99ef-3116-8bb8-6d893c846e23&VerSion=5.8.0.2&Index=0&"
+ result = __base_request("https://apparticle.longhuvip.com/w1/api/index.php", data=data, timeout=3)
+ result = json.loads(result)
+ if int(result["errcode"]) == 0:
+ return result["info"]
+ return None
+
+
+# 鑾峰彇鑲$エ鍑忔寔鏃ユ湡
+def getCodeReductionDate(code):
+ infos = __getF10BigReminders(code)
+ if not infos:
+ return None
+ keys = ["缁堟", "缁撴潫", "缁撴灉", "涓嶅噺鎸�", "瀹屾垚"]
+ for info in infos:
+ if info.get("type") == 5:
+ title = str(info.get("title"))
+ if title.find("鍑忔寔") < 0:
+ continue
+ wrong = False
+ for k in keys:
+ if title.find(k) >= 0:
+ wrong = True
+ if wrong:
+ continue
+ return info.get("date").split(" ")[0]
+ return None
+
+
+def getZLJECodesRank(index):
+ """
+ 鑾峰彇涓诲姏閲戦鐨勬帓琛�
+ @return:
+ """
+ data = f"Order=1&a=RealRankingInfo_W8&st=50&c=NewStockRanking&PhoneOSNew=1&RStart=0925&DeviceID=d6f20ce9-fa08-31c9-a493-536ebb8e9773&VerSion=5.13.0.0&Isst=0&index={index}&Date=&REnd=1420&apiv=w35&Type=1&FilterMotherboard=0&Filter=0&Ratio=6&FilterTIB=1&FilterGem=0&"
+ result = __base_request("https://apphwhq.longhuvip.com/w1/api/index.php", data=data, timeout=3)
+ result = json.loads(result)
+ return result
+
+
+def getMarketStrong():
+ """
+ 鑾峰彇甯傚満寮哄害
+ :return:
+ """
+ result = __base_request("https://apphwhq.longhuvip.com/w1/api/index.php",
+ data=f"a=DiskReview&apiv=w35&c=HomeDingPan&VerSion=5.13.0.0&PhoneOSNew=1&DeviceID=d6f20ce9-fa08-31c9-a493-536ebb8e9773&",
+ timeout=3)
+ data = json.loads(result)
+ return int(data["info"]["strong"])
+
+
+def request_new_blocks_codes(blocks_info):
+ """
+ 璇锋眰鏂版澘鍧楃殑浠g爜
+ @param blocks_info:[(鏉垮潡鍚嶇О,鏉垮潡浠g爜)]
+ @return:
+ """
+ yesterday_codes = set()
+ for bi in blocks_info:
+ result = getCodesByPlate(bi[1])
+ result = json.loads(result)
+ code_info_list = []
+ for d in result["list"]:
+ if d[0] in yesterday_codes:
+ continue
+ # 娑ㄥ箙瑕佸ぇ浜�5%
+ rate = d[6] / int(round((tool.get_limit_up_rate(d[0]) - 1) * 10))
+ if rate < 5:
+ continue
+ # 鏍煎紡锛�(浠g爜,娑ㄥ箙)
+ code_info_list.append((d[0], d[6]))
+ if code_info_list:
+ # 灏嗕唬鐮佸姞鍏ユ柊棰樻潗
+ for x in code_info_list:
+ print("娣诲姞", x)
+
+
if __name__ == "__main__":
- limit_up_infos = getLimitUpInfo()
- limit_up_infos = json.loads(limit_up_infos)
- print(limit_up_infos)
+ # result = getCodesByPlateOrderByLZCS("801074")
+ # result = json.loads(result)
+ # result = result["list"]
+ # for r in result:
+ # print(r)
+ # result = getCodeJingXuanBlocks("000756", True)
+ # for x in result:
+ result = getHistoryCodesByPlateOrderByLZCS("801074", "2025-05-16", "1025")
+ print(result)
+
+ # request_new_blocks_codes([("鏈哄櫒浜�", "801159")])
+ # result = getCodesByPlate("801159") # getHistoryLimitUpInfo("2024-02-19")
+ # result = json.loads(result)
+ # for d in result["list"]:
+ # print(d)
+ #
+ # print(result)
--
Gitblit v1.8.0