文件
quantKonwledge/20_Go迭代系统/scripts/verify_batch6_crypto_varieties.py
Manus Quant Agent 1a0288a256 feat: 大幅扩展数据源至325个验证通过端点 + Go集成方案 + 社交媒体情绪分析实现
新增文件:
- 数据源与交易品种完整手册_325个.md (100+加密品种 + 50+传统金融品种)
- Go数据源集成方案.md (三级速率限制器 + 指数退避 + 自动降级)
- 社交媒体实时情绪分析Go实现.md (VADER词典 + LLM增强)
- scripts/verify_batch6_crypto_varieties.py (加密品种验证)
- scripts/verify_batch7_fix.py (修复+新增验证)

验证统计: 325个端点通过, 19个平台, 100%免费
2026-03-06 02:17:59 -05:00

336 行
13 KiB
Python

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
#!/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}")