Xeron2000/coinglass-decrypt
GitHub: Xeron2000/coinglass-decrypt
纯 Python 实现的 CoinGlass 加密 API 响应解密库,无需 API key 即可获取 280+ 个加密货币市场数据端点。
Stars: 1 | Forks: 0
# CoinGlass Decrypt
**纯 Python 解密 CoinGlass 内部 API 响应。无需 API key,无需浏览器。**
CoinGlass ([coinglass.com](https://www.coinglass.com)) 是一个加密货币数据聚合器,它使用 AES-128-ECB 对其公共 API payload 进行加密。本项目逆向工程了该加密方案(从 CoinGlass webpack 模块 12471 中提取),并提供了一个简单的 Python 接口来解密任何 endpoint。
## 快速开始
```
pip install requests pycryptodome
python example.py
```
## 工作原理
CoinGlass 对 API 响应进行了加密,但解密 key 是通过响应标头与加密数据一起交付的。
```
Request ──→ GET /api/spot/rsi/list (with `encryption: true` header)
│
Response ──→ Headers: { user: , v: "55" }
│
▼
1. Lookup Key0 from internal constant table (v=55 → "170b070da9654622")
2. AES-128-ECB decrypt(user_token, Key0) → gzip(actual_key)
3. Gunzip → actual AES key
4. AES-128-ECB decrypt(encrypted_body, actual_key) → gzip(JSON)
5. Gunzip → plain JSON
```
无需身份验证、cookies、会话或 API key。任何人都可以解密任何 endpoint。
### 关键常量
`v` 响应标头选择用于派生第一层 key 的常量:
| `v` | 常量 | 来源 |
|-----|----------|--------|
| 55 | `170b070da9654622` | Webpack 模块 12471, `Kt[22]` |
| 66 | `d6537d845a964081` | Webpack 模块 12471, `Kt[38]` |
| 77 | `863f08689c97435b` | Webpack 模块 12471, `BatcW` |
| 1 | URL 路径 | 派生自 `btoa(url_path)[:16]` |
## API 参考
### `decrypt(encrypted_body, user_token_b64, v, url="")`
底层解密。解析加密的 JSON body,应用两轮 AES-ECB + gzip pipeline,并返回原始的 Python dict。
```
from decrypt import decrypt
import requests, json
resp = requests.get("https://capi.coinglass.com/api/spot/rsi/list", params={"pageSize": 2})
data = decrypt(resp.text, resp.headers["user"], resp.headers["v"])
print(json.dumps(data, indent=2))
```
### `fetch_and_decrypt(url, params=None, timeout=30)`
高级便捷封装器:发送带有加密标头的、类似浏览器的 GET 请求,然后解密响应。
```
from decrypt import fetch_and_decrypt
data = fetch_and_decrypt(
"https://capi.coinglass.com/api/spot/rsi/list",
{"pageSize": 500, "pageNum": 1},
)
print(data["total"]) # → 413
```
## 可用数据类别
已发现并验证可用的加密 endpoint 超过 **280 个**。数据包括:
| 类别 | 示例 Endpoint |
|----------|-----------------|
| **现货 RSI** | 400+ 种币的 RSI 值 (15分钟/1小时/4小时/12小时/24小时) |
| **资金费率** | 排名、平均值、流入历史、热力图 |
| **未平仓合约** | 统计数据、图表、未平仓合约/交易量比率 |
| **期权** | 统计数据、最高未平仓合约/交易量、最大痛点行权价 |
| **ETF 流入** | BTC/ETH/SOL/XRP ETF 流入/流出 |
| **多空比** | 单币种多空比、账户比率、持仓比率 |
| **清算** | 按交易所分类的图表、今日数据、最大订单 |
| **市值** | 排名、历史、稳定币主导率 |
| **链上指标** | 算力、SOPR、MVRV、活跃地址、CDD、50+ 指标 |
| **链上指数** | CGDI、CGRI、Pi Cycle、AHR999、Puell Multiple、Mayer Multiple |
| **逃顶指数** | 山寨币季节、比特币主导率、储备风险、NUPL、RHODL |
| **宏观/股票** | 传统金融概览、股票数据 |
| **资金流向** | 单币种资金流向历史 |
| **国库** | 上市公司 BTC 持仓、MicroStrategy 数据 |
| **Hyperliquid** | 金库、顶级持仓、用户分布 |
| **经济日历** | 宏观事件日历 |
| **以及更多…** | 基差、波动率、订单流、大单、UTXO、CME COT 报告 |
有关完整目录,请参阅 [`discovered_endpoints.py`](discovered_endpoints.py)。
## 示例
```
from decrypt import fetch_and_decrypt
data = fetch_and_decrypt(
"https://capi.coinglass.com/api/spot/rsi/list",
{"pageSize": 500, "pageNum": 1},
)
sorted_4h = sorted(data["list"], key=lambda x: float(x.get("rsi4h", 0)), reverse=True)
for coin in sorted_4h[:10]:
print(f"#{coin['rank']:<4} {coin['symbol']:<10} RSI 4h={coin['rsi4h']}")
```
运行 `python example.py` 获取可运行的演示。
## 免责声明
本项目仅供**教育和研究用途**。该加密方案是通过逆向工程公开可访问的客户端 JavaScript 代码得出的。使用本软件时,请遵守 CoinGlass 的服务条款。
## 许可证
MIT
标签:Python, URL抓取, 云资产清单, 加密货币, 密码学, 手动系统调用, 数据抓取, 无后门, 逆向工具, 逆向工程