首先获取以下产品的代码:
- 外汇
- 国际期货
- 国际期货
- 国内期货
- 国际金银
- 数字货币
- 股指期货
取到产品代码后,websocket就可以连接了。 将产品代码推送到连接的服务器,服务器会实时推送最新的行情数据
产品代码 :
- 恒指期货 HSI
- 德指期货 DAX
- 英镑美元 fx_sgbpusd
- 欧元美元 fx_seurusd
后面的币种就是产品代码,用这个代码进行订阅产品,多个产品代码使用应为逗号隔开。
一、数据解析
服务器实时推送的行情数据为以下格式:
{
"body":
{
"StockCode":"hf_LHC",
"Price":108.33,
"Open":108.65,
"LastClose":108.7,
"High":108.825,
"Low":108.15,
"Time":"2021-04-0922:36:50",
"LastTime":1617979010,
"BP1":108.325,
"BV1":"27",
"SP1":108.375,
"SV1":"5",
"TotalVol":"108136.000",
"Diff":-0.37,
"DiffRate":-0.34
}
}
| StockCode | 产品代码 |
| Price | 最新价 |
| Open | 开盘价 |
| LastClose | 昨日收盘价 |
| High | 最高价 |
| Low | 最低价 |
| Time | 更新时间 |
| LastTime | 更新时间戳 |
| BP1 | 买价 |
| BV1 | 买量 |
| SP1 | 卖价 |
| SV1 | 卖量 |
| TotalVol | 成交量 |
| DiffRate | 涨跌幅 |
| Diff | 涨跌额 |
二、连接Websocket获取实时推送数据
以下是JavaScript的连接demo,可以参考下。同时也支持其他后端语言的连接,PHP、Java等。
1: new WebSocket('ws://39.107.99.235/ws'); 将里面的地址,换成真实的连接地址
2: ws.onopen 当服务连接成功后,会调用该方法。连接成功后,将订阅的产品代码,以json的形式发送到服务器
3:ws.onmessage 服务器推送消息时,会调用该方法。这个里面可以处理,服务器推送过来的数据
4:ws.onclose 服务断开时会调用此方法,这里可以实现重连机制
5:ws.onerror 服务连接失败,会调用此方法。可以做一些其他业务操作
function sendMessage() {
var ws = new WebSocket('ws://39.107.99.235/ws');
ws.onopen = function () {
var send = {
event: ')(*&^&*()',
Key: 'btcusdt,ethusdt,xrpusdt' //指定产品代码,多个使用英文逗号隔开
};
ws.send(JSON.stringify(send));
ws.onmessage = function (ev) {
data = JSON.parse(ev.data);
body = data.body; //该body为推送的数据
console.log(body); //打印数据
};
ws.onclose = function (ev) {
};
ws.onerror = function (ev) {
};
};
}
sendMessage();
三、使用php获取K线数据接口
<?php
$baseUrl = 'http://39.107.99.235:1008/redis.php';
$code = 'btcusdt'; //获取比特币的k线 产品代码
$time = '1m'; //获取1分钟的k线。 time: 时间格式, 1m 5m 15m 30m 1h 1d 1M
$rows = 200; //获取近期200条数据 获取条数
$url = $baseUrl."?code={$code}&time={$time}&rows={$rows}";
//请求K线图数据
$data = http_request($url);
//打印K线图数据
var_dump($data);
//返回数据格式
//[
// [
// 1623061860000,
// 36500,
// 36540.08,
// 36500,
// 36510.65,
// "2021-06-07 18:31:00",
// 100
// ],
// [
// 1623061860000,
// 36500,
// 36540.08,
// 36500,
// 36510.65,
// "2021-06-07 18:30:00",
// 100
// ]
//]
/**
* CURL 请求
* @date 2021-10-19 10:52
* @param $URI
* @param bool $isHearder
* @param bool $post
* @return mixed
*/
function http_request($URI, $isHearder = false, $post = false)
{
$header = [
'Accept-Encoding: gzip',
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $URI);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 5); //单位 秒,也可以使用
//curl_setopt($ch, CURLOPT_NOSIGNAL, 1); //注意,毫秒超时一定要设置这个
//curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1000); //超时毫秒,cURL 7.16.2中被加入。从PHP 5.2.3起可使用
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_HEADER, $isHearder);
curl_setopt($ch, CURLOPT_ENCODING, "gzip");
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36');
if (strpos($URI, 'https') === 0) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
if ($post) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}
$result = curl_exec($ch);
curl_close($ch);
return $result;
}