From 74161f86030aed50b69643172b41c5c315000bdb Mon Sep 17 00:00:00 2001 From: 27942 Date: Thu, 11 Dec 2025 11:45:17 +0800 Subject: [PATCH] rgfewfger --- telegram/bot_session.session | Bin 36864 -> 36864 bytes test2.py | 3 + 交易/bitmart_交易.py | 183 ++++++++++++++++++++--------------- 交易/test.py | 72 ++++++++++++++ 4 files changed, 179 insertions(+), 79 deletions(-) create mode 100644 test2.py create mode 100644 交易/test.py diff --git a/telegram/bot_session.session b/telegram/bot_session.session index c6c9af40f0b15533cc0ca2ec0194af832bada389..3d04f67c2df486c85d1e2033cbb2acbb65202ada 100644 GIT binary patch delta 90 zcmZozz|^pSX@WH4|A{irjQ=+#Xyl8Y&T8=$WME@pWMN^F*PeKXJJZT^~2RrTA0Gt{j3IG5A delta 90 zcmZozz|^pSX@WH4mx(gYj9)e;Xyl9P+KU+rGO#f)vam48YfrqxooQuKI(cq>5DQ3V s^XGhjem0XW{AU=#CQEm!OwOr~V=^h*e5U>wCy<_e&sul$!A^TN003Ja9{>OV diff --git a/test2.py b/test2.py new file mode 100644 index 0000000..21714d5 --- /dev/null +++ b/test2.py @@ -0,0 +1,3 @@ +import time + +print(time.time()) diff --git a/交易/bitmart_交易.py b/交易/bitmart_交易.py index 7c68b70..d2e2c14 100644 --- a/交易/bitmart_交易.py +++ b/交易/bitmart_交易.py @@ -1,15 +1,13 @@ import re -import hmac import time -import base64 -import hashlib import datetime -import requests from tqdm import * from loguru import * from DrissionPage import * + from bs4 import BeautifulSoup +from curl_cffi import requests def is_bullish(c): # 阳线 @@ -45,43 +43,7 @@ class WeexTransaction: self.pbar = None # 进度条对象 - def get_signature(self, timestamp): - # 将时间戳和密钥拼接 - string_to_sign = f'{timestamp}\n{self.secret}' - string_to_sign = string_to_sign.encode('utf-8') - # 使用 HMAC-SHA256 算法进行签名 - hmac_code = hmac.new(self.secret.encode('utf-8'), string_to_sign, digestmod=hashlib.sha256).digest() - # 对签名结果进行 Base64 编码 - sign = base64.b64encode(hmac_code).decode('utf-8') - return sign - - # def send_dingtalk_message(self, message_content): - # # 获取当前时间戳(毫秒) - # timestamp = str(round(time.time() * 1000)) - # # 生成签名 - # sign = self.get_signature(timestamp, ) - # # 拼接带有签名信息的完整 Webhook URL - # full_url = f"{self.webhook_url}×tamp={timestamp}&sign={sign}" - # - # # 定义消息内容 - # message = { - # "msgtype": "text", - # "text": { - # "content": message_content - # } - # } - # - # # 设置请求头 - # headers = { - # "Content-Type": "application/json" - # } - # - # try: - # # 发送 POST 请求 - # response = requests.post(full_url, headers=headers, data=json.dumps(message)) - # - # except requests.RequestException as e: - # print(f"请求发生错误: {e}") + self.session = requests.Session() # 接口请求对象 def send_dingtalk_message(self, message_content): @@ -159,31 +121,55 @@ class WeexTransaction: def get_price(self): + headers = { + 'accept': 'application/json, text/plain, */*', + 'accept-language': 'zh-CN,zh;q=0.9', + 'cache-control': 'no-cache', + 'origin': 'https://derivatives.bitmart.com', + 'pragma': 'no-cache', + 'priority': 'u=1, i', + 'referer': 'https://derivatives.bitmart.com/', + 'sec-ch-ua': '"Not;A=Brand";v="99", "Google Chrome";v="139", "Chromium";v="139"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"Windows"', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'same-site', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36', + } + + params = { + 'unit': '30', + 'resolution': 'M', + 'contractID': '2', + 'offset': '340', + 'endTime': str(int(time.time())), + } + + datas = [] for i in range(3): + logger.info(f"获取最新数据:{i + 1}次。。。") try: - logger.info(f"获取最新数据:{i + 1}次。。。") - self.mn_tab.get(url="https://derivatives.bitmart.com/zh-CN/futures/ETHUSDT") - res = self.mn_tab.listen.wait(timeout=25) # 等待并获取一个数据包 + response = requests.get('https://contract-v2.bitmart.com/v1/ifcontract/quote/kline', params=params, headers=headers) - datas = [] - if res: + for i in response.json()["data"]: + print(i) - for data in res.response.body["data"]: - insert_data = { - 'id': int(data["timestamp"]) - 1, - 'open': float(data["open"]), - 'high': float(data["high"]), - 'low': float(data["low"]), - 'close': float(data["close"]) - } + insert_data = { + 'id': int(i["timestamp"]) - 1, + 'open': float(i["open"]), + 'high': float(i["high"]), + 'low': float(i["low"]), + 'close': float(i["close"]) + } - datas.append(insert_data) + datas.append(insert_data) - return datas + break except: - pass + time.sleep(1) - return False + return datas def remove_tags_and_spaces(self, html): # 创建 BeautifulSoup 对象 @@ -200,7 +186,14 @@ class WeexTransaction: self.mn_tab.ele('x:(//button[normalize-space(text()) = "市价"])').click() time.sleep(1) - self.mn_tab.ele('x://*[@id="size_0"]').input(float(self.get_num()) / 100) + num = self.get_num() + if num: + logger.info("获取可用余额成功!!!") + else: + logger.error("获取可用余额失败!!!") + return + + self.mn_tab.ele('x://*[@id="size_0"]').input(float(num) / 100) time.sleep(1) if self.direction == "long" and not self.start: @@ -285,22 +278,59 @@ class WeexTransaction: def get_num(self): - num_tab = self.page.new_tab() - num_tab.listen.start("derivatives.bitmart.com/gw-api/contract-tiger/forward/v1/ifcontract/accounts") + params = { + 'account_type': '3', + 'isServerCal': '1', + } for i in range(3): try: - logger.info(f"获取最新数据:{i + 1}次。。。") - num_tab.get(url="https://derivatives.bitmart.com/zh-CN/futures/ETHUSDT") - res = num_tab.listen.wait(timeout=15) # 等待并获取一个数据包 + response = self.session.get( + 'https://derivatives.bitmart.com/gw-api/contract-tiger/forward/v1/ifcontract/accounts', + params=params, + ) - if res: - num_tab.close() - return res.response.body["data"]["accounts"][0]["available_balance"] + return response.json()["data"]["accounts"][0]["available_balance"] except: - pass + time.sleep(1) - num_tab.close() + return False + + def get_token(self): + tab = self.page.new_tab() + tab.listen.start("derivatives.bitmart.com/gw-api/contract-tiger/forward/v1/ifcontract/userPositions") + tab.get(url="https://derivatives.bitmart.com/zh-CN/futures/ETHUSDT") + + tab.listen.listen.wait(timeout=15) + self.headers = tab.response.headers + + self.cookies = tab.cookies() + + self.session.cookies.update(self.cookies) + self.session.headers.update(self.headers) + + def get_position_status(self): + params = { + 'status': '1', + } + + for i in range(3): + try: + response = self.session.get( + 'https://derivatives.bitmart.com/gw-api/contract-tiger/forward/v1/ifcontract/userPositions', + params=params, + ) + + if response.json()["data"]["positions"][0]["position_type"] == 1: + self.start = 1 + elif response.json()["data"]["positions"][0]["position_type"] == 2: + self.start = -1 + else: + self.start = 0 + + return True + except: + time.sleep(1) return False @@ -325,10 +355,8 @@ class WeexTransaction: logger.info('关闭多余标签页失败!!!') self.mn_tab = self.page.new_tab() - self.mn_tab.listen.start("contract-v2.bitmart.com/v1/ifcontract/quote/kline") - logger.success("浏览器开启抓包模式。。。") - self.mn_tab.get(url="https://derivatives.bitmart.com/zh-CN/futures/ETHUSDT") # 打开网页 + self.mn_tab = self.page.new_tab(url="https://derivatives.bitmart.com/zh-CN/futures/ETHUSDT") # 打开网页 self.pbar = tqdm(total=30, desc="等待时间中", ncols=80) # desc:进度条说明,ncols:长度 @@ -363,14 +391,11 @@ class WeexTransaction: if self.get_now_time() != self.kline_3["id"]: continue - time.sleep(15) - - if self.get_text(target_text="全仓做多100X永续持仓"): - self.start = 1 - elif self.get_text(target_text="全仓做空100X永续持仓"): - self.start = -1 + if self.get_position_status(): + logger.info("获取仓位信息成功!!!") else: - self.start = 0 + logger.info("获取仓位信息失败!!!") + continue if self.start == 1: if is_bearish(self.kline_1) and is_bearish(self.kline_2): diff --git a/交易/test.py b/交易/test.py new file mode 100644 index 0000000..45975ac --- /dev/null +++ b/交易/test.py @@ -0,0 +1,72 @@ +import requests + +cookies = { + 'AF_SYNC': '1765258261595', + 'tradeType': 'pro', + '_ym_d': '1765261165', + '_ym_uid': '1765261165802134230', + '__adroll_fpc': '23875168b001e1ea5b3c338cadd7fe49-1762510277666', + '_gcl_au': '1.1.1161787028.1762510265', + 'afUserId': '1ac8dae1-3f99-4800-b10c-6a2f5b9128a2-p', + 'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2214768493%22%2C%22first_id%22%3A%2219a5dcc471d134b-052dcac363853b8-26011051-14540800-19a5dcc471ef33%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTlhNWRjYzQ3MWQxMzRiLTA1MmRjYWMzNjM4NTNiOC0yNjAxMTA1MS0xNDU0MDgwMC0xOWE1ZGNjNDcxZWYzMyIsIiRpZGVudGl0eV9sb2dpbl9pZCI6IjE0NzY4NDkzIn0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%2214768493%22%7D%2C%22%24device_id%22%3A%2219a5dcc471d134b-052dcac363853b8-26011051-14540800-19a5dcc471ef33%22%7D', + 'currentCurrency': 'USD', + '_gid': 'GA1.2.727267646.1765355541', + '_cfuvid': 'LqxpAwUIaf4fiq72Py_dM.deEKsZlGr2mGFEQZMcGiA-1765397364323-0.0.1.1-604800000', + 'golang': 'cn', + 'accessKey': 'eyJoZWFkZXIiOnsidHlwIjoiQml0TWFydCIsImFsZyI6IkJNQVBJU0lYIn0sInBheWxvYWQiOnsiamlkIjoiYzQxYWUzOGFjMjY1NDY1YjgyNDJiMGFlNGMzYmZlOWUiLCJ2ZXJzaW9uIjoiMjAyNTEyMTEiLCJleHBpcmVzQXQiOjE3NjU1MTAzMDkyMjMsImJtIjoia1NkYzJOY0JuQnVTdEsvTk1OamFlQ0R6NVRIeS9wZXIxNmdYeDZPRFBWLytxaVh0UW5WcWoyNjNobHQwSWNaQmZDVWh0N0xDUGRDZlpYYVg4aFJJekN6aGpubWxSNC9Sa2prQWNPR3NKUFo5SUp5N0MrSjhCa3pPTHJObE5mVFk0K0JjQkVCeEZuNVkvNXJEN2dYUWRVRm5MWkZpZXJ2V0doaW95ZzY5dHFFQ2JlK0FRMmJKU25qNmxRMWtNM3dCaHM2dzBvNVVhSFB4RXdmY3V5MFlObXVEZkllc1V1MFRERFRZZXFJOHltT2RqNmNUd2RuKzZlMnpJampZM3ZuVkhYOG9sblBkNTFVQ0RQM1YzUUY1QVFTRGVGd1ptYkUyTXNFR0R3QTRRTzBvZTlhMWozZWhneDlDY0IxTW1UMy96b3VrRFpESk80Tm9XVmNPU01YZzVEbDNpaU1Zeml6UWlxL1MvS1IxZUh4a0Vsa3Z6dEo1UzZGU2FYaWY3Yms2In0sInNpZ25hdHVyZSI6ImpsYTF3SUFySGtSdml2Z29QY1JKdEJMd1Vxb2RRb2VjUWFNY2NqK05XNFNXUzFjOFV1UGIvUnREd3V0Q3lGMStVVnBUbTFVQkZCQm1HekFEdjZBQnRnPT0ifQ==', + 'accessSalt': 'wxtMqnh06IDcwNWA2CJXVcWJgQEhONNngZu', + 'tokenAt': '1765510309223', + 'tokenSt': '1765423911627', + '__cf_bm': '0C1pnUOIxv6UEs41adhYfAK6xRZl4W8j5Vz1QJgiNJQ-1765424190-1.0.1.1-5hfWqfjxsvm3ebMH8k5InFTDa9.ASF9nnizvLopXaacWUKoOTCPj0AC42fjXnve7Q.oVOJHIz3x9Gn80uQOYUWBa8gMPMhZFqYk6OLlAIds', + 'hasDelegation': 'false', + 'delegationType': '0', + 'delegationTypeList': '[]', + '_ga_R8QWWJS24Y': 'GS2.1.s1765422430$o5$g1$t1765424194$j58$l0$h0', + '_ga_7BWH3BJ925': 'GS2.1.s1765422430$o6$g1$t1765424194$j58$l0$h0', + '_ga_PJBF32MZ6E': 'GS2.1.s1765422430$o6$g1$t1765424194$j58$l0$h0', + '_ga_0V649X1YZB': 'GS2.1.s1765422430$o5$g1$t1765424194$j58$l0$h0', + '_ga': 'GA1.2.1461651029.1762510272', +} + +headers = { + 'accept': 'application/json, text/plain, */*', + 'accept-language': 'zh-CN,zh;q=0.9', + 'baggage': 'sentry-environment=production,sentry-release=e9b215a,sentry-public_key=42eada5febd1737fdcb9413516bdb44f,sentry-trace_id=dcfafebe185040448b9fa1864b4d65f0,sentry-sampled=false,sentry-sample_rand=0.7037873385703364,sentry-sample_rate=0.2', + 'cache-control': 'no-cache', + 'content-type': 'application/json;charset=UTF-8', + 'expires': '0', + 'pragma': 'no-cache', + 'priority': 'u=1, i', + 'referer': 'https://derivatives.bitmart.com/zh-CN/futures/ETHUSDT?theme=dark', + 'sec-ch-ua': '"Not;A=Brand";v="99", "Google Chrome";v="139", "Chromium";v="139"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"Windows"', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'same-origin', + 'sentry-trace': 'dcfafebe185040448b9fa1864b4d65f0-8663a32b9bdfc923-0', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36', + 'x-bm-client': 'WEB', + 'x-bm-contract': '2', + 'x-bm-device': '4e796e2e0eab358305db106ff976ef2e', + 'x-bm-tag': '', + 'x-bm-timezone': 'Asia/Shanghai', + 'x-bm-timezone-offset': '-480', + 'x-bm-ua': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36', + 'x-bm-version': 'e9b215a', + # 'cookie': 'AF_SYNC=1765258261595; tradeType=pro; _ym_d=1765261165; _ym_uid=1765261165802134230; __adroll_fpc=23875168b001e1ea5b3c338cadd7fe49-1762510277666; _gcl_au=1.1.1161787028.1762510265; afUserId=1ac8dae1-3f99-4800-b10c-6a2f5b9128a2-p; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2214768493%22%2C%22first_id%22%3A%2219a5dcc471d134b-052dcac363853b8-26011051-14540800-19a5dcc471ef33%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTlhNWRjYzQ3MWQxMzRiLTA1MmRjYWMzNjM4NTNiOC0yNjAxMTA1MS0xNDU0MDgwMC0xOWE1ZGNjNDcxZWYzMyIsIiRpZGVudGl0eV9sb2dpbl9pZCI6IjE0NzY4NDkzIn0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%2214768493%22%7D%2C%22%24device_id%22%3A%2219a5dcc471d134b-052dcac363853b8-26011051-14540800-19a5dcc471ef33%22%7D; currentCurrency=USD; _gid=GA1.2.727267646.1765355541; _cfuvid=LqxpAwUIaf4fiq72Py_dM.deEKsZlGr2mGFEQZMcGiA-1765397364323-0.0.1.1-604800000; golang=cn; accessKey=eyJoZWFkZXIiOnsidHlwIjoiQml0TWFydCIsImFsZyI6IkJNQVBJU0lYIn0sInBheWxvYWQiOnsiamlkIjoiYzQxYWUzOGFjMjY1NDY1YjgyNDJiMGFlNGMzYmZlOWUiLCJ2ZXJzaW9uIjoiMjAyNTEyMTEiLCJleHBpcmVzQXQiOjE3NjU1MTAzMDkyMjMsImJtIjoia1NkYzJOY0JuQnVTdEsvTk1OamFlQ0R6NVRIeS9wZXIxNmdYeDZPRFBWLytxaVh0UW5WcWoyNjNobHQwSWNaQmZDVWh0N0xDUGRDZlpYYVg4aFJJekN6aGpubWxSNC9Sa2prQWNPR3NKUFo5SUp5N0MrSjhCa3pPTHJObE5mVFk0K0JjQkVCeEZuNVkvNXJEN2dYUWRVRm5MWkZpZXJ2V0doaW95ZzY5dHFFQ2JlK0FRMmJKU25qNmxRMWtNM3dCaHM2dzBvNVVhSFB4RXdmY3V5MFlObXVEZkllc1V1MFRERFRZZXFJOHltT2RqNmNUd2RuKzZlMnpJampZM3ZuVkhYOG9sblBkNTFVQ0RQM1YzUUY1QVFTRGVGd1ptYkUyTXNFR0R3QTRRTzBvZTlhMWozZWhneDlDY0IxTW1UMy96b3VrRFpESk80Tm9XVmNPU01YZzVEbDNpaU1Zeml6UWlxL1MvS1IxZUh4a0Vsa3Z6dEo1UzZGU2FYaWY3Yms2In0sInNpZ25hdHVyZSI6ImpsYTF3SUFySGtSdml2Z29QY1JKdEJMd1Vxb2RRb2VjUWFNY2NqK05XNFNXUzFjOFV1UGIvUnREd3V0Q3lGMStVVnBUbTFVQkZCQm1HekFEdjZBQnRnPT0ifQ==; accessSalt=wxtMqnh06IDcwNWA2CJXVcWJgQEhONNngZu; tokenAt=1765510309223; tokenSt=1765423911627; __cf_bm=0C1pnUOIxv6UEs41adhYfAK6xRZl4W8j5Vz1QJgiNJQ-1765424190-1.0.1.1-5hfWqfjxsvm3ebMH8k5InFTDa9.ASF9nnizvLopXaacWUKoOTCPj0AC42fjXnve7Q.oVOJHIz3x9Gn80uQOYUWBa8gMPMhZFqYk6OLlAIds; hasDelegation=false; delegationType=0; delegationTypeList=[]; _ga_R8QWWJS24Y=GS2.1.s1765422430$o5$g1$t1765424194$j58$l0$h0; _ga_7BWH3BJ925=GS2.1.s1765422430$o6$g1$t1765424194$j58$l0$h0; _ga_PJBF32MZ6E=GS2.1.s1765422430$o6$g1$t1765424194$j58$l0$h0; _ga_0V649X1YZB=GS2.1.s1765422430$o5$g1$t1765424194$j58$l0$h0; _ga=GA1.2.1461651029.1762510272', +} + +params = { + 'account_type': '3', + 'isServerCal': '1', +} + +response = requests.get( + 'https://derivatives.bitmart.com/gw-api/contract-tiger/forward/v1/ifcontract/accounts', + params=params, + cookies=cookies, + headers=headers, +) + +print(response.json()["data"]["accounts"][0]["available_balance"]) \ No newline at end of file