feat: unify proxy config and centralize runtime logging

This commit is contained in:
crypto_predictor committed 2026-03-07 14:45:34 +08:00
1 parent 7af21bed6a
commit 80f2a82c19
9 files changed
+174 -43

No files matched your search

+23 -19
View File
@@ -12,9 +12,13 @@ import httpx
from typing import Optional, Dict, List, Any
from dataclasses import dataclass
from dotenv import load_dotenv
from utils.network_proxy import apply_global_proxy_from_env, get_proxy_url
from utils.project_logger import get_project_logger
# 加载环境变量
load_dotenv()
apply_global_proxy_from_env()
logger = get_project_logger("api.polymarket_client")
@dataclass
@@ -46,7 +50,7 @@ class PolymarketClient:
self.private_key = private_key or os.getenv("POLYMARKET_PRIVATE_KEY")
# 配置代理
proxy = os.getenv("SOCKS5_PROXY") if os.getenv("USE_PROXY", "false").lower() == "true" else None
proxy = get_proxy_url()
# HTTP客户端 - 禁用压缩避免brotli问题
self.http = httpx.Client(
@@ -79,9 +83,9 @@ class PolymarketClient:
# 获取或创建API凭证
self.clob_client.set_api_creds(self.clob_client.create_or_derive_api_creds())
print("✓ CLOB客户端初始化成功")
logger.info("CLOB客户端初始化成功")
except Exception as e:
print(f"⚠️ CLOB客户端初始化失败: {e}")
logger.warning("CLOB客户端初始化失败: %s", e)
self.clob_client = None
def search_markets(self, query: str = "BTC", limit: int = 20) -> List[Dict]:
@@ -111,7 +115,7 @@ class PolymarketClient:
filtered = [m for m in markets if query.lower() in m.get("question", "").lower()]
return filtered
except Exception as e:
print(f"搜索市场失败: {e}")
logger.error("搜索市场失败: %s", e)
return []
def search_btc_1h_markets(self) -> List[Dict]:
@@ -150,7 +154,7 @@ class PolymarketClient:
return btc_1h_markets
except Exception as e:
print(f"搜索BTC 1H市场失败: {e}")
logger.error("搜索BTC 1H市场失败: %s", e)
return []
def get_market_info(self, condition_id: str) -> Optional[MarketInfo]:
@@ -179,7 +183,7 @@ class PolymarketClient:
end_date=data.get("endDate", ""),
)
except Exception as e:
print(f"获取市场信息失败: {e}")
logger.error("获取市场信息失败: %s", e)
return None
def get_orderbook(self, token_id: str) -> Dict:
@@ -200,7 +204,7 @@ class PolymarketClient:
response.raise_for_status()
return response.json()
except Exception as e:
print(f"获取订单簿失败: {e}")
logger.error("获取订单簿失败: %s", e)
return {}
def get_price(self, token_id: str) -> Optional[float]:
@@ -222,7 +226,7 @@ class PolymarketClient:
data = response.json()
return float(data.get("price", 0))
except Exception as e:
print(f"获取价格失败: {e}")
logger.error("获取价格失败: %s", e)
return None
def place_market_order(
@@ -243,7 +247,7 @@ class PolymarketClient:
订单响应
"""
if not self.clob_client:
print("❌ CLOB客户端未初始化,无法下单")
logger.error("CLOB客户端未初始化,无法下单")
return None
try:
@@ -260,10 +264,10 @@ class PolymarketClient:
# 提交订单
response = self.clob_client.post_order(order)
print(f"✓ 订单已提交: {response}")
logger.info("订单已提交: %s", response)
return response
except Exception as e:
print(f"❌ 下单失败: {e}")
logger.error("下单失败: %s", e)
return None
def place_limit_order(
@@ -286,7 +290,7 @@ class PolymarketClient:
订单响应
"""
if not self.clob_client:
print("❌ CLOB客户端未初始化,无法下单")
logger.error("CLOB客户端未初始化,无法下单")
return None
try:
@@ -304,10 +308,10 @@ class PolymarketClient:
# 提交订单
response = self.clob_client.post_order(order)
print(f"✓ 限价单已提交: {response}")
logger.info("限价单已提交: %s", response)
return response
except Exception as e:
print(f"❌ 下单失败: {e}")
logger.error("下单失败: %s", e)
return None
def get_positions(self) -> List[Dict]:
@@ -318,14 +322,14 @@ class PolymarketClient:
仓位列表
"""
if not self.clob_client:
print("❌ CLOB客户端未初始化")
logger.error("CLOB客户端未初始化")
return []
try:
positions = self.clob_client.get_positions()
return positions
except Exception as e:
print(f"获取仓位失败: {e}")
logger.error("获取仓位失败: %s", e)
return []
def cancel_order(self, order_id: str) -> bool:
@@ -339,15 +343,15 @@ class PolymarketClient:
是否成功
"""
if not self.clob_client:
print("❌ CLOB客户端未初始化")
logger.error("CLOB客户端未初始化")
return False
try:
self.clob_client.cancel(order_id)
print(f"✓ 订单已取消: {order_id}")
logger.info("订单已取消: %s", order_id)
return True
except Exception as e:
print(f"❌ 取消订单失败: {e}")
logger.error("取消订单失败: %s", e)
return False
def close(self):