新加坡股票API 实时行情、K 线及指数数据

一、核心配置

参数 Key 固定值 说明
countryId 36 你指定的国家 ID
key 你的密钥 必填,需联系 StockTV 获取

API 基础信息:

  • Base URL : https://api.stocktv.top
  • 格式: JSON

二、PHP 对接代码

php 复制代码
<?php
// StockTV API 配置
define('STOCKTV_API_KEY', 'YOUR_API_KEY'); // 请替换为你的实际 Key
define('STOCKTV_BASE_URL', 'https://api.stocktv.top');

/**
 * 通用 API 请求函数(严格锁定 countryId=36)
 */
function stocktvApiRequest($endpoint, $params = []) {
    // 1. 强制使用 countryId=36
    $defaultParams = [
        'key' => STOCKTV_API_KEY,
        'countryId' => 36, // 按你要求固定为 36
    ];
    $queryParams = array_merge($defaultParams, $params);
    $url = STOCKTV_BASE_URL . $endpoint . '?' . http_build_query($queryParams);

    // 2. 发起请求
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_TIMEOUT => 10,
    ]);
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    // 3. 解析响应
    if ($httpCode === 200) {
        $data = json_decode($response, true);
        if (isset($data['code']) && $data['code'] == 200) {
            return $data;
        }
        return ['error' => 'API Error: ' . ($data['message'] ?? 'Unknown error')];
    }
    return ['error' => 'HTTP Error: ' . $httpCode];
}

/**
 * 1. 获取股票列表(countryId=36)
 */
function getStockList($page = 1, $pageSize = 20) {
    $endpoint = '/stock/stocks';
    $params = [
        'page' => $page,
        'pageSize' => $pageSize,
    ];
    return stocktvApiRequest($endpoint, $params);
}

/**
 * 2. 查询个股实时行情
 * @param int|string $identifier 股票的 PID(推荐)或代码
 */
function getStockQuote($identifier) {
    $endpoint = '/stock/queryStocks';
    $params = [];
    if (is_numeric($identifier)) {
        $params['id'] = $identifier;
    } else {
        $params['symbol'] = $identifier;
    }
    return stocktvApiRequest($endpoint, $params);
}

/**
 * 3. 获取指数数据(countryId=36)
 */
function getIndices() {
    $endpoint = '/stock/indices';
    return stocktvApiRequest($endpoint);
}

/**
 * 4. 获取历史 K 线数据
 * @param int $pid 股票 PID(必须)
 * @param string $interval 周期: PT1M, PT5M, PT1H, P1D 等
 */
function getKline($pid, $interval = 'P1D') {
    $endpoint = '/stock/kline';
    $params = [
        'pid' => $pid,
        'interval' => $interval,
    ];
    return stocktvApiRequest($endpoint, $params);
}

// ==================== 使用示例 ====================

// 示例1:获取股票列表
$result = getStockList(1, 5);
if (!isset($result['error'])) {
    $stocks = $result['data']['records'] ?? [];
    foreach ($stocks as $stock) {
        echo "代码: {$stock['symbol']}, 名称: {$stock['name']}, 最新价: {$stock['last']}\n";
    }
} else {
    echo $result['error'];
}

// 示例2:查询指定股票(先用 PID 或 Symbol)
$quote = getStockQuote('EXAMPLE'); // 替换为实际代码
if (!isset($quote['error'])) {
    $stockData = $quote['data'] ?? [];
    echo "股票: {$stockData['last']}, 涨跌幅: {$stockData['chgPct']}%\n";
}
?>

三、关键说明与风险提示

  1. 调试建议
    • 第一步:替换 YOUR_API_KEY 为真实值。
    • 第二步:先运行 getStockList(1, 5) 测试。如果返回空,请直接联系 StockTV 官方确认 countryId=36 在你账户下的有效性和对应市场。

四、接口返回结构(参考)

成功响应格式(code=200):

json 复制代码
{
  "code": 200,
  "data": {
    "records": [
      {
        "id": 12345,
        "symbol": "STOCK1",
        "name": "Example Stock",
        "last": 100.50,
        "chgPct": 1.5,
        "volume": 1000000,
        "exchangeId": 1
      }
    ]
  }
}
相关推荐
神奇小汤圆33 分钟前
牛客网Java八股文|2026秋招面试题汇总(金九银十冲刺专用)
后端
cfm_291438 分钟前
SpringBoot MockMvc
spring boot·后端·log4j
神奇小汤圆1 小时前
你的Java天花板,不是Spring Boot,是思维方式
后端
梨子同志1 小时前
Maven
后端
用户41659673693551 小时前
堡垒机 Web CLI 部署教程
后端
xiyueyezibile1 小时前
“自迭代” Skill 的 team-pitfalls 的演进
前端·后端·ai编程
叫我少年1 小时前
C# StringBuilder 基础入门
后端
会写代码的建筑师1 小时前
C# 源生成器使用方法
后端·架构
用户638982245891 小时前
Poi-Tl根据word模板生成合并表头使用
后端
聚美智数1 小时前
黄历查询-运势查询-国际法定节假日查询-API接口介绍
android·java·数据库