博客 / 詳情

返回

對接印度股票市場數據 (India api) 實時k線圖表

1. 基礎參數配置

  • 接口域名: https://api.stocktv.top
  • 印度 Country ID: 14
  • 主要交易所: NSE (National Stock Exchange), BSE (Bombay Stock Exchange)
  • 認證方式: URL 參數 key=您的API密鑰

2. 核心接口流程

對接邏輯:先通過 列表接口 查詢印度股票的 PID(系統ID),再使用 PID 獲取 K線實時行情

第一步:獲取印度股票列表

查詢印度市場的股票代碼、名稱及 PID。

  • 接口: /stock/stocks
  • 方法: GET
  • 參數:

    • countryId: 14 (必填)
    • pageSize: 10
    • key: 您的Key
  • 請求示例:

    GET https://api.stocktv.top/stock/stocks?countryId=14&pageSize=10&page=1&key=YOUR_KEY
  • 預期數據:

    • id: PID (後續接口使用)
    • symbol: 股票代碼 (如 "RELIANCE", "TCS", "INFY")
    • name: 公司名稱
    • exchangeId: 交易所ID (46=NSE, 74=BSE)

第二步:獲取印度指數 (Nifty 50 / Sensex)

獲取印度主要的 Nifty 50BSE Sensex 指數行情。

  • 接口: /stock/indices
  • 方法: GET
  • 參數: countryId=14
  • 請求示例:

    GET https://api.stocktv.top/stock/indices?countryId=14&key=YOUR_KEY

第三步:獲取 K 線數據

使用第一步獲取的 id (PID) 查詢歷史數據。

  • 接口: /stock/kline
  • 方法: GET
  • 參數:

    • pid: 股票ID
    • interval: 週期 (P1D=日線, PT1H=1小時, PT15M=15分鐘)
  • 請求示例:

    GET https://api.stocktv.top/stock/kline?pid=12345&interval=P1D&key=YOUR_KEY

第四步:漲跌排行榜 (可選)

獲取印度市場的漲幅榜或跌幅榜。

  • 接口: /stock/updownList
  • 方法: GET
  • 參數:

    • countryId: 14
    • type: 1 (漲幅榜) 或 2 (跌幅榜)
  • 請求示例:

    GET https://api.stocktv.top/stock/updownList?countryId=14&type=1&key=YOUR_KEY

3. 完整代碼示例 (HTML + KlineCharts)

這是一個可以直接運行的 HTML 文件示例。它會自動請求印度股票列表,打印到控制枱,並允許您輸入 PID 來渲染 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線演示 (CountryID=14)</title>
    <script src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>
    <style>
        body { font-family: sans-serif; padding: 20px; }
        .control-panel { background: #f4f4f4; padding: 15px; margin-bottom: 20px; border-radius: 8px; }
        .log-panel { background: #333; color: #0f0; padding: 10px; height: 100px; overflow-y: scroll; font-family: monospace; margin-bottom: 10px; }
        #chart { width: 100%; height: 500px; border: 1px solid #ccc; }
        button { padding: 8px 15px; cursor: pointer; background: #007bff; color: white; border: none; border-radius: 4px; }
        input { padding: 8px; width: 200px; }
    </style>
</head>
<body>

    <h2>StockTV 印度市場對接 (ID: 14)</h2>

    <div class="control-panel">
        <p>1. <strong>獲取列表</strong>:點擊按鈕獲取印度股票列表,查看控制枱或下方日誌獲取 PID。</p>
        <button onclick="fetchIndiaList()">獲取印度股票列表</button>
        <hr>
        <p>2. <strong>渲染K線</strong>:輸入 PID 查看圖表。</p>
        <input type="text" id="pidInput" placeholder="請輸入股票 PID (例如: 12345)">
        <button onclick="renderChart()">生成 K 線圖</button>
    </div>

    <div class="log-panel" id="logPanel">等待操作...</div>
    <div id="chart"></div>

    <script>
        // === 配置區域 ===
        const API_KEY = 'YOUR_API_KEY'; // 請在此填入您的 Key
        const COUNTRY_ID = 14;          // 印度 Country ID
        const BASE_URL = 'https://api.stocktv.top';

        // 初始化圖表
        const chart = klinecharts.init('chart');

        // 日誌輔助函數
        function log(msg) {
            const panel = document.getElementById('logPanel');
            panel.innerHTML += `<div>> ${msg}</div>`;
            panel.scrollTop = panel.scrollHeight;
            console.log(msg);
        }

        // 1. 獲取股票列表
        async function fetchIndiaList() {
            const url = `${BASE_URL}/stock/stocks?countryId=${COUNTRY_ID}&pageSize=10&page=1&key=${API_KEY}`;
            log(`正在請求列表: ${url}`);
            
            try {
                const res = await fetch(url);
                const json = await res.json();
                
                if (json.code === 200 && json.data.records) {
                    log(`獲取成功! 共有 ${json.data.total} 條數據。`);
                    log("--- 前3條示例 ---");
                    json.data.records.slice(0, 3).forEach(stock => {
                        log(`名稱: ${stock.name} | 代碼: ${stock.symbol} | PID: ${stock.id}`);
                    });
                    log("------------------");
                    
                    // 自動填充第一個PID方便測試
                    if(json.data.records.length > 0) {
                        document.getElementById('pidInput').value = json.data.records[0].id;
                        log(`已自動填充示例 PID: ${json.data.records[0].id}`);
                    }
                } else {
                    log("錯誤: " + json.message);
                }
            } catch (err) {
                log("網絡請求失敗");
                console.error(err);
            }
        }

        // 2. 渲染 K 線
        async function renderChart() {
            const pid = document.getElementById('pidInput').value;
            if(!pid) return alert('請輸入 PID');

            // 請求日線數據 P1D
            const url = `${BASE_URL}/stock/kline?pid=${pid}&interval=P1D&key=${API_KEY}`;
            log(`請求 K 線: PID=${pid}`);

            try {
                const res = await fetch(url);
                const json = await res.json();

                if (json.code === 200 && json.data) {
                    // 數據格式轉換 StockTV -> KlineCharts
                    const dataList = json.data.map(item => ({
                        timestamp: item.time,
                        open: Number(item.open),
                        high: Number(item.high),
                        low: Number(item.low),
                        close: Number(item.close),
                        volume: Number(item.volume)
                    }));
                    
                    // 排序
                    dataList.sort((a, b) => a.timestamp - b.timestamp);
                    
                    chart.applyNewData(dataList);
                    log(`圖表已更新,加載數據 ${dataList.length} 條`);
                } else {
                    log("無 K 線數據或 API 報錯");
                }
            } catch (err) {
                log("請求 K 線失敗");
                console.error(err);
            }
        }
    </script>
</body>
</html>

4. 常見印度藍籌股 (供參考)

如果在測試時需要驗證數據,可以在列表中留意以下代碼:

  • RELIANCE: Reliance Industries
  • TCS: Tata Consultancy Services
  • HDFCBANK: HDFC Bank
  • INFY: Infosys
  • ICICIBANK: ICICI Bank
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.