与股票接口不同,加密货币接口对接币安 (Binance) 数据,使用 Symbol (如 BTCUSDT) 作为唯一标识,且 K 线数据的返回格式为数组格式(而非对象格式),这一点在解析时需要特别注意。


StockTV API 对接文档:加密货币 (Crypto)##1. 基础配置* 接口域名: https://api.stocktv.top

  • 加密货币基础路径: /crypto
  • 主要数据源: 币安 (Binance)
  • 认证方式: URL 参数 key=您的API密钥

##2. 核心接口流程###第一步:获取交易对列表 (Pair List)获取支持的加密货币交易对列表。

  • 接口: /crypto/pairlist

  • 方法: GET

  • 关键参数:

  • key: 您的API Key

  • marketId: 338 (代表币安交易所数据)

  • page: 1

  • 请求示例:

GET https://api.stocktv.top/crypto/pairlist?key=YOUR_KEY&marketId=338&page=1

  • 响应关键字段:
  • symbol: 交易对代码 (如 “BTC”, “ETH”)
  • pair: 完整交易对 (如 “BTC/USDT”)
  • price: 最新价格

###第二步:获取 K 线数据 (Klines)注意:加密货币的 K 线数据返回的是 数组格式 (Array),而非 JSON 对象。

  • 接口: /crypto/getKlines

  • 方法: GET

  • 参数:

  • symbol: 交易对 (格式为 BTCUSDT, 去掉中间的 /)

  • interval: 周期 (1m, 5m, 1h, 4h, 1d, 1w, 1M)

  • 请求示例:

GET https://api.stocktv.top/crypto/getKlines?symbol=BTCUSDT&interval=1d&key=YOUR_KEY

  • 响应数据结构 (数组索引映射):
  • Index 0: 开盘时间戳 (毫秒)
  • Index 1: Open (开盘价)
  • Index 2: High (最高价)
  • Index 3: Low (最低价)
  • Index 4: Close (收盘价)
  • Index 5: Volume (成交量)

###第三步:获取最新价格 (Ticker)如果不需要 K 线,只需获取当前价格。

  • 接口: /crypto/tickerPrice
  • 参数: symbols=BTCUSDT,ETHUSDT (支持批量)

##3. 完整代码示例 (HTML + KlineCharts)此代码演示了如何处理加密货币特有的数组格式 K 线数据并渲染图表。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>加密货币 K线演示 (Crypto)</title>
    <script src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>
    <style>
        body { font-family: sans-serif; padding: 20px; background-color: #1e1e1e; color: #fff; }
        .control-panel { background: #2d2d2d; padding: 15px; margin-bottom: 20px; border-radius: 8px; display: flex; gap: 10px; align-items: center; }
        #chart { width: 100%; height: 600px; border: 1px solid #444; }
        button { padding: 8px 15px; cursor: pointer; background: #007bff; color: white; border: none; border-radius: 4px; }
        select, input { padding: 8px; background: #444; color: white; border: 1px solid #666; border-radius: 4px; }
        .price-display { margin-left: auto; font-size: 1.2em; font-weight: bold; color: #00ff00; }
    </style>
</head>
<body>

    <h2>StockTV 加密货币对接 (Binance Source)</h2>

    <div class="control-panel">
        <label>交易对:</label>
        <select id="symbolSelect" onchange="loadCryptoData()">
            <option value="BTCUSDT">BTC/USDT</option>
            <option value="ETHUSDT">ETH/USDT</option>
            <option value="SOLUSDT">SOL/USDT</option>
            <option value="BNBUSDT">BNB/USDT</option>
            <option value="DOGEUSDT">DOGE/USDT</option>
        </select>

        <label>周期:</label>
        <select id="intervalSelect" onchange="loadCryptoData()">
            <option value="1m">1分钟</option>
            <option value="15m">15分钟</option>
            <option value="1h">1小时</option>
            <option value="4h">4小时</option>
            <option value="1d" selected>日线</option>
        </select>

        <button onclick="loadCryptoData()">刷新图表</button>
        <div id="priceInfo" class="price-display">--</div>
    </div>

    <div id="chart"></div>

    <script>
        // === 配置区域 ===
        const API_KEY = 'YOUR_API_KEY'; // TODO: 替换您的 Key
        const BASE_URL = 'https://api.stocktv.top';

        // 初始化图表 (黑色主题)
        const chart = klinecharts.init('chart');
        chart.setStyles('dark'); // 使用暗色主题适配加密货币风格

        /**
         * 加载数据主函数
         */
        async function loadCryptoData() {
            const symbol = document.getElementById('symbolSelect').value;
            const interval = document.getElementById('intervalSelect').value;
            const display = document.getElementById('priceInfo');

            display.innerText = "加载中...";

            // 1. 请求 K 线数据
            const url = `${BASE_URL}/crypto/getKlines?symbol=${symbol}&interval=${interval}&key=${API_KEY}`;
            console.log("请求地址:", url);

            try {
                const res = await fetch(url);
                const json = await res.json();

                if (json.code === 200 && json.data) {
                    // === 关键步骤:数据格式转换 ===
                    // 加密货币接口返回的是数组: [time, open, high, low, close, volume, ...]
                    // 需要映射为对象格式
                    const dataList = json.data.map(item => {
                        return {
                            timestamp: Number(item[0]),      // 索引0: 时间戳
                            open: parseFloat(item[1]),       // 索引1: 开盘
                            high: parseFloat(item[2]),       // 索引2: 最高
                            low: parseFloat(item[3]),        // 索引3: 最低
                            close: parseFloat(item[4]),      // 索引4: 收盘
                            volume: parseFloat(item[5])      // 索引5: 成交量
                        };
                    });

                    // 排序
                    dataList.sort((a, b) => a.timestamp - b.timestamp);

                    // 渲染图表
                    chart.applyNewData(dataList);
                    
                    // 更新页面上的最新价
                    if(dataList.length > 0) {
                        const last = dataList[dataList.length - 1];
                        display.innerText = `${symbol}: ${last.close}`;
                    }
                } else {
                    alert("API 返回错误: " + json.message);
                }
            } catch (err) {
                console.error(err);
                alert("网络请求失败");
            }
        }

        // 页面加载默认执行一次
        loadCryptoData();
    </script>
</body>
</html>

##4. 常见问题 (FAQ)Q1: 为什么 K 线图表是空白的?

A: 加密货币接口返回的数据是字符串类型的数组(例如 ["66895.35", ...]),前端必须使用 parseFloat() 转换为数字,且必须按照正确的数组索引(0=时间, 1=开, 2=高, 3=低, 4=收, 5=量)进行提取。如果直接传给图表库通常会解析失败。

Q2: 如何获取更多交易对?

A: 调用 /crypto/pairlist?marketId=338&key=... 接口。返回的列表非常长,建议在前端做分页处理或搜索功能。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐