package com.yami.trading.huobi.wss;
|
|
import cn.hutool.http.Header;
|
import cn.hutool.http.HttpRequest;
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
|
import java.net.URI;
|
import java.util.Arrays;
|
import java.util.List;
|
import java.util.Objects;
|
import java.util.Random;
|
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.Executors;
|
|
/**
|
* @Author: TG:哪吒出海
|
* @Date: 2025-04-26-3:59
|
* @Description:
|
*/
|
public class JiduTest {
|
|
public static final List<String> JD_WSS = Arrays.asList(
|
"wss://stream.jdnx3.com",
|
"wss://stream.jdnx4.com",
|
"wss://stream.jdnx5.com",
|
"wss://stream.jdnx6.com",
|
"wss://stream.jdnx7.com",
|
"wss://stream.jdnx8.com",
|
"wss://stream.jdnx9.com",
|
"wss://stream.jdnx10.com"
|
);
|
|
/**
|
* 获取订阅token
|
*/
|
public static final String JD_TOKEN = "https://api.jdnx6.com/Public/openSubscribe";
|
|
/**
|
* 更新订阅产品 [配合前端更新,传wss token]
|
*/
|
public static final String JD_PRODUCT = "https://api.jdnx7.com/Public/updateSubscribe";
|
|
private static ExecutorService wssTask = Executors.newCachedThreadPool();
|
|
|
public static void main(String[] args) {
|
init();
|
}
|
|
public static void init() {
|
System.out.println("正在初始化股票数据源....");
|
Random random = new Random();
|
String wssUrl = JD_WSS.get(random.nextInt(JD_WSS.size()));
|
String token = socketToken();
|
//默认为美股产品wss
|
List<String> symbolsData = Arrays.asList(
|
"US30","DXY","SE30","CHINA50","SWI20","USTEC","NOR25","F40","NETH25","US500","US2000","HK50","ES35","CHINAH","STOXX50","UK100","JP225","MidDE50","CA60","IT40","DE40","SA40","AUS200","TecDE30",
|
"BTCUSD","ETHUSD","SOLUSD","XTZUSD","LTCUSD","MTCUSD","DSHUSD","KSMUSD","UNIUSD","AVXUSD","EOSUSD","LNKUSD","XLMUSD","DOGUSD","GLMUSD","ADAUSD","BCHUSD","BNBUSD","DOTUSD","XRPUSD",
|
"EURUSD","USDCNH","USDJPY","EURCAD","EURCHF","GBPAUD","CADJPY","NZDJPY","AUDCHF","AUDCAD","CHFJPY","GBPNZD","EURAUD","AUDNZD","USDHKD","USDZAR","GBPJPY","EURNZD","USDSEK","USDSGD","CADCHF","AUDJPY","EURJPY","USDCHF","USDCAD","EURGBP","AUDUSD","USDNOK","GBPUSD","GBPCAD"
|
);
|
updateSubscribe(symbolsData,token);
|
|
if(Objects.nonNull(token)){
|
//开始连接
|
wssTask.execute(() -> {
|
connectionWss(wssUrl + "/Quotation/" + token);
|
});
|
}
|
|
}
|
|
private void updateSubscribeOne(String symbol, String token){
|
updateSubscribe(Arrays.asList(symbol),token);
|
}
|
private static void updateSubscribe(List<String> symbols, String token){
|
String body = HttpRequest
|
.post(JD_PRODUCT)
|
.form("symbols", JSON.toJSONString(symbols))
|
.header(Header.AUTHORIZATION,"Bearer " + token)
|
.execute()
|
.body();
|
JSONObject bodyJson = JSON.parseObject(body);
|
if(bodyJson.getInteger("code").intValue() == 200){
|
System.out.println("【极度证券】产品订阅设置为:" + JSON.toJSONString(symbols));
|
}
|
}
|
|
private static void connectionWss(String url){
|
try {
|
JiduWebSocketClient webSocketClient = new JiduWebSocketClient(new URI(url));
|
webSocketClient.connect();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
public static String socketToken(){
|
String body = HttpRequest.post(JD_TOKEN).execute().body();
|
JSONObject bodyJson = JSON.parseObject(body);
|
if(bodyJson.getInteger("code").intValue() == 200){
|
String token = bodyJson.getJSONObject("data").getString("token");
|
System.out.println("成功获取到【极度socketToken】:" + token);
|
return token;
|
} else {
|
System.out.println("获取【极度token报错】 :" + body);
|
}
|
return null;
|
}
|
|
}
|