新加坡股票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
      }
    ]
  }
}
相关推荐
ZFJ_张福杰1 小时前
【区块链】我实现了 UTXO 自动选择算法(最小手续费策略)
区块链·交易·utxo·手续费
摇滚侠1 小时前
Unsupported class file major version 61
java·maven
RuoyiOffice1 小时前
SpringBoot+Vue3 企业云盘系统设计:文件上传+共享权限+收藏分类+5GB空间控制——从“网盘孤岛”到“企业知识底座”
spring boot·uni-app·vue·文件管理·云盘·网盘·ruoyioffice
那个失眠的夜1 小时前
Arrays&Lambda&JDK8新特性
java
搬砖的小码农_Sky2 小时前
比特币区块链的算法架构
算法·架构·去中心化·区块链
ch.ju2 小时前
Java程序设计(第3版)第二章——空返回值
java
Vallelonga2 小时前
Rust 中 Cargo.toml & Cargo.lock
开发语言·后端·rust
草莓熊Lotso2 小时前
LangChain从入门到精通:环境搭建→核心能力→LCEL链式编程全实战
android·java·linux·服务器·langchain
贾斯汀玛尔斯10 小时前
每天学一个算法--LSM-Tree(Log-Structured Merge Tree)
java·算法·lsm-tree