博客 / 詳情

返回

幣安加密貨幣數據 (Crypto Market)對接指南

與股票接口不同,加密貨幣接口對接幣安 (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=... 接口。返回的列表非常長,建議在前端做分頁處理或搜索功能。
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.