/
pyadminru
/
Checking-crypto-bot
Обзор
Документация
Войти
/
pyadminru
/
Checking-crypto-bot
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
parser/binance_parser.py
87 строк
3 KB
PyRusAdmin
Изменение requirements.txt. Рефакторинг кода. Структурирование проекта.
22 сен 2025, 23:56
22 сен 2025, 23:56
6e5524b
Код
Авторство
О чём код?
import datetime as dt import hashlib import hmac import time from urllib.parse import urlencode import asyncio import requests from loguru import logger from database.database import write_transaction from proxy import setup_proxy from system.system import user, password, ip, port, api_key, api_secret BASE = "https://api.binance.com" def sign(params: dict, secret: str): qs = urlencode(params) signature = hmac.new(secret.encode(), qs.encode(), hashlib.sha256).hexdigest() return qs + "&signature=" + signature def get_deposit_history(startTime=None, endTime=None, coin=None, network=None, limit=1000): setup_proxy(user=user, password=password, ip=ip, port=port) path = "/sapi/v1/capital/deposit/hisrec" ts = int(time.time() * 1000) params = {"timestamp": ts, "limit": limit} if startTime: params["startTime"] = int(startTime) if endTime: params["endTime"] = int(endTime) if coin: params["coin"] = coin if network: params["network"] = network signed_qs = sign(params, api_secret) headers = {"X-MBX-APIKEY": api_key} url = f"{BASE}{path}?{signed_qs}" r = requests.get(url, headers=headers, timeout=10) r.raise_for_status() return r.json() # Глобальная переменная для хранения времени последней проверки _last_check = int((dt.datetime.now() - dt.timedelta(minutes=5)).timestamp() * 1000) async def checking_deposits_binance(): global _last_check try: # Получаем депозиты с момента последней проверки now = int(time.time() * 1000) recs = await asyncio.to_thread(get_deposit_history, startTime=_last_check, limit=100) for r in recs: # Безопасное получение полей tx_id = r.get("txId") amount_str = r.get("amount") symbol = r.get("coin") to_address = r.get("address") complete_time = r.get("completeTime") # Пропускаем, если чего-то не хватает if not all([tx_id, amount_str, symbol, to_address, complete_time]): continue try: amount = float(amount_str) time_dt = dt.datetime.fromtimestamp(complete_time / 1000) except (ValueError, TypeError): continue # Записываем в БД await write_transaction( transaction_id=tx_id, time=time_dt, amount=amount, symbol=symbol, from_transaction="", to_transaction=to_address ) # Обновляем время последней проверки ТОЛЬКО если всё прошло успешно _last_check = now except Exception as e: # Или используй логгер, если подключен: logger.error(f"Ошибка в checking_deposits_binance: {e}")