使用PHP对接韩国股票市场API 实时数据、IPO和K线(Kline)的PHP对接方案

简介: 本文档详解StockTV API对接韩国股市的完整方案:含API密钥配置、动态获取韩国countryId方法、KOSPI/KOSDAQ指数与K线数据调用、首尔交易所(ID 60)与KOSDAQ(ID 110)分层查询,以及WebSocket实时行情接入指南,强调时区(UTC+9)、货币(韩元)及客服确认关键参数的重要性。(239字)

一、基础配置

首先,您需要从StockTV获取API Key。所有API请求都必须包含key参数。

<?php
// StockTV API 配置
define('STOCKTV_API_KEY', 'YOUR_API_KEY_HERE'); // 请替换为从StockTV获取的实际Key
define('STOCKTV_BASE_URL', 'https://api.stocktv.top');

/**
 * 通用API请求函数
 * @param string $endpoint API路径
 * @param array $params 查询参数
 * @return array
 */
function stocktvApiRequest($endpoint, $params = []) {
   
    $params['key'] = STOCKTV_API_KEY; // 必需参数

    $url = STOCKTV_BASE_URL . $endpoint . '?' . http_build_query($params);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);

    $response = curl_exec($ch);
    if ($response === false) {
   
        return ['error' => 'CURL Error: ' . curl_error($ch)];
    }
    curl_close($ch);

    $decoded = json_decode($response, true);
    if (json_last_error() !== JSON_ERROR_NONE) {
   
        return ['error' => 'JSON Decode Error'];
    }
    return $decoded;
}
?>

二、韩国股票核心接口

虽然文档没有明确列出韩国的countryId具体数值,但根据文档中提到的国家列表,韩国肯定是支持的。您可以通过以下方式确定韩国的countryId

  1. 测试获取韩国国家ID
    ```php
    <?php
    function findKoreaCountryId() {
    // 先获取股票列表,查看包含"Korea"或"KR"的记录
    $endpoint = '/stock/stocks';
    $params = [

     'pageSize' => 100,
     'page' => 1,
     'key' => STOCKTV_API_KEY
    

    ];

    $result = stocktvApiRequest($endpoint, $params);
    if (isset($result['code']) && $result['code'] == 200) {

     foreach ($result['data']['records'] as $stock) {
         if (isset($stock['countryNameTranslated']) && 
             (stripos($stock['countryNameTranslated'], 'korea') !== false || 
              stripos($stock['countryNameTranslated'], '韩国') !== false ||
              ($stock['flag'] ?? '') === 'KR')) {
             return [
                 'countryId' => $stock['countryId'] ?? null,
                 'countryName' => $stock['countryNameTranslated'] ?? null,
                 'flag' => $stock['flag'] ?? null
             ];
         }
     }
    

    }
    return null;
    }

// 使用示例
$koreaInfo = findKoreaCountryId();
if ($koreaInfo) {
echo "韩国国家ID: {$koreaInfo['countryId']}, 国家名称: {$koreaInfo['countryName']}, 国旗代码: {$koreaInfo['flag']}";
} else {
echo "未找到韩国信息,可能需要联系客服确认countryId";
}
?>


2. **假设韩国countryId后的通用接口**(假设countryId为11,根据文档中提到的交易所ID推断):
文档中提到交易所ID时有一行注释:
> `"exchangeId": 62, //交易所ID 1NYSE 2NASDAQ 54上海交易所 103深圳交易所 46NSE 74BSE 53Mexico 144BIVA 60Seoul 110KOSDAQ 51Toronto 108TSXV 109CSE`

这里明确提到`60Seoul`(首尔交易所)和`110KOSDAQ`(韩国科斯达克),这可能是韩国的交易所ID,而不是countryId。但我们可以参考这个信息。

**基于模型预训练知识的补充**:从常见的国际分类和StockTV的编号模式来看,韩国可能的`countryId`范围可能在50-70之间。最安全的方式是通过实际API调用测试或联系客服确认。

### 三、韩国股票数据主要接口

一旦确定韩国的`countryId`(假设为`11`),您可以使用以下接口:

#### 1. 获取韩国股票市场列表
```php
<?php
function getKoreaStockList($page = 1, $pageSize = 50) {
    $endpoint = '/stock/stocks';
    $params = [
        'countryId' => 11, // 假设韩国countryId为11,实际需确认
        'page' => $page,
        'pageSize' => $pageSize,
    ];
    return stocktvApiRequest($endpoint, $params);
}
?>

2. 获取韩国市场指数

韩国主要有KOSPI和KOSDAQ指数:

<?php
function getKoreaIndices() {
   
    $endpoint = '/stock/indices';
    $params = ['countryId' => 11]; // 假设值
    return stocktvApiRequest($endpoint, $params);
}
?>

3. 获取K线数据

<?php
function getKoreaStockKline($pid, $interval = 'P1D') {
   
    $endpoint = '/stock/kline';
    $params = [
        'pid' => $pid,
        'interval' => $interval, // PT5M, PT15M, PT1H, PT5H, P1D, P1W, P1M
    ];
    return stocktvApiRequest($endpoint, $params);
}
?>

4. 获取韩国ETF数据

文档中有专门的ETF接口,韩国ETF市场也很活跃:

<?php
function getKoreaETFs() {
   
    // 注意:文档中ETFs接口需要联系客服开通
    $endpoint = '/stock/stocks'; // 使用普通股票接口,筛选ETF类型
    $params = [
        'countryId' => 11,
        'pageSize' => 100,
    ];
    $result = stocktvApiRequest($endpoint, $params);
    // 在结果中筛选pairType为"ETF"或名称包含"ETF"的记录
    return $result;
}
?>

四、韩国交易所的特殊性

从文档中可以看到,韩国有两个主要交易所:

  1. 首尔证券交易所(Seoul):交易所ID可能为60
  2. 韩国科斯达克(KOSDAQ):交易所ID可能为110

这在获取数据时可以用于筛选:

<?php
// 获取首尔交易所的股票
function getSeoulExchangeStocks() {
   
    $endpoint = '/stock/stocks';
    $params = [
        'countryId' => 11, // 韩国
        'exchangeId' => 60, // 首尔交易所
        'pageSize' => 50,
    ];
    return stocktvApiRequest($endpoint, $params);
}

// 获取KOSDAQ的股票
function getKosdaqStocks() {
   
    $endpoint = '/stock/stocks';
    $params = [
        'countryId' => 11, // 韩国
        'exchangeId' => 110, // KOSDAQ
        'pageSize' => 50,
    ];
    return stocktvApiRequest($endpoint, $params);
}
?>

五、实时数据(WebSocket)

对于韩国股票的实时行情,必须使用WebSocket接口:

连接地址wss://ws-api.stocktv.top/connect?key=YOUR_API_KEY

<?php
// WebSocket连接示例(概念代码)
// 实际需要安装WebSocket客户端库,如ratchet/pawl
/*
require __DIR__ . '/vendor/autoload.php';

$wsUrl = "wss://ws-api.stocktv.top/connect?key=" . STOCKTV_API_KEY;

// 连接后发送订阅消息
$subscribeMsg = json_encode([
    'action' => 'subscribe',
    'pids' => ['韩国股票PID1', '韩国股票PID2'] // 需要先获取股票的PID
]);
*/
?>

六、完整对接流程

  1. 确认countryId

    • 联系StockTV客服获取准确的韩国countryId
    • 或通过API测试确定(如上面的findKoreaCountryId()函数)
  2. 获取数据

    • 使用确定后的countryId调用相应接口
    • 区分首尔交易所(exchangeId=60)和KOSDAQ(exchangeId=110)
  3. 实时数据

    • 对于实时行情,必须使用WebSocket接口
    • 获取股票的PID用于订阅
  4. 数据处理

    • 韩国股价通常以韩元(KRW)为单位
    • 注意交易时间(韩国标准时间,UTC+9)

七、重要注意事项

  1. countryId确认:文档没有明确列出韩国的countryId,这是对接韩国数据的关键第一步。

  2. 交易所区分:韩国有两个主要交易所,可能需要分别处理。

  3. 数据字段:韩国股票数据会包含特殊的本地化字段,可能需要特别处理。

  4. API限制:注意API调用频率限制,合理设计数据获取策略。

  5. 时区处理:韩国使用UTC+9时区,处理时间数据时需要注意。

建议:在正式对接前,先联系StockTV客服确认韩国的准确countryId和相关的接口参数,以确保对接的准确性。

相关文章
|
23小时前
|
数据采集 人工智能 文字识别
阿里云JVS Claw预制技能Skills及扩展功能说明,预置20中Skills
阿里云版AI龙虾JVS Claw预置20+开箱即用技能,支持Web/手机/电脑多端部署。其核心亮点是“成长型技能”——可搜索、安装、更新、自定义,并具备智能记忆、问题诊断与技能调用能力,让AI从工具进化为专家。

热门文章

最新文章