摘要:本文将详细介绍如何通过StockTV API对接马来西亚和印度股票市场的实时行情数据,涵盖从API申请、接口调用到数据解析的完整流程,并提供Python代码示例。


一、为什么选择StockTV API?

StockTV API 提供全球多个国家的金融市场数据,其中马来西亚和印度市场数据尤为全面。以下是选择StockTV API的几大理由:

  • 覆盖全面:支持马来西亚Bursa和印度NSE、BSE交易所
  • 实时性强:提供WebSocket实时数据推送
  • 数据丰富:包含股票、指数、期货等多种金融产品
  • 易于集成:提供多种语言的SDK和详细文档

二、准备工作

1. 注册开发者账号

访问StockTV开发者门户,获取测试key并创建应用。

2. 获取API密钥

客服会分配一个唯一的API Key,用于身份验证。

3. 安装依赖

pip install requests websocket-client

三、获取马来西亚股票数据

1. API接口说明

  • URL: https://api.stocktv.top/stock/stocks
  • Method: GET
  • 参数:

    • key: API密钥
    • countryId: 国家ID(马来西亚为42)
    • pageSize: 每页数量
    • page: 页码

2. Python实现

import requests

def get_malaysia_stocks(api_key, page_size=20, page=1):
    url = "https://api.stocktv.top/stock/stocks"
    params = {
        "key": api_key,
        "countryId": 42,
        "pageSize": page_size,
        "page": page
    }
    
    response = requests.get(url, params=params)
    response.raise_for_status()
    return response.json()

# 使用示例
api_key = "YOUR_API_KEY"
stocks = get_malaysia_stocks(api_key)
for stock in stocks['data']['records']:
    print(f"{stock['name']}: {stock['last']}")

四、获取印度股票数据

1. API接口说明

  • URL: https://api.stocktv.top/stock/stocks
  • Method: GET
  • 参数:

    • key: API密钥
    • countryId: 国家ID(印度为14)
    • pageSize: 每页数量
    • page: 页码

2. Python实现

def get_indian_stocks(api_key, page_size=20, page=1):
    url = "https://api.stocktv.top/stock/stocks"
    params = {
        "key": api_key,
        "countryId": 14,
        "pageSize": page_size,
        "page": page
    }
    
    response = requests.get(url, params=params)
    response.raise_for_status()
    return response.json()

# 使用示例
stocks = get_indian_stocks(api_key)
for stock in stocks['data']['records']:
    print(f"{stock['name']}: {stock['last']}")

五、获取实时行情数据

1. WebSocket接口说明

  • URL: wss://ws-api.stocktv.top/connect?key=YOUR_API_KEY
  • 数据格式: JSON
  • 字段说明:

    • symbol: 股票代码
    • last: 最新价格
    • pcp: 涨跌幅

2. Python实现

import websocket
import json

def on_message(ws, message):
    data = json.loads(message)
    if data.get("type") == "stock":
        print(f"[{data['symbol']}] 价格: {data['last']} 涨跌幅: {data['pcp']}%")

def on_error(ws, error):
    print(f"错误: {error}")

def on_close(ws, close_status_code, close_msg):
    print("连接关闭")

def on_open(ws):
    print("连接成功")

# 启动WebSocket客户端
api_key = "YOUR_API_KEY"
ws_url = f"wss://ws-api.stocktv.top/connect?key={api_key}"

ws = websocket.WebSocketApp(ws_url,
                          on_message=on_message,
                          on_error=on_error,
                          on_close=on_close)
ws.on_open = on_open
ws.run_forever()

六、获取Nifty50指数数据

1. API接口说明

  • URL: https://api.stocktv.top/stock/indices
  • Method: GET
  • 参数:

    • key: API密钥
    • countryId: 国家ID(印度为14)
    • flag: 国家代码(印度为"IN")

2. Python实现

def get_nifty50_index(api_key):
    url = "https://api.stocktv.top/stock/indices"
    params = {
        "key": api_key,
        "countryId": 14,
        "flag": "IN"
    }
    
    response = requests.get(url, params=params)
    response.raise_for_status()
    return response.json()

# 使用示例
nifty_data = get_nifty50_index(api_key)
for index in nifty_data['data']:
    if index['name'] == 'Nifty 50':
        print(f"Nifty 50 最新价: {index['last']}")

七、高级功能

1. 数据缓存

from functools import lru_cache

@lru_cache(maxsize=100)
def get_cached_indian_stocks(api_key):
    return get_indian_stocks(api_key)

2. 异常重试

from tenacity import retry, stop_after_attempt, wait_exponential

@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10))
def get_stocks_with_retry(api_key):
    return get_indian_stocks(api_key)

八、常见问题解答

Q1:如何获取完整的股票列表?

  • 通过分页参数遍历所有数据页

    def get_all_indian_stocks(api_key):
      page = 1
      all_stocks = []
      while True:
          data = get_indian_stocks(api_key, page=page)
          all_stocks.extend(data['data']['records'])
          if len(data['data']['records']) < 20:
              break
          page += 1
      return all_stocks

Q2:WebSocket断线如何处理?

  • 实现自动重连机制

    import time
    
    def run_websocket():
      while True:
          try:
              ws.run_forever()
          except Exception as e:
              print(f"连接异常: {e}, 5秒后重连...")
              time.sleep(5)

Q3:如何提高数据获取效率?

  • 使用异步请求

    import aiohttp
    import asyncio
    
    async def async_get_stocks(api_key):
      async with aiohttp.ClientSession() as session:
          url = "https://api.stocktv.top/stock/stocks"
          params = {
              "key": api_key,
              "countryId": 14
          }
          async with session.get(url, params=params) as response:
              return await response.json()

九、最佳实践建议

  1. 安全防护

    • 使用环境变量存储API密钥
    • 启用HTTPS加密通信
  2. 性能优化

    • 使用连接池管理HTTP连接
    • 启用GZIP压缩响应数据
  3. 监控告警

    • 记录API调用日志
    • 设置异常告警阈值
  4. 数据存储

    • 使用数据库持久化历史数据
    • 定期备份重要数据

十、资源推荐


通过本文的指导,您已经掌握了使用StockTV API获取马来西亚和印度实时行情数据的完整方法。建议根据实际业务需求,进一步扩展数据分析和可视化功能,构建专业的金融数据应用系统。


CryptoRzz
1 声望0 粉丝