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抓取, 云资产清单, 加密货币, 密码学, 手动系统调用, 数据抓取, 无后门, 逆向工具, 逆向工程