新加坡股票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
      }
    ]
  }
}
相关推荐
苍何2 分钟前
保姆级教程,Codex 接入 DeepSeek V4 Pro 和 Grok 4.6,6 种方法全整理
后端
水无痕simon7 分钟前
5、六大工作模式-1
java
苍何9 分钟前
全球首款原生全模态交互式世界模型来了,AI 视频终于能“玩”了
后端
一只叫煤球的猫12 分钟前
Spring AI 2.0 源码解析(一):一次 ChatClient 调用到底经历了什么?
后端·面试·ai编程
andongni20314 分钟前
后端参数校验
spring boot·后端·mybatis
颜进强22 分钟前
06 - OpenSpec change 从模糊想法到完整契约:new change / explore / propose 三连
前端·后端·ai编程
Cache技术分享22 分钟前
499. Java 反射 - 获取类型上的注解
前端·后端
用户693717500138423 分钟前
9531 款 AI 工具流量真相:当 90% 的访问涌向 100 个平台,普通创业者还有机会吗?
前端·后端
KhalilRuan29 分钟前
UnityCsReference——笔记
java·开发语言·笔记