PHP查询实时股票行情
【摘要】 记录一个实时行情接口,通过PHP查询实时股票行情。首先,定义了一个 JSON 字符串,包含了要查询的股票(如`TSLA.US`)和一些其他参数(如 K 线类型、时间戳等)。
记录一个实时行情接口,通过PHP查询实时股票行情
API基础信息:
官网:https://infoway.io/
Github地址:https://github.com/infoway-api/realtime-market-data-api
代码示例
<?php
$apiUrl = 'https://data.infoway.io/stock/batch_kline/1/10/002594.SZ%2C00285.HK%2CTSLA.US';
// 初始化cURL会话
$ch = curl_init();
// 设置URL和其他选项
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'User-Agent: Mozilla/5.0',
'Accept: application/json',
'apiKey: yourApikey'
]);
// 执行请求并获取响应
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// 关闭cURL资源
curl_close($ch);
// 输出结果
echo "HTTP code: $httpCode";
echo "message: $response";
?>
这段代码的逻辑可以分为以下几个主要步骤:
-
参数设置:
首先,定义了一个 JSON 字符串,包含了要查询的股票(如TSLA.US)和一些其他参数(如 K 线类型、时间戳等)。 -
构建请求 URL:
指定了请求的 URL,包含 API 端点和一个令牌(token)。该 URL 用于向远程服务发送请求以获取股票的 K 线数据。 -
设置 cURL 选项:
配置了 cURL 请求的选项,包括:
- 超时时间设为 10 秒。
- 返回结果为字符串而不是直接输出。
- 禁用 SSL 证书验证(可能是为了简化测试环境的设置)。
-
请求方法处理:
根据指定的请求方法(在此为 GET),将构造好的参数添加到 URL 中。 -
执行 cURL 请求:
- 初始化 cURL 会话。
- 设置请求选项并执行请求。
- 捕获任何可能的错误。
- 输出结果:
关闭 cURL 会话后,检查是否有错误。如果没有错误,则输出从 API 返回的数据;如果有错误,则将数据设置为 null。
下面通过Websocket订阅实时股票价格
<?php
require 'vendor/autoload.php';
use WebSocket\Client;
// 替换为你的 Infoway API Key
$apiKey = 'yourApiKey';
$wsUrl = "wss://data.infoway.io/ws?business=stock&apikey=$apiKey";
// 初始化 WebSocket 客户端
$client = new Client($wsUrl, [
'timeout' => 60,
]);
// 构造订阅消息(订阅 00285.HK 的 1分钟K线)
$initMessage = [
"code" => 10004,
"trace" => uniqid(),
"data" => [
"arr" => [
[
"type" => 1, // 1分钟K线
"codes" => "00285.HK" // 港股代码
]
]
]
];
// 发送订阅消息
$client->send(json_encode($initMessage));
// 设置 ping 发送间隔
$lastPingTime = time();
while (true) {
try {
// 每30秒发送一次 ping 保持连接
if (time() - $lastPingTime >= 30) {
$pingMessage = [
"code" => 10010,
"trace" => uniqid()
];
$client->send(json_encode($pingMessage));
$lastPingTime = time();
}
// 接收并处理消息
$message = $client->receive();
echo "📈 Message received: $message\n";
} catch (Exception $e) {
echo "❌ Connection error: " . $e->getMessage() . "\n";
break;
}
}
这段代码的逻辑可以概括为以下几个关键步骤:
-
引入库:使用 Workerman 库来处理 WebSocket 连接和相关功能。
-
创建 Worker:实例化一个 Worker 对象,负责管理和启动进程。
-
连接设置:
- 在 Worker 启动时,建立与远程 WebSocket 服务器的连接。
- 配置心跳机制,以定期发送心跳消息保持连接活跃。
- 事件处理:
- 连接成功:一旦连接建立,发送订阅请求,告知服务器希望接收哪些金融数据(如特定股票的市场信息)。
- 接收消息:处理服务器返回的数据,并输出到控制台。
- 错误处理:在连接出现错误时,输出错误信息。
- 连接关闭:当连接关闭时,尝试在短暂延迟后重新连接。
- 启动 Worker,开始处理所有的事件和消息。
返回示例
{
"c": "4.58", // 当前价格
"h": "4.59", // 最高价
"l": "4.54", // 最低价
"o": "4.55", // 开盘价
"pca": "0.03", // 价格变化(现价 - 昨收)
"pfr": "0.66%", // 价格变化百分比
"s": "00285.HK", // 股票代码(港股)
"t": 1747550648097, // 时间戳(毫秒)
"ty": 1, // K线类型:1 表示1分钟K线
"v": "120000", // 交易量(股数)
"vw": "4.56" // 加权平均价格
}
盘口查询
<?php
require 'vendor/autoload.php';
use WebSocket\Client;
// 请在官网www.infoway.io申请秘钥
$apiKey = 'yourApiKey';
$wsUrl = "wss://data.infoway.io/ws?business=stock&apikey=$apiKey";
// 初始化 WebSocket 客户端
$client = new Client($wsUrl, [
'timeout' => 60,
]);
// 构造初始化消息:订阅港股 00285.HK 的盘口数据
$initMessage = [
"code" => 10002, // 盘口订阅的协议号
"trace" => uniqid(), // 随机可追踪ID
"data" => [
"codes" => "00285.HK" // 港股代码
]
];
// 发送初始化订阅请求
$client->send(json_encode($initMessage));
// 设置 ping 时间戳
$lastPing = time();
while (true) {
try {
// 每30秒发送一次 ping 保持连接
if (time() - $lastPing >= 30) {
$pingMessage = [
"code" => 10010,
"trace" => uniqid()
];
$client->send(json_encode($pingMessage));
$lastPing = time();
}
// 接收消息
$message = $client->receive();
echo "📈 Market Depth Message: $message\n";
} catch (Exception $e) {
echo "❌ WebSocket error: " . $e->getMessage() . "\n";
break;
}
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)