印度市场股票实战API:WebSocket实时数据对接指南
概述
随着全球投资者对新兴市场关注度的提升,印度股市已成为国际资本的重要投资目的地。本文将介绍如何通过API接口获取印度股市的实时行情数据,并重点讲解WebSocket实时数据推送技术的实战应用。
API接口概览
该数据接口提供了全面的印度股市数据服务,主要包括以下功能:
- 印度股票市场列表查询
- 个股实时行情数据
- 指数信息(Nifty 50、Sensex等)
- K线历史数据
- 涨跌排行榜
- 公司基本信息
- 实时新闻资讯
- WebSocket实时数据推送
核心接口详解
1. 获取印度市场股票列表
GET https://api.stocktv.top/stock/stocks?countryId=14&pageSize=50&page=1&key=您的API_KEY
参数说明:
countryId=14:印度市场编号pageSize:每页返回数量page:页码key:API授权密钥
2. 查询特定股票信息
GET https://api.stocktv.top/stock/queryStocks?countryId=14&symbol=RELIANCE&key=您的API_KEY
3. 获取指数信息
GET https://api.stocktv.top/stock/indices?countryId=14&key=您的API_KEY
WebSocket实时数据对接
WebSocket连接配置
// 建立WebSocket连接
const ws = new WebSocket('wss://ws-api.stocktv.top/connect?key=您的API_KEY');
// 连接开启事件
ws.onopen = function(event) {
console.log('WebSocket连接已建立');
// 发送订阅请求
const subscribeMessage = {
action: "subscribe",
symbols: ["PID:946725", "PID:977119"] // 要订阅的产品ID列表
};
ws.send(JSON.stringify(subscribeMessage));
};
// 接收消息处理
ws.onmessage = function(event) {
const data = JSON.parse(event.data);
console.log('收到实时数据:', data);
// 处理实时行情数据
updateStockData(data);
};
// 错误处理
ws.onerror = function(error) {
console.error('WebSocket错误:', error);
};
// 连接关闭处理
ws.onclose = function(event) {
console.log('WebSocket连接已关闭');
};
心跳维持机制
为保证WebSocket连接稳定性,需要定期发送心跳包:
// 心跳间隔(毫秒)
const HEARTBEAT_INTERVAL = 30000;
let heartbeatInterval;
// 连接成功后启动心跳
ws.onopen = function(event) {
console.log('WebSocket连接已建立');
// 启动心跳
heartbeatInterval = setInterval(() => {
if (ws.readyState === WebSocket.OPEN) {
ws.send(JSON.stringify({action: "ping"}));
}
}, HEARTBEAT_INTERVAL);
// 订阅股票
const subscribeMessage = {
action: "subscribe",
symbols: ["PID:946725", "PID:977119", "PID:41602"]
};
ws.send(JSON.stringify(subscribeMessage));
};
// 连接关闭时清除心跳
ws.onclose = function(event) {
console.log('WebSocket连接已关闭');
clearInterval(heartbeatInterval);
};
实时数据处理
WebSocket返回的实时数据格式如下:
{
"pid": "992844",
"symbol": "IGSL",
"last_numeric": "2.46",
"last_dir": "greenBg",
"chg": "-0.62",
"chgPct": "-20.13",
"bid": "2.45",
"ask": "2.47",
"high": "2.77",
"low": "2.46",
"volume": "13955963",
"turnover_numeric": "3672800",
"time": "02:44:11",
"timestamp": "1717728251",
"type": 1
}
实战应用示例
完整的印度股票实时监控系统
<!DOCTYPE html>
<html>
<head>
<title>印度股票实时监控</title>
<style>
.stock-table { width: 100%; border-collapse: collapse; }
.stock-table th, .stock-table td { padding: 8px; text-align: left; border-bottom: 1px solid #ddd; }
.price-up { color: green; }
.price-down { color: red; }
.connection-status { padding: 10px; margin: 10px 0; border-radius: 5px; }
.connected { background-color: #dff0d8; color: #3c763d; }
.disconnected { background-color: #f2dede; color: #a94442; }
</style>
</head>
<body>
<h1>印度股票实时行情</h1>
<div id="connectionStatus" class="connection-status disconnected">
连接状态: 未连接
</div>
<button onclick="connectWebSocket()">连接</button>
<button onclick="disconnectWebSocket()">断开</button>
<table class="stock-table">
<thead>
<tr>
<th>股票代码</th>
<th>名称</th>
<th>最新价</th>
<th涨跌额</th>
<th>涨跌幅</th>
<th>成交量</th>
<th>时间</th>
</tr>
</thead>
<tbody id="stockData">
<!-- 动态填充数据 -->
</tbody>
</table>
<script>
let ws = null;
const apiKey = "您的API_KEY";
const stockSymbols = ["PID:946725", "PID:977119", "PID:41602"];
// 初始化股票数据表
const stockData = {};
stockSymbols.forEach(symbol => {
stockData[symbol] = {
symbol: symbol.split(':')[1],
name: '',
last: 0,
chg: 0,
chgPct: 0,
volume: 0,
time: ''
};
});
// 更新连接状态显示
function updateConnectionStatus(connected) {
const statusElement = document.getElementById('connectionStatus');
if (connected) {
statusElement.textContent = '连接状态: 已连接';
statusElement.className = 'connection-status connected';
} else {
statusElement.textContent = '连接状态: 未连接';
statusElement.className = 'connection-status disconnected';
}
}
// 建立WebSocket连接
function connectWebSocket() {
if (ws && ws.readyState === WebSocket.OPEN) {
console.log('WebSocket已连接');
return;
}
ws = new WebSocket(`wss://ws-api.stocktv.top/connect?key=${apiKey}`);
ws.onopen = function(event) {
console.log('WebSocket连接已建立');
updateConnectionStatus(true);
// 订阅股票
const subscribeMessage = {
action: "subscribe",
symbols: stockSymbols
};
ws.send(JSON.stringify(subscribeMessage));
};
ws.onmessage = function(event) {
const data = JSON.parse(event.data);
console.log('收到数据:', data);
// 更新股票数据
if (data.pid) {
const pid = `PID:${data.pid}`;
if (stockData[pid]) {
stockData[pid].last = parseFloat(data.last_numeric);
stockData[pid].chg = parseFloat(data.pc);
stockData[pid].chgPct = parseFloat(data.pcp);
stockData[pid].volume = parseInt(data.turnover_numeric);
stockData[pid].time = data.time;
// 更新表格
updateStockTable();
}
}
};
ws.onerror = function(error) {
console.error('WebSocket错误:', error);
updateConnectionStatus(false);
};
ws.onclose = function(event) {
console.log('WebSocket连接已关闭');
updateConnectionStatus(false);
};
}
// 断开WebSocket连接
function disconnectWebSocket() {
if (ws) {
ws.close();
ws = null;
}
}
// 更新股票表格
function updateStockTable() {
const tableBody = document.getElementById('stockData');
tableBody.innerHTML = '';
for (const symbol in stockData) {
const stock = stockData[symbol];
const row = document.createElement('tr');
// 确定价格变化样式
const priceClass = stock.chg >= 0 ? 'price-up' : 'price-down';
row.innerHTML = `
<td>${stock.symbol}</td>
<td>${stock.name || '加载中...'}</td>
<td class="${priceClass}">${stock.last.toFixed(2)}</td>
<td class="${priceClass}">${stock.chg >= 0 ? '+' : ''}${stock.chg.toFixed(2)}</td>
<td class="${priceClass}">${stock.chgPct >= 0 ? '+' : ''}${stock.chgPct.toFixed(2)}%</td>
<td>${stock.volume.toLocaleString()}</td>
<td>${stock.time}</td>
`;
tableBody.appendChild(row);
}
}
// 初始化加载股票基本信息
async function loadStockInfo() {
try {
const response = await fetch(`https://api.stocktv.top/stock/stocks?countryId=14&pageSize=50&page=1&key=${apiKey}`);
const data = await response.json();
if (data.code === 200) {
data.data.records.forEach(stock => {
const pid = `PID:${stock.id}`;
if (stockData[pid]) {
stockData[pid].name = stock.name;
}
});
updateStockTable();
}
} catch (error) {
console.error('加载股票信息失败:', error);
}
}
// 页面加载时初始化
window.onload = function() {
loadStockInfo();
updateStockTable();
};
</script>
</body>
</html>
高级功能扩展
1. 自动重连机制
let reconnectAttempts = 0;
const MAX_RECONNECT_ATTEMPTS = 5;
const RECONNECT_INTERVAL = 3000;
function setupReconnection() {
ws.onclose = function(event) {
console.log('WebSocket连接已关闭');
updateConnectionStatus(false);
if (reconnectAttempts < MAX_RECONNECT_ATTEMPTS) {
setTimeout(() => {
console.log(`尝试重新连接 (${reconnectAttempts + 1}/${MAX_RECONNECT_ATTEMPTS})`);
reconnectAttempts++;
connectWebSocket();
}, RECONNECT_INTERVAL);
}
};
ws.onopen = function(event) {
console.log('WebSocket连接已建立');
updateConnectionStatus(true);
reconnectAttempts = 0; // 重置重连计数器
};
}
2. 数据持久化与历史分析
// 使用IndexedDB存储实时数据
function initDatabase() {
const request = indexedDB.open("StockDataDB", 1);
request.onupgradeneeded = function(event) {
const db = event.target.result;
if (!db.objectStoreNames.contains('stockPrices')) {
const store = db.createObjectStore('stockPrices', { keyPath: ['symbol', 'timestamp'] });
store.createIndex('symbol', 'symbol', { unique: false });
store.createIndex('timestamp', 'timestamp', { unique: false });
}
};
request.onsuccess = function(event) {
const db = event.target.result;
window.stockDB = db;
console.log('数据库初始化成功');
};
request.onerror = function(event) {
console.error('数据库初始化失败:', event.target.error);
};
}
// 存储实时数据
function saveStockData(data) {
if (!window.stockDB) return;
const transaction = window.stockDB.transaction(['stockPrices'], 'readwrite');
const store = transaction.objectStore('stockPrices');
const record = {
symbol: data.symbol,
price: data.last_numeric,
volume: data.turnover_numeric,
timestamp: new Date().getTime(),
date: new Date().toISOString()
};
store.add(record);
transaction.oncomplete = function() {
console.log('数据已保存');
};
transaction.onerror = function(event) {
console.error('数据保存失败:', event.target.error);
};
}
注意事项
- API限制:注意查看API的使用频率限制,避免频繁请求导致IP被封
- 错误处理:完善的错误处理机制是生产环境应用的关键
- 数据准确性:实时数据可能存在延迟,重要交易决策应结合多个数据源
- 安全性:API密钥需妥善保管,避免在前端代码中硬编码敏感信息
- 网络稳定性:印度市场交易时段确保网络连接稳定,建议使用重连机制
结语
通过本文介绍的API接口和WebSocket技术,开发者可以构建功能强大的印度股市实时监控应用。无论是个人投资者还是金融机构,都可以利用这些工具获取实时市场数据,做出更明智的投资决策。
实际应用中,建议结合后端服务处理敏感操作和数据持久化,前端专注于数据展示和用户交互,从而构建稳定可靠的金融应用系统。
1180

被折叠的 条评论
为什么被折叠?



