一、基础配置
在对接任何接口前,您需要从 StockTV 获取 API Key,并设置基础请求函数。
<?php
// StockTV API 配置
define('STOCKTV_API_KEY', '您从StockTV获取的Key'); // 务必替换
define('STOCKTV_BASE_URL', 'https://api.stocktv.top');
/**
* 发起 HTTP GET 请求
* @param string $endpoint API路径
* @param array $params 查询参数
* @return array
*/
function stocktvApiRequest($endpoint, $params = []) {
$params['key'] = STOCKTV_API_KEY; // 必须包含 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) {
curl_close($ch);
return ['error' => 'CURL Error: ' . curl_error($ch)];
}
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$decoded = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE) {
return ['error' => 'JSON Decode Error'];
}
return $decoded;
}
?>
二、马来西亚股票核心数据对接
文档显示,股票相关的接口主要集中在 /stock/ 路径下。马来西亚的关键参数是 countryId=42。
1. 获取马来西亚市场股票列表
这是最基础的接口,用于分页获取马来西亚交易所的股票列表,包含实时行情、基本面和技术指标。
<?php
/**
* 获取马来西亚股票市场列表
* @param int $page 页码
* @param int $pageSize 每页数量
* @param int|null $exchangeId 交易所ID (非必需)
* @return array
*/
function getMalaysiaStockList($page = 1, $pageSize = 50, $exchangeId = null) {
$endpoint = '/stock/stocks';
$params = [
'countryId' => 42, // 马来西亚
'page' => $page,
'pageSize' => $pageSize,
];
if ($exchangeId !== null) {
$params['exchangeId'] = $exchangeId; // 可用于筛选特定交易所
}
return stocktvApiRequest($endpoint, $params);
}
// 使用示例
$result = getMalaysiaStockList(1, 10);
if (isset($result['code']) && $result['code'] == 200) {
$stocks = $result['data']['records'];
echo "马来西亚股票列表 (第1页,共" . $result['data']['total'] . "只):\n";
foreach ($stocks as $stock) {
$trend = $stock['chgPct'] >= 0 ? '↑' : '↓';
echo sprintf(" %s (%s): %.3f %s%.2f%%\n",
$stock['name'],
$stock['symbol'],
$stock['last'],
$trend,
abs($stock['chgPct'])
);
}
} else {
echo "请求失败: " . ($result['message'] ?? '未知错误');
}
?>
接口返回字段说明(摘录自文档):
id: 股票的唯一PID,用于后续查询(如K线)。name/symbol: 股票名称和代码。last/chg/chgPct: 最新价、涨跌额、涨跌幅。high/low: 当日最高/最低价。volume: 成交量。open: 是否开市。technicalDay/technicalHour等: 日线/小时线技术指标信号(如strong_buy)。
2. 查询特定马来西亚股票
可以通过股票PID、名称或代码进行精确查询。
<?php
/**
* 查询马来西亚股票
* @param int|null $pid 股票PID
* @param string|null $symbol 股票代码
* @param string|null $name 股票名称
* @return array
*/
function queryMalaysiaStock($pid = null, $symbol = null, $name = null) {
$endpoint = '/stock/queryStocks';
$params = [];
if ($pid) $params['id'] = $pid;
if ($symbol) $params['symbol'] = $symbol;
if ($name) $params['name'] = $name;
// 注意:此接口本身不包含countryId参数,结果中会包含所有匹配项,需自行筛选flag为'MY'的
$result = stocktvApiRequest($endpoint, $params);
// 筛选马来西亚股票
if (isset($result['code']) && $result['code'] == 200 && is_array($result['data'])) {
$result['data'] = array_filter($result['data'], function($stock) {
return isset($stock['flag']) && $stock['flag'] === 'MY';
});
}
return $result;
}
?>
3. 获取马来西亚市场指数
获取马来西亚的主要市场指数,如富时大马综合指数 (FTSE Bursa Malaysia KLCI)。
<?php
/**
* 获取马来西亚市场指数
* @return array
*/
function getMalaysiaIndices() {
$endpoint = '/stock/indices';
$params = [
'countryId' => 42, // 马来西亚
// 'flag' => 'MY' // 非必要参数
];
return stocktvApiRequest($endpoint, $params);
}
?>
4. 获取马来西亚股票K线数据
这是进行技术分析的核心接口,支持多种时间周期。
<?php
/**
* 获取马来西亚股票K线数据
* @param int $pid 股票PID
* @param string $interval K线周期: PT5M, PT15M, PT1H, PT5H, P1D, P1W, P1M
* @return array
*/
function getMalaysiaStockKline($pid, $interval = 'P1D') {
$endpoint = '/stock/kline';
$params = [
'pid' => $pid,
'interval' => $interval,
];
return stocktvApiRequest($endpoint, $params);
}
// 使用示例:获取某股票(PID=41602)的日K线
$klineData = getMalaysiaStockKline(41602, 'P1D');
if (isset($klineData['code']) && $klineData['code'] == 200) {
$klines = $klineData['data'];
echo "K线数据(日线)最新3条:\n";
$recent = array_slice($klines, -3); // 取最后3条
foreach ($recent as $bar) {
$date = date('Y-m-d', $bar['time'] / 1000);
echo "日期: {$date}, 开:{$bar['open']}, 高:{$bar['high']}, 低:{$bar['low']}, 收:{$bar['close']}, 量:{$bar['volume']}\n";
}
}
?>
5. 获取马来西亚IPO新股日历
了解马来西亚市场的新股发行和上市计划。
<?php
/**
* 获取马来西亚IPO信息
* @param int|null $type 1=未上市, 2=已上市
* @return array
*/
function getMalaysiaIpo($type = null) {
$endpoint = '/stock/getIpo';
$params = ['countryId' => 42];
if (in_array($type, [1, 2])) {
$params['type'] = $type;
}
return stocktvApiRequest($endpoint, $params);
}
?>
6. 获取马来西亚股票涨跌排行榜
实时了解市场热点。
<?php
/**
* 获取马来西亚股票排行榜
* @param int $type 1涨幅榜 2跌幅榜 3涨停榜 4跌停榜
* @return array
*/
function getMalaysiaStockRank($type = 1) {
$endpoint = '/stock/updownList';
$params = [
'countryId' => 42,
'type' => $type,
];
return stocktvApiRequest($endpoint, $params);
}
?>
三、高级功能:WebSocket 实时数据
对于实时行情推送,文档推荐使用WebSocket,这比HTTP轮询更高效。马来西亚股票的实时数据同样通过此方式获取。
关键步骤:
- 连接:连接到
wss://ws-api.stocktv.top/connect?key=您的Key。 - 订阅:连接成功后,发送订阅消息,指定要订阅的马来西亚股票的
pid。 - 接收:服务器会持续推送订阅股票的实时行情。
- 心跳:需要定期发送心跳消息以保持连接。
文档中提供了一个前端Demo,并提到有Java Demo。对于PHP,您可以使用 ratchet/pawl 等WebSocket客户端库来实现。由于实现相对复杂且依赖具体业务逻辑,此处不展开详细代码,但核心流程如上。
四、完整对接流程与注意事项
- 获取API Key:这是第一步,也是必须的一步。所有请求都必须携带
key参数。 - 确定数据需求:
- 批量列表/监控:使用
getMalaysiaStockList或getMalaysiaStockRank。 - 特定股票查询:使用
queryMalaysiaStock,或先通过列表接口找到股票的pid。 - 历史数据分析:使用
getMalaysiaStockKline。 - 实时推送:必须使用WebSocket接口。
- 市场概况:使用
getMalaysiaIndices。 - 新股信息:使用
getMalaysiaIpo。
- 批量列表/监控:使用
- 核心参数:
countryId: 马来西亚固定为 42。pid: 股票的唯一标识,用于K线、WebSocket订阅等精细操作。务必从列表或查询接口获取正确的pid。interval: K线周期,根据分析需求选择。
- 错误处理与日志:在生产环境中,务必对API返回的
code和message字段进行判断,并记录日志。 - 性能与频率:虽然文档未明确说明频率限制,但应避免不必要的高频请求。对于大量股票的实时监控,WebSocket是唯一推荐的方式。
通过以上接口,您可以全面对接马来西亚股票的实时行情、历史K线、市场指数、IPO信息等数据。请根据您的实际应用场景组合使用这些接口。