#!/usr/bin/env python3 """ 数据源验证脚本 - 第三批(编号 56-85) 全部为新增不重复数据源 CEX补充 / DEX / 链上 / DeFi / 衍生品 / 稳定币 / 矿业 """ import requests, json, time TIMEOUT = 12 results = {} def test(name, fn): try: start = time.time() data = fn() elapsed = round((time.time() - start) * 1000) results[name] = {"status": "✅", "latency_ms": elapsed, "sample": data} print(f"✅ {name} ({elapsed}ms)") except Exception as e: results[name] = {"status": "❌", "error": str(e)[:200]} print(f"❌ {name}: {str(e)[:120]}") # ─── CEX 补充 ────────────────────────────────────────────────────────────── # 56. MEXC K线 def t56(): r = requests.get("https://api.mexc.com/api/v3/klines", params={"symbol":"BTCUSDT","interval":"1h","limit":"3"}, timeout=TIMEOUT) r.raise_for_status(); d=r.json(); k=d[-1] return {"open":k[1],"high":k[2],"low":k[3],"close":k[4],"volume":k[5]} test("MEXC BTC/USDT K线", t56) # 57. KuCoin K线 def t57(): r = requests.get("https://api.kucoin.com/api/v1/market/candles", params={"type":"1hour","symbol":"BTC-USDT","startAt":str(int(time.time())-7200),"endAt":str(int(time.time()))}, timeout=TIMEOUT) r.raise_for_status(); d=r.json()["data"] return {"time":d[0][0],"open":d[0][1],"close":d[0][2],"high":d[0][3],"low":d[0][4],"volume":d[0][5]} test("KuCoin BTC/USDT K线", t57) # 58. Binance 现货深度 def t58(): r = requests.get("https://api.binance.com/api/v3/depth", params={"symbol":"BTCUSDT","limit":"5"}, timeout=TIMEOUT) r.raise_for_status(); d=r.json() return {"best_bid":d["bids"][0],"best_ask":d["asks"][0],"bid_levels":len(d["bids"]),"ask_levels":len(d["asks"])} test("Binance BTC/USDT 订单簿深度", t58) # 59. Binance 最近成交 def t59(): r = requests.get("https://api.binance.com/api/v3/trades", params={"symbol":"BTCUSDT","limit":"5"}, timeout=TIMEOUT) r.raise_for_status(); d=r.json() return {"latest_price":d[-1]["price"],"latest_qty":d[-1]["qty"],"isBuyerMaker":d[-1]["isBuyerMaker"],"time":d[-1]["time"]} test("Binance BTC/USDT 最近成交", t59) # 60. Binance 合约深度 def t60(): r = requests.get("https://fapi.binance.com/fapi/v1/depth", params={"symbol":"BTCUSDT","limit":"5"}, timeout=TIMEOUT) r.raise_for_status(); d=r.json() return {"best_bid":d["bids"][0],"best_ask":d["asks"][0]} test("Binance合约 BTC/USDT 订单簿", t60) # 61. OKX 行情Ticker def t61(): r = requests.get("https://www.okx.com/api/v5/market/ticker", params={"instId":"BTC-USDT"}, timeout=TIMEOUT) r.raise_for_status(); d=r.json()["data"][0] return {"last":d["last"],"askPx":d["askPx"],"bidPx":d["bidPx"],"vol24h":d["vol24h"],"volCcy24h":d["volCcy24h"]} test("OKX BTC/USDT 现货Ticker", t61) # 62. Bybit 现货Ticker def t62(): r = requests.get("https://api.bybit.com/v5/market/tickers", params={"category":"spot","symbol":"BTCUSDT"}, timeout=TIMEOUT) r.raise_for_status(); d=r.json()["result"]["list"][0] return {"lastPrice":d["lastPrice"],"bid1Price":d["bid1Price"],"ask1Price":d["ask1Price"],"volume24h":d["volume24h"]} test("Bybit BTC/USDT 现货Ticker", t62) # 63. Kraken Ticker def t63(): r = requests.get("https://api.kraken.com/0/public/Ticker", params={"pair":"XBTUSD"}, timeout=TIMEOUT) r.raise_for_status(); d=r.json()["result"]["XXBTZUSD"] return {"ask":d["a"][0],"bid":d["b"][0],"last":d["c"][0],"volume":d["v"][1]} test("Kraken BTC/USD Ticker", t63) # 64. Gate.io 现货Ticker def t64(): r = requests.get("https://api.gateio.ws/api/v4/spot/tickers", params={"currency_pair":"BTC_USDT"}, timeout=TIMEOUT) r.raise_for_status(); d=r.json()[0] return {"last":d["last"],"high_24h":d["high_24h"],"low_24h":d["low_24h"],"base_volume":d["base_volume"]} test("Gate.io BTC/USDT 现货Ticker", t64) # 65. HTX(Huobi) Ticker def t65(): r = requests.get("https://api.huobi.pro/market/detail/merged", params={"symbol":"btcusdt"}, timeout=TIMEOUT) r.raise_for_status(); d=r.json()["tick"] return {"close":d["close"],"high":d["high"],"low":d["low"],"vol":d["vol"]} test("HTX(Huobi) BTC/USDT Ticker", t65) # 66. Bitfinex Ticker def t66(): r = requests.get("https://api-pub.bitfinex.com/v2/ticker/tBTCUSD", timeout=TIMEOUT) r.raise_for_status(); d=r.json() return {"bid":d[0],"ask":d[2],"last_price":d[6],"volume":d[7],"high":d[8],"low":d[9]} test("Bitfinex BTC/USD Ticker", t66) # 67. Crypto.com Ticker def t67(): r = requests.get("https://api.crypto.com/exchange/v1/public/get-tickers", params={"instrument_name":"BTC_USDT"}, timeout=TIMEOUT) r.raise_for_status(); d=r.json()["result"]["data"][0] return {"a":d["a"],"b":d["b"],"h":d["h"],"l":d["l"],"v":d["v"]} test("Crypto.com BTC/USDT Ticker", t67) # ─── DEX 数据 ────────────────────────────────────────────────────────────── # 68. DexScreener 热门交易对 def t68(): r = requests.get("https://api.dexscreener.com/latest/dex/tokens/0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", timeout=TIMEOUT) r.raise_for_status(); d=r.json() pairs = d.get("pairs", [])[:2] return {"pairs_count":len(d.get("pairs",[])),"sample":[{"dex":p["dexId"],"price":p["priceUsd"],"volume_24h":p.get("volume",{}).get("h24")} for p in pairs]} test("DexScreener WBTC交易对", t68) # 69. DexScreener 搜索 def t69(): r = requests.get("https://api.dexscreener.com/latest/dex/search?q=PEPE", timeout=TIMEOUT) r.raise_for_status(); d=r.json() pairs = d.get("pairs", [])[:3] return {"total_pairs":len(d.get("pairs",[])),"top":[{"name":p.get("baseToken",{}).get("name"),"price":p.get("priceUsd"),"chain":p.get("chainId")} for p in pairs]} test("DexScreener PEPE搜索", t69) # 70. 1inch 代币价格 def t70(): r = requests.get("https://api.1inch.dev/price/v1.1/1/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", headers={"Accept":"application/json"}, timeout=TIMEOUT) if r.status_code == 200: return r.json() # 备用:用 CoinGecko 获取 ETH 价格 r2 = requests.get("https://api.coingecko.com/api/v3/simple/price", params={"ids":"ethereum","vs_currencies":"usd"}, timeout=TIMEOUT) r2.raise_for_status() return {"source":"coingecko_fallback","ethereum":r2.json()["ethereum"]} test("1inch/CoinGecko ETH价格", t70) # 71. Jupiter Solana DEX 价格 def t71(): r = requests.get("https://api.jup.ag/price/v2", params={"ids":"So11111111111111111111111111111111111111112"}, timeout=TIMEOUT) r.raise_for_status(); d=r.json() sol = d["data"]["So11111111111111111111111111111111111111112"] return {"id":"SOL","price":sol["price"],"type":sol.get("type")} test("Jupiter(Solana) SOL价格", t71) # 72. Raydium Solana TVL def t72(): r = requests.get("https://api.raydium.io/v2/main/info", timeout=TIMEOUT) r.raise_for_status(); d=r.json() return {"tvl":f"${d.get('tvl',0)/1e9:.2f}B","volume24h":f"${d.get('volume24h',0)/1e9:.2f}B"} test("Raydium(Solana DEX) TVL", t72) # ─── 链上数据扩展 ────────────────────────────────────────────────────────── # 73. Etherscan Gas Price(公开端点) def t73(): r = requests.get("https://api.etherscan.io/api", params={"module":"gastracker","action":"gasoracle","apikey":"YourApiKeyToken"}, timeout=TIMEOUT) r.raise_for_status(); d=r.json() if d["status"]=="1": return {"SafeGasPrice":d["result"]["SafeGasPrice"],"ProposeGasPrice":d["result"]["ProposeGasPrice"],"FastGasPrice":d["result"]["FastGasPrice"]} raise Exception(d["message"]) test("Etherscan Gas Price", t73) # 74. Solscan SOL 市场数据 def t74(): r = requests.get("https://api.coingecko.com/api/v3/coins/solana", params={"localization":"false","tickers":"false","community_data":"true","developer_data":"true"}, timeout=TIMEOUT) r.raise_for_status(); d=r.json() return {"price":d["market_data"]["current_price"]["usd"],"market_cap":f"${d['market_data']['market_cap']['usd']/1e9:.1f}B","github_forks":d["developer_data"]["forks"],"github_stars":d["developer_data"]["stars"],"reddit_subscribers":d["community_data"]["reddit_subscribers"]} test("CoinGecko SOL详细数据(含社交)", t74) # 75. Blockchain.com BTC 区块信息 def t75(): r = requests.get("https://blockchain.info/latestblock", timeout=TIMEOUT) r.raise_for_status(); d=r.json() return {"block_index":d["block_index"],"hash":d["hash"][:20]+"...","height":d["height"],"time":d["time"],"txIndexes_count":len(d.get("txIndexes",[]))} test("Blockchain.info 最新区块", t75) # 76. Mempool.space 最新区块 def t76(): r = requests.get("https://mempool.space/api/blocks", timeout=TIMEOUT) r.raise_for_status(); d=r.json() b=d[0] return {"height":b["height"],"timestamp":b["timestamp"],"tx_count":b["tx_count"],"size":f"{b['size']/1e6:.2f}MB","difficulty":f"{b['difficulty']/1e12:.2f}T"} test("Mempool.space 最新区块详情", t76) # 77. Mempool.space 内存池统计 def t77(): r = requests.get("https://mempool.space/api/mempool", timeout=TIMEOUT) r.raise_for_status(); d=r.json() return {"count":d["count"],"vsize":f"{d['vsize']/1e6:.1f}MB","total_fee":f"{d['total_fee']/1e8:.4f} BTC"} test("Mempool.space 内存池统计", t77) # 78. Blockchair BTC 统计 def t78(): r = requests.get("https://api.blockchair.com/bitcoin/stats", timeout=TIMEOUT) r.raise_for_status(); d=r.json()["data"] return {"blocks":d["blocks"],"transactions":d["transactions"],"market_price_usd":d["market_price_usd"],"hashrate_24h":f"{d['hashrate_24h']/1e18:.2f} EH/s","difficulty":f"{d['difficulty']/1e12:.2f}T"} test("Blockchair BTC链统计", t78) # 79. Blockchair ETH 统计 def t79(): r = requests.get("https://api.blockchair.com/ethereum/stats", timeout=TIMEOUT) r.raise_for_status(); d=r.json()["data"] return {"blocks":d["blocks"],"transactions":d["transactions"],"market_price_usd":d["market_price_usd"]} test("Blockchair ETH链统计", t79) # ─── DeFi 扩展 ───────────────────────────────────────────────────────────── # 80. DeFiLlama 桥接数据 def t80(): r = requests.get("https://bridges.llama.fi/bridges", timeout=TIMEOUT) r.raise_for_status(); d=r.json()["bridges"] top3 = [{"name":x["displayName"],"currentDayVolume":f"${x.get('currentDayVolumeUsd',0)/1e6:.0f}M"} for x in sorted(d, key=lambda x:x.get("currentDayVolumeUsd",0), reverse=True)[:3]] return {"total_bridges":len(d),"top3":top3} test("DeFiLlama 跨链桥数据", t80) # 81. DeFiLlama 费用/收入 def t81(): r = requests.get("https://api.llama.fi/overview/fees", params={"excludeTotalDataChart":"true","excludeTotalDataChartBreakdown":"true"}, timeout=TIMEOUT) r.raise_for_status(); d=r.json() protocols = d.get("protocols",[])[:3] return {"total_24h":f"${d.get('total24h',0)/1e6:.0f}M","top3":[{"name":p["name"],"fees_24h":f"${p.get('total24h',0)/1e6:.0f}M"} for p in protocols]} test("DeFiLlama 协议费用/收入", t81) # 82. DeFiLlama 期权DEX def t82(): r = requests.get("https://api.llama.fi/overview/options", params={"excludeTotalDataChart":"true","excludeTotalDataChartBreakdown":"true"}, timeout=TIMEOUT) r.raise_for_status(); d=r.json() return {"total_notional_24h":f"${d.get('total24h',0)/1e6:.0f}M","protocols_count":len(d.get("protocols",[]))} test("DeFiLlama 期权DEX交易量", t82) # 83. DeFiLlama 永续合约DEX def t83(): r = requests.get("https://api.llama.fi/overview/derivatives", params={"excludeTotalDataChart":"true","excludeTotalDataChartBreakdown":"true"}, timeout=TIMEOUT) r.raise_for_status(); d=r.json() protocols = d.get("protocols",[])[:3] return {"total_24h":f"${d.get('total24h',0)/1e6:.0f}M","top3":[{"name":p["name"],"vol":f"${p.get('total24h',0)/1e6:.0f}M"} for p in protocols]} test("DeFiLlama 永续合约DEX交易量", t83) # 84. Aave V3 TVL (via DeFiLlama) def t84(): r = requests.get("https://api.llama.fi/protocol/aave-v3", timeout=TIMEOUT) r.raise_for_status(); d=r.json() chains = d.get("currentChainTvls",{}) top3 = sorted(chains.items(), key=lambda x:x[1], reverse=True)[:3] return {"name":d["name"],"tvl":f"${d.get('tvl',0)/1e9:.2f}B","top_chains":[{"chain":k,"tvl":f"${v/1e9:.2f}B"} for k,v in top3]} test("Aave V3 TVL(via DeFiLlama)", t84) # 85. Lido Staking TVL (via DeFiLlama) def t85(): r = requests.get("https://api.llama.fi/protocol/lido", timeout=TIMEOUT) r.raise_for_status(); d=r.json() return {"name":d["name"],"tvl":f"${d.get('tvl',0)/1e9:.2f}B","category":d.get("category")} test("Lido Staking TVL(via DeFiLlama)", t85) # ─── 保存 ────────────────────────────────────────────────────────────────── print(f"\n=== 批次3汇总 ===") p = sum(1 for v in results.values() if v["status"]=="✅") f = sum(1 for v in results.values() if v["status"]=="❌") print(f"通过: {p}/{len(results)}, 失败: {f}/{len(results)}") with open("/home/ubuntu/quantKnowledge/20_Go迭代系统/scripts/verify_batch3_results.json","w") as fp: json.dump(results, fp, ensure_ascii=False, indent=2, default=str)