market movers v4 complement fallback
Browse files
backend/routers/expanded_market_api.py
CHANGED
|
@@ -219,6 +219,25 @@ async def fetch_market_movers(limit: int) -> tuple[List[dict], str]:
|
|
| 219 |
logger.warning("CoinPaprika movers failed, trying Binance...")
|
| 220 |
rows = await _fetch_markets_from_binance(limit)
|
| 221 |
source = "binance"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 222 |
|
| 223 |
if not rows:
|
| 224 |
raise HTTPException(status_code=503, detail="All market mover providers unavailable")
|
|
|
|
| 219 |
logger.warning("CoinPaprika movers failed, trying Binance...")
|
| 220 |
rows = await _fetch_markets_from_binance(limit)
|
| 221 |
source = "binance"
|
| 222 |
+
if not rows:
|
| 223 |
+
logger.warning("Binance movers failed, trying v4 complement Space...")
|
| 224 |
+
try:
|
| 225 |
+
from backend.services.v4_complement_client import get_market_gainers
|
| 226 |
+
v4 = await get_market_gainers(limit)
|
| 227 |
+
if v4.get("success"):
|
| 228 |
+
v4data = v4.get("data") or {}
|
| 229 |
+
for g in v4data.get("gainers") or []:
|
| 230 |
+
rows.append(_normalize_market_row({
|
| 231 |
+
"symbol": g.get("symbol"),
|
| 232 |
+
"name": g.get("name"),
|
| 233 |
+
"priceUsd": g.get("price"),
|
| 234 |
+
"changePercent24Hr": g.get("change_24h"),
|
| 235 |
+
"volumeUsd24Hr": g.get("volume_24h"),
|
| 236 |
+
}, "v4_complement"))
|
| 237 |
+
if rows:
|
| 238 |
+
source = "v4_complement"
|
| 239 |
+
except Exception as v4_err:
|
| 240 |
+
logger.warning("v4 complement movers failed: %s", v4_err)
|
| 241 |
|
| 242 |
if not rows:
|
| 243 |
raise HTTPException(status_code=503, detail="All market mover providers unavailable")
|