From d2a4dd9c837f8df2a19e58f7fb4c81a91c114b67 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期五, 15 八月 2025 13:15:32 +0800 Subject: [PATCH] 自动加想接口 --- third_data/kpl_api.py | 261 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 248 insertions(+), 13 deletions(-) diff --git a/third_data/kpl_api.py b/third_data/kpl_api.py index e23fc69..57e702c 100644 --- a/third_data/kpl_api.py +++ b/third_data/kpl_api.py @@ -1,9 +1,11 @@ import json +import time 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): +def __base_request(url, data, timeout=10): DELEGATE = True if not DELEGATE: headers = { @@ -26,21 +28,68 @@ } # proxies={'https': '192.168.3.251:9002'} # 绂佹浠g悊锛屼笉鐒朵細璧版湰鍦颁唬鐞� - response = requests.post(url, data=data, headers=headers, proxies={"http": None, "https": None}) + response = requests.post(url, data=data, headers=headers, proxies={"http": None, "https": None}, + timeout=timeout) if response.status_code != 200: 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): - data = "Order=1&a=DaBanList&st=50&c=HomeDingPan&PhoneOSNew=1&DeviceID=a38adabd-99ef-3116-8bb9-6d893c846e23" \ - f"&VerSion=5.8.0.2&Index=0&Is_st=1&PidType={pidType}&apiv=w32&Type=4&FilterMotherboard=0&Filter=0&FilterTIB=0" \ - "&FilterGem=0 " +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-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" 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 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 # 甯傚満琛屾儏-琛屼笟 @@ -59,6 +108,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&" @@ -72,6 +128,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) @@ -98,22 +178,177 @@ # 鑾峰彇浠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) - return result.get("ListJX") + # 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 # 鑾峰彇鑷敱娴侀�氬競鍊� def getZYLTAmount(code): data = f"a=GetStockPanKou_Narrow&apiv=w32&c=StockL2Data&VerSion=5.8.0.2&State=1&PhoneOSNew=1&DeviceID=a38adabd-99ef-3116-8bb9-6d893c846e23&StockID={code}&" - result = __base_request("https://apphq.longhuvip.com/w1/api/index.php", data=data) + result = __base_request("https://apphq.longhuvip.com/w1/api/index.php", data=data, timeout=3) result = json.loads(result) if "real" in result: return result["real"].get("actualcirculation_value") 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__": - print(len(json.loads(daBanList(DABAN_TYPE_LIMIT_UP))["list"])) + # result = getCodesByPlateOrderByLZCS("801074") + # result = json.loads(result) + # result = result["list"] + # for r in result: + # print(r) + # result = getCodeJingXuanBlocks("000756", True) + # for x in result: + results = getLimitUpInfoNew() + results = json.loads(results) + for d in results['list']: + print(len(d), d) + + # 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