#!/usr/bin/env python3 """ 批次6:验证加密货币全品种 + 传统金融代币化品种 目标:新增 60+ 个不重复数据源端点 """ import requests import json import time results = {} def test(name, url, params=None, headers=None, method="GET", body=None, timeout=15): """通用测试函数""" try: h = {"User-Agent": "QuantKnowledge/2.0"} if headers: h.update(headers) start = time.time() if method == "POST": r = requests.post(url, json=body, headers=h, timeout=timeout) else: r = requests.get(url, params=params, headers=h, timeout=timeout) elapsed = round((time.time() - start) * 1000) if r.status_code == 200: data = r.json() if 'json' in r.headers.get('content-type','') else r.text[:200] sample = str(data)[:300] results[name] = {"status": "✅ PASS", "latency": f"{elapsed}ms", "sample": data if isinstance(data, dict) else sample} print(f"✅ {name} ({elapsed}ms)") return data else: results[name] = {"status": f"❌ HTTP {r.status_code}", "latency": f"{elapsed}ms"} print(f"❌ {name} HTTP {r.status_code}") return None except Exception as e: results[name] = {"status": f"❌ {str(e)[:80]}", "latency": "timeout"} print(f"❌ {name}: {str(e)[:60]}") return None print("=" * 60) print("第6批:加密货币全品种数据源验证") print("=" * 60) # ─── 一、Binance 多品种资金费率 + K线 ───────────────────────────────── print("\n--- Binance 多品种 ---") binance_symbols = [ ("ADA", "ADAUSDT"), ("AVAX", "AVAXUSDT"), ("DOT", "DOTUSDT"), ("MATIC", "MATICUSDT"), ("LINK", "LINKUSDT"), ("UNI", "UNIUSDT"), ("AAVE", "AAVEUSDT"), ("OP", "OPUSDT"), ("ARB", "ARBUSDT"), ("APT", "APTUSDT"), ("SUI", "SUIUSDT"), ("SEI", "SEIUSDT"), ("TIA", "TIAUSDT"), ("INJ", "INJUSDT"), ("FET", "FETUSDT"), ("RNDR", "RNDRUSDT"), ("WLD", "WLDUSDT"), ("PEPE", "PEPEUSDT"), ("SHIB", "SHIBUSDT"), ("FLOKI", "FLOKIUSDT"), ("WIF", "WIFUSDT"), ("BONK", "BONKUSDT"), ("NEAR", "NEARUSDT"), ("FIL", "FILUSDT"), ("ATOM", "ATOMUSDT"), ("LTC", "LTCUSDT"), ("BCH", "BCHUSDT"), ("ETC", "ETCUSDT"), ("MKR", "MKRUSDT"), ("SNX", "SNXUSDT"), ("CRV", "CRVUSDT"), ("LDO", "LDOUSDT"), ("PENDLE", "PENDLEUSDT"), ("STX", "STXUSDT"), ("ORDI", "ORDIUSDT"), ("1000SATS", "1000SATSUSDT"), ("JUP", "JUPUSDT"), ("ONDO", "ONDOUSDT"), ("TAO", "TAOUSDT"), ("RENDER", "RENDERUSDT"), ] for coin_name, symbol in binance_symbols: test( f"Binance {coin_name} 资金费率", f"https://fapi.binance.com/fapi/v1/premiumIndex", params={"symbol": symbol} ) time.sleep(0.05) # 避免限流 # ─── 二、Binance 多品种 K 线 (选取代表性品种) ───────────────────────── print("\n--- Binance 多品种 K 线 ---") kline_symbols = [ ("ADA", "ADAUSDT"), ("AVAX", "AVAXUSDT"), ("DOT", "DOTUSDT"), ("LINK", "LINKUSDT"), ("UNI", "UNIUSDT"), ("OP", "OPUSDT"), ("ARB", "ARBUSDT"), ("PEPE", "PEPEUSDT"), ("SHIB", "SHIBUSDT"), ("NEAR", "NEARUSDT"), ("ATOM", "ATOMUSDT"), ("LTC", "LTCUSDT"), ] for coin_name, symbol in kline_symbols: test( f"Binance {coin_name} 合约K线", f"https://fapi.binance.com/fapi/v1/klines", params={"symbol": symbol, "interval": "1h", "limit": 2} ) time.sleep(0.05) # ─── 三、CoinGecko 多品种详细数据 ───────────────────────────────────── print("\n--- CoinGecko 多品种 ---") cg_coins = [ ("avalanche-2", "AVAX"), ("polkadot", "DOT"), ("cardano", "ADA"), ("uniswap", "UNI"), ("aave", "AAVE"), ("optimism", "OP"), ("arbitrum", "ARB"), ("aptos", "APT"), ("sui", "SUI"), ("celestia", "TIA"), ("injective-protocol", "INJ"), ("fetch-ai", "FET"), ("render-token", "RNDR"), ("worldcoin-wld", "WLD"), ("pepe", "PEPE"), ("shiba-inu", "SHIB"), ("dogwifcoin", "WIF"), ("bonk", "BONK"), ("near", "NEAR"), ("filecoin", "FIL"), ("cosmos", "ATOM"), ("litecoin", "LTC"), ("bitcoin-cash", "BCH"), ("maker", "MKR"), ("lido-dao", "LDO"), ("pendle", "PENDLE"), ("stacks", "STX"), ("ondo-finance", "ONDO"), ] for cg_id, symbol in cg_coins: test( f"CoinGecko {symbol} 详细数据", f"https://api.coingecko.com/api/v3/simple/price", params={"ids": cg_id, "vs_currencies": "usd", "include_market_cap": "true", "include_24hr_vol": "true", "include_24hr_change": "true"} ) time.sleep(2.5) # CoinGecko 30/min 限制 # ─── 四、CoinPaprika 多品种 ───────────────────────────────────────── print("\n--- CoinPaprika 多品种 ---") cp_coins = [ ("ada-cardano", "ADA"), ("avax-avalanche", "AVAX"), ("dot-polkadot", "DOT"), ("link-chainlink", "LINK"), ("uni-uniswap", "UNI"), ("ltc-litecoin", "LTC"), ("atom-cosmos", "ATOM"), ("near-near-protocol", "NEAR"), ("op-optimism", "OP"), ("arb-arbitrum", "ARB"), ("pepe-pepe", "PEPE"), ("shib-shiba-inu", "SHIB"), ] for cp_id, symbol in cp_coins: test( f"CoinPaprika {symbol} 行情", f"https://api.coinpaprika.com/v1/tickers/{cp_id}" ) time.sleep(0.15) # ─── 五、Hyperliquid 多品种 ───────────────────────────────────────── print("\n--- Hyperliquid 多品种 ---") data = test( "Hyperliquid 全品种永续合约", "https://api.hyperliquid.xyz/info", method="POST", body={"type": "metaAndAssetCtxs"} ) if data: # 提取所有品种 try: universe = data[0]["universe"] if isinstance(data, list) else data.get("universe", []) coins = [u["name"] for u in universe[:50]] results["Hyperliquid 全品种永续合约"]["sample"] = { "total_assets": len(universe), "top20": coins[:20] } print(f" Hyperliquid 品种数: {len(universe)}") except: pass # ─── 六、DexScreener 热门代币 ───────────────────────────────────── print("\n--- DexScreener 热门代币 ---") dex_tokens = [ ("PEPE", "0x6982508145454Ce325dDbE47a25d4ec3d2311933"), ("SHIB", "0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE"), ("FLOKI", "0xcf0C122c6b73ff809C693DB761e7BaeBe62b6a2E"), ] for name, addr in dex_tokens: test( f"DexScreener {name} DEX交易对", f"https://api.dexscreener.com/latest/dex/tokens/{addr}" ) time.sleep(0.3) # ─── 七、Bybit 多品种 ───────────────────────────────────────────── print("\n--- Bybit 多品种 ---") bybit_symbols = [ ("ADA", "ADAUSDT"), ("AVAX", "AVAXUSDT"), ("DOT", "DOTUSDT"), ("LINK", "LINKUSDT"), ("OP", "OPUSDT"), ("ARB", "ARBUSDT"), ("PEPE", "PEPEUSDT"), ("NEAR", "NEARUSDT"), ("ATOM", "ATOMUSDT"), ] for coin_name, symbol in bybit_symbols: test( f"Bybit {coin_name} 合约K线", f"https://api.bybit.com/v5/market/kline", params={"category": "linear", "symbol": symbol, "interval": "60", "limit": 2} ) time.sleep(0.1) # ─── 八、OKX 多品种 ───────────────────────────────────────────── print("\n--- OKX 多品种 ---") okx_symbols = [ ("ADA", "ADA-USDT-SWAP"), ("AVAX", "AVAX-USDT-SWAP"), ("DOT", "DOT-USDT-SWAP"), ("LINK", "LINK-USDT-SWAP"), ("OP", "OP-USDT-SWAP"), ("ARB", "ARB-USDT-SWAP"), ("PEPE", "PEPE-USDT-SWAP"), ("NEAR", "NEAR-USDT-SWAP"), ] for coin_name, inst_id in okx_symbols: test( f"OKX {coin_name} 资金费率", f"https://www.okx.com/api/v5/public/funding-rate", params={"instId": inst_id} ) time.sleep(0.15) # ─── 九、Deribit 多品种期权 ───────────────────────────────────────── print("\n--- Deribit 多品种 ---") test( "Deribit ETH 期权合约列表", "https://www.deribit.com/api/v2/public/get_instruments", params={"currency": "ETH", "kind": "option", "expired": "false"} ) time.sleep(0.1) test( "Deribit SOL 期权合约列表", "https://www.deribit.com/api/v2/public/get_instruments", params={"currency": "SOL", "kind": "option", "expired": "false"} ) time.sleep(0.1) test( "Deribit SOL 指数价格", "https://www.deribit.com/api/v2/public/get_index_price", params={"currency": "SOL"} ) # ─── 十、传统金融代币化品种 (Binance 股票代币已下线,用其他方式) ────── print("\n--- 传统金融代币化品种 ---") # PAXG (黄金代币) - Binance test( "Binance PAXG/USDT 黄金代币", "https://api.binance.com/api/v3/ticker/24hr", params={"symbol": "PAXGUSDT"} ) time.sleep(0.05) # PAXG K线 test( "Binance PAXG K线 (黄金代币)", "https://api.binance.com/api/v3/klines", params={"symbol": "PAXGUSDT", "interval": "1h", "limit": 3} ) time.sleep(0.05) # tBTC (Wrapped BTC) test( "CoinGecko tBTC 数据", "https://api.coingecko.com/api/v3/simple/price", params={"ids": "tbtc", "vs_currencies": "usd", "include_market_cap": "true"} ) time.sleep(2.5) # WBTC test( "CoinGecko WBTC 数据", "https://api.coingecko.com/api/v3/simple/price", params={"ids": "wrapped-bitcoin", "vs_currencies": "usd", "include_market_cap": "true"} ) time.sleep(2.5) # stETH test( "CoinGecko stETH 数据", "https://api.coingecko.com/api/v3/simple/price", params={"ids": "staked-ether", "vs_currencies": "usd", "include_market_cap": "true"} ) time.sleep(2.5) # rETH test( "CoinGecko rETH 数据", "https://api.coingecko.com/api/v3/simple/price", params={"ids": "rocket-pool-eth", "vs_currencies": "usd", "include_market_cap": "true"} ) time.sleep(2.5) # RWA 代币 rwa_coins = [ ("ondo-finance", "ONDO"), ("maker", "MKR"), ("centrifuge", "CFG"), ("maple-finance", "MPL"), ("goldfinch", "GFI"), ] for cg_id, symbol in rwa_coins: test( f"CoinGecko {symbol} RWA代币", f"https://api.coingecko.com/api/v3/simple/price", params={"ids": cg_id, "vs_currencies": "usd", "include_market_cap": "true", "include_24hr_vol": "true"} ) time.sleep(2.5) # AI 代币 ai_coins = [ ("fetch-ai", "FET"), ("singularitynet", "AGIX"), ("ocean-protocol", "OCEAN"), ("render-token", "RNDR"), ("bittensor", "TAO"), ("akash-network", "AKT"), ] for cg_id, symbol in ai_coins: test( f"CoinGecko {symbol} AI代币", f"https://api.coingecko.com/api/v3/simple/price", params={"ids": cg_id, "vs_currencies": "usd", "include_market_cap": "true", "include_24hr_vol": "true"} ) time.sleep(2.5) # ─── 十一、DeFiLlama 更多协议 ───────────────────────────────────── print("\n--- DeFiLlama 更多协议 ---") llama_protocols = [ "uniswap", "curve-dex", "pancakeswap", "gmx", "dydx", "compound-v3", "morpho", "eigenlayer", "jito", "marinade-finance", "raydium", "orca", "jupiter-aggregator", ] for proto in llama_protocols: test( f"DeFiLlama {proto} 协议数据", f"https://api.llama.fi/protocol/{proto}" ) time.sleep(0.3) # ─── 十二、Yahoo Finance 更多品种 ───────────────────────────────── print("\n--- Yahoo Finance 更多品种 ---") yahoo_extra = [ ("NG=F", "天然气"), ("ZC=F", "玉米期货"), ("ZW=F", "小麦期货"), ("ZS=F", "大豆期货"), ("PL=F", "铂金"), ("PA=F", "钯金"), ("^FTSE", "富时100"), ("^GDAXI", "德国DAX"), ("^FCHI", "法国CAC40"), ("^KS11", "韩国KOSPI"), ("^TWII", "台湾加权"), ("^BVSP", "巴西BOVESPA"), ("000001.SS", "上证指数"), ("BTC-USD", "BTC/USD"), ("ETH-USD", "ETH/USD"), ("SOL-USD", "SOL/USD"), ("GBTC", "Grayscale BTC"), ("ARKB", "ARK BTC ETF"), ("BITB", "Bitwise BTC ETF"), ("BITO", "ProShares BTC期货ETF"), ] for symbol, name in yahoo_extra: test( f"Yahoo {name} ({symbol})", f"https://query1.finance.yahoo.com/v8/finance/chart/{symbol}", params={"interval": "1d", "range": "5d"}, headers={"User-Agent": "Mozilla/5.0"} ) time.sleep(0.2) # ─── 保存结果 ───────────────────────────────────────────────────── with open("verify_batch6_results.json", "w") as f: json.dump(results, f, ensure_ascii=False, indent=2, default=str) passed = sum(1 for v in results.values() if "✅" in v["status"]) failed = sum(1 for v in results.values() if "❌" in v["status"]) print(f"\n{'='*60}") print(f"第6批验证完成: {passed} 通过 / {failed} 失败 / 总计 {len(results)}") print(f"{'='*60}")