取印度孟买指数(SENSEX)实时行情API对接指南

获取印度孟买指数(SENSEX)实时行情API对接指南

本文详细介绍如何通过API获取印度孟买敏感30指数(SENSEX)的实时行情数据,包含多种数据获取方式和代码示例

概述

印度孟买敏感30指数(SENSEX)是印度孟买证券交易所的主要股票市场指数,由30家规模大、流动性好的印度公司组成。本文介绍如何通过API接口获取SENSEX指数的实时行情数据,包括实时价格、涨跌幅、技术指标等信息。

SENSEX指数简介

  • 全称: S&P BSE SENSEX
  • 成分股数量: 30只
  • 基准日期: 1978-1979年 = 100点
  • 计算方式: 自由流通市值加权
  • 交易所: 孟买证券交易所(BSE)
  • 交易时间: 印度标准时间 9:15-15:30

API接口详情

1. 获取印度市场所有指数(包含SENSEX)

接口地址: GET /stock/indices

请求参数:

GET https://api.stocktv.top/stock/indices?countryId=14&key=您的API密钥

参数说明:

  • countryId: 国家ID,印度为14
  • key: API访问密钥

响应示例:

{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "id": 17940,
      "name": "S&P BSE SENSEX",
      "symbol": "SENSEX",
      "last": 74250.65,
      "high": 74500.60,
      "low": 73800.45,
      "chg": 450.85,
      "chgPct": 0.61,
      "changeDecimalPrecision": 2,
      "changePercentageDecimalPrecision": 2,
      "isOpen": true,
      "flag": "IN",
      "url": "/indices/s-p-bse-sensex",
      "lastPairDecimal": 2,
      "time": 1716458537
    },
    {
      "id": 17941,
      "name": "Nifty 50",
      "symbol": "NSEI",
      "last": 22500.35,
      // ...其他指数数据
    }
  ]
}

2. 通过ID直接查询SENSEX指数

接口地址: GET /stock/indicesById

请求参数:

GET https://api.stocktv.top/stock/indicesById?id=17940&key=您的API密钥

参数说明:

  • id: 指数ID,SENSEX的ID为17940
  • key: API访问密钥

3. 获取SENSEX指数K线数据

接口地址: GET /stock/kline

请求参数:

GET https://api.stocktv.top/stock/kline?pid=17940&interval=P1D&key=您的API密钥

时间间隔参数:

  • PT5M: 5分钟
  • PT15M: 15分钟
  • PT1H: 1小时
  • P1D: 1天(日线)
  • P1W: 1周
  • P1M: 1月

响应示例:

{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "time": 1719818400000,
      "open": 73950.42,
      "high": 74200.60,
      "low": 73850.42,
      "close": 74120.60,
      "volume": 0,
      "vo": 0
    },
    {
      "time": 1719818460000,
      "open": 74120.60,
      "high": 74250.60,
      "low": 74080.55,
      "close": 74200.55,
      "volume": 0,
      "vo": 0
    }
  ]
}

使用示例

Python获取SENSEX实时行情

import requests
import json
from datetime import datetime

class SensexAPI:
    def __init__(self, api_key):
        self.api_key = api_key
        self.base_url = "https://api.stocktv.top"
    
    def get_sensex_real_time(self):
        """获取SENSEX实时行情"""
        url = f"{self.base_url}/stock/indicesById"
        params = {
            "id": 17940,  # SENSEX指数ID
            "key": self.api_key
        }
        
        try:
            response = requests.get(url, params=params, timeout=10)
            if response.status_code == 200:
                data = response.json()
                if data["code"] == 200:
                    return data["data"][0]  # 返回SENSEX数据
            return None
        except Exception as e:
            print(f"获取数据失败: {e}")
            return None
    
    def get_sensex_history(self, interval="P1D"):
        """获取SENSEX历史K线数据"""
        url = f"{self.base_url}/stock/kline"
        params = {
            "pid": 17940,
            "interval": interval,
            "key": self.api_key
        }
        
        try:
            response = requests.get(url, params=params, timeout=10)
            if response.status_code == 200:
                data = response.json()
                if data["code"] == 200:
                    return data["data"]
            return None
        except Exception as e:
            print(f"获取历史数据失败: {e}")
            return None

# 使用示例
if __name__ == "__main__":
    API_KEY = "您的API密钥"
    
    sensex_api = SensexAPI(API_KEY)
    
    # 获取实时行情
    real_time_data = sensex_api.get_sensex_real_time()
    if real_time_data:
        print("=== SENSEX实时行情 ===")
        print(f"指数名称: {real_time_data['name']}")
        print(f"最新价格: {real_time_data['last']}")
        print(f"涨跌: {real_time_data['chg']} ({real_time_data['chgPct']}%)")
        print(f"最高价: {real_time_data['high']}")
        print(f"最低价: {real_time_data['low']}")
        print(f"更新时间: {datetime.fromtimestamp(real_time_data['time'])}")
    
    # 获取日线数据
    daily_data = sensex_api.get_sensex_history("P1D")
    if daily_data:
        print(f"\n获取到{len(daily_data)}条日线数据")

JavaScript获取SENSEX数据

// 使用Fetch API获取SENSEX数据
const API_KEY = '您的API密钥';
const BASE_URL = 'https://api.stocktv.top';

// 获取SENSEX实时行情
async function getSensexRealTime() {
    const url = `${BASE_URL}/stock/indicesById?id=17940&key=${API_KEY}`;
    
    try {
        const response = await fetch(url);
        const data = await response.json();
        
        if (data.code === 200) {
            const sensexData = data.data[0];
            console.log('SENSEX实时行情:', sensexData);
            return sensexData;
        }
        return null;
    } catch (error) {
        console.error('获取SENSEX数据失败:', error);
        return null;
    }
}

// 获取SENSEX历史数据
async function getSensexHistory(interval = 'P1D') {
    const url = `${BASE_URL}/stock/kline?pid=17940&interval=${interval}&key=${API_KEY}`;
    
    try {
        const response = await fetch(url);
        const data = await response.json();
        
        if (data.code === 200) {
            return data.data;
        }
        return null;
    } catch (error) {
        console.error('获取历史数据失败:', error);
        return null;
    }
}

// 使用示例
getSensexRealTime().then(data => {
    if (data) {
        document.getElementById('sensex-price').textContent = data.last;
        document.getElementById('sensex-change').textContent = 
            `${data.chg} (${data.chgPct}%)`;
        document.getElementById('sensex-time').textContent = 
            new Date(data.time * 1000).toLocaleString();
    }
});

// 定时更新数据(每30秒)
setInterval(() => {
    getSensexRealTime().then(updateUI);
}, 30000);

WebSocket实时推送示例

// WebSocket实时获取SENSEX数据
const wsUri = "wss://ws-api.stocktv.top/connect?key=您的API密钥";
const websocket = new WebSocket(wsUri);

websocket.onopen = function(event) {
    console.log("Connected to WebSocket server");
    // 可以发送订阅请求特定指数
};

websocket.onmessage = function(event) {
    const data = JSON.parse(event.data);
    
    if (data.pid === "17940") {  // SENSEX的PID
        console.log("SENSEX实时推送:", data);
        
        // 更新页面数据
        updateSensexDisplay(data);
    }
};

function updateSensexDisplay(data) {
    document.getElementById('sensex-last').textContent = data.last_numeric;
    document.getElementById('sensex-change').textContent = 
        `${data.pc} (${data.pcp}%)`;
    document.getElementById('sensex-time').textContent = 
        new Date().toLocaleTimeString();
    
    // 根据涨跌设置颜色
    const changeElement = document.getElementById('sensex-change');
    if (data.pc > 0) {
        changeElement.style.color = 'green';
    } else if (data.pc < 0) {
        changeElement.style.color = 'red';
    } else {
        changeElement.style.color = 'black';
    }
}

websocket.onclose = function(event) {
    console.log("Disconnected from WebSocket server");
    // 可以尝试重连
};

websocket.onerror = function(event) {
    console.log("WebSocket error:", event);
};

数据字段说明

字段名称 说明 示例值
id 指数ID 17940
name 指数名称 "S&P BSE SENSEX"
symbol 指数代码 "SENSEX"
last 最新价格 74250.65
high 最高价 74500.60
low 最低价 73800.45
chg 涨跌额 450.85
chgPct 涨跌幅 0.61
isOpen 是否开盘 true
time 时间戳 1716458537

注意事项

  1. API密钥:需要联系服务商获取有效的API密钥
  2. 请求频率:注意API的请求频率限制,避免过于频繁的请求
  3. 时区问题:SENSEX交易时间按照印度标准时间(IST)
  4. 错误处理:添加适当的错误处理机制
  5. 数据延迟:实时数据可能有微小延迟,通常为1-3秒
  6. 市场状态:注意印度市场的交易日和交易时间

常见问题

Q: 如何区分SENSEX和Nifty 50指数?
A: SENSEX的symbol为"SENSEX",而Nifty 50的symbol为"NSEI"

Q: 数据更新频率是多少?
A: 实时数据通常每1-5秒更新一次

Q: 是否提供历史数据下载?
A: 可以通过K线接口获取历史数据,支持导出CSV格式

Q: 如何获取SENSEX成分股信息?
A: 需要通过其他接口获取印度股票数据,然后筛选出SENSEX成分股

总结

通过本文介绍的API接口,开发者可以轻松获取印度孟买SENSEX指数的实时行情数据和历史数据。这些接口支持多种编程语言调用,适合用于开发金融分析应用、投资决策工具或实时行情展示系统。

无论是个人投资者还是金融机构,都可以利用这些API构建专业的印度市场分析工具,实时跟踪SENSEX指数的变化趋势。


版权声明:本文涉及API接口由相应服务商提供,使用前请确保已获得合法授权。本文仅做技术交流用途,不构成任何投资建议。

posted @ 2025-10-01 19:00  CryptoPP  阅读(36)  评论(0)    收藏  举报