PHP查询实时股票行情

记录一个实时行情接口,通过PHP查询实时股票行情

<?php// Special Note:
// GitHub: https://github.com/alltick/realtime-forex-crypto-stock-tick-finance-websocket-api
// Token Application: https://alltick.io
// Replace "testtoken" in the URL below with your own token
// API addresses for forex, cryptocurrencies, and precious metals:
// https://quote.tradeswitcher.com/quote-b-ws-api
// Stock API address:
// https://quote.tradeswitcher.com/quote-stock-b-ws-api$params = '{"trace":"1111111111111111111111111","data":{"code":"AAPL.US","kline_type":1,"kline_timestamp_end":0,"query_kline_num":10,"adjust_type":0}}';$url = 'https://quote.tradeswitcher.com/quote-stock-b-api/kline?token=testtoken';
$method = 'GET';$opts = array(CURLOPT_TIMEOUT => 10, CURLOPT_RETURNTRANSFER => 1, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false);/* Set specific parameters based on request type */
switch (strtoupper($method)) {case 'GET':$opts[CURLOPT_URL] = $url.'&query='.rawurlencode($params);$opts[CURLOPT_CUSTOMREQUEST] = 'GET';break;default:
}/* Initialize and execute curl request */
$ch = curl_init();
curl_setopt_array($ch, $opts);
$data = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);if ($error) {$data = null;
}echo $data;
?>

这段代码的逻辑可以分为以下几个主要步骤:

  1. 参数设置:首先,定义了一个 JSON 字符串,包含了要查询的股票(如苹果公司的代码 "AAPL.US")和一些其他参数(如 K 线类型、时间戳等)。

  2. 构建请求 URL:指定了请求的 URL,包含 API 端点和一个令牌(token)。该 URL 用于向远程服务发送请求以获取股票的 K 线数据。

  3. 设置 cURL 选项:配置了 cURL 请求的选项,包括:

    • 超时时间设为 10 秒。
    • 返回结果为字符串而不是直接输出。
    • 禁用 SSL 证书验证(可能是为了简化测试环境的设置)。
  4. 请求方法处理:根据指定的请求方法(在此为 GET),将构造好的参数添加到 URL 中。

  5. 执行 cURL 请求

    • 初始化 cURL 会话。
    • 设置请求选项并执行请求。
    • 捕获任何可能的错误。
  6. 输出结果:关闭 cURL 会话后,检查是否有错误。如果没有错误,则输出从 API 返回的数据;如果有错误,则将数据设置为 null。

下面通过Websocket订阅实时股票价格

<?php
require_once __DIR__ . '/vendor/autoload.php';use Workerman\Protocols\Ws;
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;// 接口基本信息:
// GitHub: https://github.com/alltick/realtime-forex-crypto-stock-tick-finance-websocket-api
// 官网:https://alltick.co
// 备用网址:https://alltick.io$worker = new Worker();
// When the process starts
$worker->onWorkerStart = function()
{// Connect to remote websocket server using the websocket protocol$ws_connection = new AsyncTcpConnection("ws://quote.tradeswitcher.com/quote-stock-b-ws-api?token=testtoken");// Send a websocket heartbeat opcode (0x9) to the server every 55 seconds$ws_connection->websocketPingInterval = 10;$ws_connection->websocketType = Ws::BINARY_TYPE_BLOB; // BINARY_TYPE_BLOB for text, BINARY_TYPE_ARRAYBUFFER for binary// After the TCP handshake is completed$ws_connection->onConnect = function($connection){echo "TCP connected\n";// Send subscription request$connection->send('{"cmd_id":22002,"seq_id":123,"trace":"3baaa938-f92c-4a74-a228-fd49d5e2f8bc-1678419657806","data":{"symbol_list":[{"code":"700.HK","depth_level":5},{"code":"AAPL.US","depth_level":5}]}}');};// After the websocket handshake is completed$ws_connection->onWebSocketConnect = function(AsyncTcpConnection $con, $response) {echo $response;};// When a message is received from the remote websocket server$ws_connection->onMessage = function($connection, $data){echo "Received: $data\n";};// When an error occurs, usually due to failure to connect to the remote websocket server$ws_connection->onError = function($connection, $code, $msg){echo "Error: $msg\n";};// When the connection to the remote websocket server is closed$ws_connection->onClose = function($connection){echo "Connection closed and trying to reconnect\n";// If the connection is closed, reconnect after 1 second$connection->reConnect(1);};// After setting up all the callbacks above, initiate the connection$ws_connection->connect();
};
Worker::runAll();
?>

这段代码的逻辑可以概括为以下几个关键步骤:

  1. 引入库:使用 Workerman 库来处理 WebSocket 连接和相关功能。

  2. 创建 Worker:实例化一个 Worker 对象,负责管理和启动进程。

  3. 连接设置

    • 在 Worker 启动时,建立与远程 WebSocket 服务器的连接。
    • 配置心跳机制,以定期发送心跳消息保持连接活跃。
  4. 事件处理

    • 连接成功:一旦连接建立,发送订阅请求,告知服务器希望接收哪些金融数据(如特定股票的市场信息)。
    • 接收消息:处理服务器返回的数据,并输出到控制台。
    • 错误处理:在连接出现错误时,输出错误信息。
    • 连接关闭:当连接关闭时,尝试在短暂延迟后重新连接。
  5. 启动 Worker,开始处理所有的事件和消息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/465014.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金箍棒变化-第15届蓝桥杯国赛Scratch初/中级组真题第1题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第193讲。 如果想持续关注Scratch蓝桥真题解读&#xff0c;可以点击《Scratch蓝桥杯历年真题》并订阅合集&#xff0c;…

简单的 docker 部署ELK

简单的 docker 部署ELK 这是我的运维同事部署ELK的文档&#xff0c;我这里记录转载一下 服务规划 架构: Filebeat->kafka->logstash->ES kafka集群部署参照: kafka集群部署 部署服务程序路径/数据目录端口配置文件elasticsearch/data/elasticsearch9200/data/elas…

Unity XR Interaction Toolkit 开发教程(3)快速配置交互:移动、抓取、UI交互【3.0以上版本】

获取完整课程以及答疑&#xff0c;工程文件下载&#xff1a; https://www.spatialxr.tech/ 视频试看链接&#xff1a; 3.快速配置交互&#xff1a;移动、抓取、UI交互【Unity XR Interaction Toolkit 跨平台开发教程】&#xff08;3.0以上版本&#xff09; 系列教程专栏&…

深度体验SCNet超算平台:SCNet「AI跃升季」·谁是下一个“AI”跃人?

平时做大模型训练的时候总是苦于没有服务器资源来做微调实验&#xff0c;于是这次深度体验了一下SCNet超算平台。 SCNet超算平台是一个超算互联网计算服务平台&#xff0c;有着更大更全更专业的超级算力。显卡从异构加速卡到A800都有。 本次我尝试了大模型的推理和微调。 第一…

求助帖【如何学习核磁共振的原理】

最近提前进组了 我完全不懂磁共振的相关知识 想问问各位大佬有没有推荐的学习路线 或者是学习资料、论坛都可以的&#xff08;我做的方向是磁共振成像技术&#xff09; 老师给了一本书&#xff0c;但是有点看不懂&#xff0c;全英文的 叫Principles Of Magnetic Resonance …

MySQL查询where中包含多个in条件问题

示例&#xff1a; select * from x_table where a in (1,2,3) and b in (4,8) 上面这种查询方法&#xff0c;如果可以通过a和b唯一确定一条数据&#xff0c;但a和b列可以有相同值时&#xff0c;会造成查询数据不准确。 验证&#xff1a; 假设有以下数据&#xff08;手机号为…

HiveSQL 中判断字段是否包含某个值的方法

HiveSQL 中判断字段是否包含某个值的方法 在 HiveSQL 中&#xff0c;有时我们需要判断一个字段是否包含某个特定的值。下面将介绍几种常用的方法来实现这个功能。 一、创建示例表并插入数据 首先&#xff0c;我们创建一个名为employee的表&#xff0c;并插入一些示例数据&am…

python-读写Excel:openpyxl-(4)下拉选项设置

使用openpyxl库的DataValidation对象方法可添加下拉选择列表。 DataValidation参数说明&#xff1a; type&#xff1a; 数据类型("whole", "decimal", "list", "date", "time", "textLength", "custom"…

求平面连接线段组成的所有最小闭合区间

这个功能确实非常实用&#xff0c;我在过去开发地面分区编辑器时就曾应用过这一算法。最近&#xff0c;在新产品的开发中再次遇到了类似的需求。尽管之前已经实现过&#xff0c;但由于长时间未接触&#xff0c;对算法的具体细节有所遗忘&#xff0c;导致重新编写时耗费了不少时…

springboot - 定时任务

定时任务是企业级应用中的常见操作 定时任务是企业级开发中必不可少的组成部分&#xff0c;诸如长周期业务数据的计算&#xff0c;例如年度报表&#xff0c;诸如系统脏数据的处理&#xff0c;再比如系统性能监控报告&#xff0c;还有抢购类活动的商品上架&#xff0c;这些都离不…

ES管理工具Cerebro 0.8.5 Windows版本安装及启动

前言&#xff1a; Cerebro 的下载地址 https://github.com/lmenezes/cerebro/releases Cerebro 默认监听IP 0.0.0.0 &#xff0c;默认端口9000&#xff0c;访问地址&#xff1a;http://localhost:9000 启动 cmd命令到安装目录下&#xff1a;cerebro-0.8.5\bin 执行命令 ce…

Flutter 正在切换成 Monorepo 和支持 workspaces

其实关于 Monorepo 和 workspaces 相关内容在之前《Dart 3.5 发布&#xff0c;全新 Dart Roadmap Update》 和 《Flutter 之 ftcon24usa 大会&#xff0c;创始人分享 Flutter 十年发展史》 就有简单提到过&#xff0c;而目前来说刚好看到 flaux 这个新进展&#xff0c;所以就再…

[论文][环境]3DGS+Colmap环境搭建_WSL2_Ubuntu22.04 - 副本

0. 前言 仅使用Ubuntu进行场景编译&#xff0c;场景渲染查看则使用Windows下官方提供的编译好的预编译包打开即可&#xff0c;非常方便&#xff08;要注意即使是预编译版本&#xff0c;Windows端也应该安装VS和CUDA Toolkit&#xff0c;要注意的是&#xff0c;最新的SIBR预编译…

json-server的使用(根据json数据一键生成接口)

一.使用目的 在前端开发初期&#xff0c;后端 API 可能还未完成&#xff0c;json-server 可以快速创建模拟的 RESTful API&#xff0c;帮助前端开发者进行开发和测试。 二.安装 npm install json-server //局部安装npm i json-server -g //全局安装 三.使用教程 1.准备一…

导入和部署自定义 LLM 大模型

本文以【Qwen2-7B-Instruct】模型为例&#xff0c;指导如何将自定义大模型导入到 TI 平台&#xff0c;并使用平台内置推理镜像部署大模型对话推理服务。 前置要求 申请 CFS 本文所涉及到的操作需要通过 CFS 存储模型文件&#xff0c;详情请查看创建文件系统及挂载点。 操作…

开源办公软件 ONLYOFFICE 深入探索

文章目录 引言1. ONLYOFFICE 创建的背景1. 1 ONLYOFFICE 项目启动1. 2 ONLYOFFICE 的发展历程 2. 核心功能介绍2. 1 桌面编辑器2. 1. 1 文档2. 1. 2 表格2. 1. 3 幻灯片 2. 2 协作空间2. 3 文档编辑器 - 本地部署版 3. 技术介绍4. 安装5. 优势与挑战6. 个人体验7. 强大但不止于…

HTTP慢速攻击原理及解决办法

目录 引言 HTTP慢速攻击原理 解决办法 Nginx Tomcat 华宇TAS IIS 结论 引言 HTTP慢速攻击&#xff08;Slow HTTP Attack&#xff09;是一种拒绝服务攻击&#xff08;DoS&#xff09;&#xff0c;攻击者通过故意缓慢地发送HTTP请求来耗尽服务器资源&#xff0c;导致合法…

[mysql]修改表和课后练习

目录 DDL数据定义语言 添加一个字段 添加一个字段到最后一个 添加到表中的第一个一个字段 选择其中一个位置: 修改一个字段:数据类型,长度,默认值(略) 重命名一个字段 删除一个字段 重命名表 删除表 清空表 DCL中事务相关内容 DCL中COMMIT和ROLLBACK的讲解 对比TR…

SpringBoot+ClickHouse集成

前面已经完成ClickHouse的搭建&#xff0c;创建账号&#xff0c;创建数据库&#xff0c;保存数据库等&#xff0c;接下来就是在SpringBoot项目中集成ClickHouse。 一&#xff0c;引入依赖 <!-- SpringBoot集成ClickHouse --> <dependency><groupId>com.baom…

搜维尔科技:【煤矿虚拟仿真】煤矿企业、高校、科研单位-多语言支持、数字孪生、交互式学习体验

品牌&#xff1a;SouVR 发票&#xff1a;支持专票、普票 单位&#xff1a;套 版本号&#xff1a;1.0 包装清单&#xff1a;软件1套 软件形式&#xff1a;U盘、光盘 运行环境&#xff1a;windows 应用对象&#xff1a;煤矿企业、高校、科研单位 系统配置&#xff1a;…