與股票接口不同,加密貨幣接口對接幣安 (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 KeymarketId: 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=... 接口。返回的列表非常長,建議在前端做分頁處理或搜索功能。