diff --git a/src/main/java/cn/stock/market/domain/basic/service/StockService.java b/src/main/java/cn/stock/market/domain/basic/service/StockService.java
index ccd03f2..394127d 100644
--- a/src/main/java/cn/stock/market/domain/basic/service/StockService.java
+++ b/src/main/java/cn/stock/market/domain/basic/service/StockService.java
@@ -1,51 +1,33 @@
package cn.stock.market.domain.basic.service;
-import java.io.BufferedReader;
import java.io.IOException;
-import java.io.InputStreamReader;
import java.math.BigDecimal;
-import java.net.URL;
-import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
-import javax.net.ssl.X509TrustManager;
import javax.persistence.EntityExistsException;
import javax.servlet.http.HttpServletRequest;
-import javax.sound.midi.Soundbank;
-import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.text.StrFormatter;
import cn.stock.market.dto.model.*;
+import cn.stock.market.infrastructure.api.GrowwInApis;
import cn.stock.market.infrastructure.api.TodayApis;
import cn.stock.market.infrastructure.api.investing.IndiaIndexVo;
import cn.stock.market.infrastructure.api.investing.IndiaStockVO;
import cn.stock.market.infrastructure.api.investing.InvestingApis;
import cn.stock.market.infrastructure.api.investing.InvestingInvokerApis;
import cn.stock.market.infrastructure.api.sina.vo.HotSearchVO;
-import cn.stock.market.utils.*;
import com.ag.utils.CollectionUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.common.base.Stopwatch;
-import okhttp3.OkHttpClient;
-import okhttp3.Protocol;
-import okhttp3.Request;
import okhttp3.Request.Builder;
import org.apache.commons.lang3.StringUtils;
import cn.stock.market.infrastructure.db.po.QStockPO;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.utils.HttpClientUtils;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
-import org.jsoup.nodes.Element;
-import org.jsoup.select.Elements;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.http.HttpEntity;
@@ -1008,7 +990,12 @@ public class StockService {
vo1.setKLine(kine);
indexVoList.add(vo1);
}catch (Exception e){
- log.info("获取NIFTY50指数数据异常,异常信息{}。。。。",e.getMessage());
+ log.info("BToday获取BSESENSEX指数数据异常,异常信息。。。。", e);
+ try {
+ GrowwInApis.requestSenSexData(indexVoList);
+ } catch (Exception e1) {
+ log.info("GrowwIn获取BSESENSEX指数数据异常,异常信息。。。。", e1);
+ }
}
try {
@@ -1028,7 +1015,12 @@ public class StockService {
vo1.setKLine(kine);
indexVoList.add(vo1);
}catch (Exception e){
- log.info("获取NIFTY50指数数据异常,异常信息{}。。。。",e.getMessage());
+ log.info("BToday获取NIFTY50指数数据异常,异常信息。。。。", e);
+ try {
+ GrowwInApis.requestNifty50Data(indexVoList);
+ } catch (Exception e1) {
+ log.info("GrowwIn获取NIFTY50指数数据异常,异常信息。。。。", e1);
+ }
}
return ServerResponse.createBySuccess(indexVoList);
diff --git a/src/main/java/cn/stock/market/infrastructure/api/GrowwInApis.java b/src/main/java/cn/stock/market/infrastructure/api/GrowwInApis.java
new file mode 100644
index 0000000..7eedc18
--- /dev/null
+++ b/src/main/java/cn/stock/market/infrastructure/api/GrowwInApis.java
@@ -0,0 +1,233 @@
+package cn.stock.market.infrastructure.api;
+
+import cn.stock.market.dto.TodayStockDTO;
+import cn.stock.market.infrastructure.api.investing.IndiaIndexVo;
+import cn.stock.market.infrastructure.api.investing.IndiaStockVO;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 数据来源网站:..., ...
+ *
+ * @auther jnerh
+ */
+public class GrowwInApis {
+
+ public static final String INDEX_DETAIL_URL = "https://groww.in/v1/api/stocks_data/v1/accord_points/exchange/%s/segment/CASH/latest_indices_ohlc/%s";
+ public static final String INDEX_KLINE_URL = "https://groww.in/v1/api/charting_service/v2/chart/delayed/exchange/%s/segment/CASH/%s/daily?intervalInMinutes=%s&minimal=true";
+
+
+ public static void requestSenSexData(List indexVoList) {
+ IndiaIndexVo vo1 = new IndiaIndexVo();
+ JSONObject object = GrowwInApis.getSenSexDetail();
+ IndiaStockVO market = GrowwInApis.objToVo(object);
+ market.setName("BSESENSEX指数");
+ vo1.setIndexVo(market);
+
+ List kine = GrowwInApis.getSenSexKline();
+ vo1.setKLine(kine);
+ indexVoList.add(vo1);
+ }
+ public static void requestNifty50Data(List indexVoList) {
+ IndiaIndexVo vo1 = new IndiaIndexVo();
+ JSONObject object = GrowwInApis.getNifty50Detail();
+ IndiaStockVO market = GrowwInApis.objToVo(object);
+ market.setName("NIFTY50指数");
+ vo1.setIndexVo(market);
+
+ List kine = GrowwInApis.getNifty50Kline();
+ vo1.setKLine(kine);
+ indexVoList.add(vo1);
+ }
+
+ /**
+ * 获取Nifty50指数详情
+ */
+ public static JSONObject getIndexDetail(String exchange, String type) {
+ String url = String.format(INDEX_DETAIL_URL, exchange, type);
+ String str = get(url);
+ return JSON.parseObject(str);
+ }
+
+ /**
+ * 获取k线图
+ */
+ public static List getIndexKline(String exchange, String type, String intervalInMinutes) {
+ String url = String.format(INDEX_KLINE_URL, exchange, type, intervalInMinutes);
+ String str = get(url);
+ JSONObject object = JSON.parseObject(str);
+ return getList(object.getString("candles"));
+ }
+
+
+ /**
+ * 获取Nifty50指数详情
+ */
+ public static JSONObject getSenSexDetail() {
+ return getIndexDetail("BSE", "1");
+ }
+
+ /**
+ * 获取k线图
+ */
+ public static List getSenSexKline() {
+ return getIndexKline("BSE", "1", "1");
+ }
+
+ /**
+ * 获取Nifty50指数详情
+ */
+ public static JSONObject getNifty50Detail() {
+ return getIndexDetail("NSE", "NIFTY");
+ }
+
+ /**
+ * 获取k线图
+ */
+ public static List getNifty50Kline() {
+ return getIndexKline("NSE", "NIFTY", "5");
+ }
+
+ static String get(String url) {
+ CloseableHttpClient httpClient = null;
+ CloseableHttpResponse response = null;
+ String result = "";
+
+ try {
+ httpClient = HttpClients.createDefault();
+ HttpGet httpGet = new HttpGet(url);
+ httpGet.setHeader("Referer", "https://groww.in/indices/nifty");
+ httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0");
+ httpGet.setHeader("X-App-Id", "growwWeb");
+ httpGet.setHeader("X-Device-Id", "fd4815a2-49e4-570a-931a-0316d4d8a52d");
+ httpGet.setHeader("X-Device-Type", "desktop");
+ httpGet.setHeader("X-Platform", "web");
+ RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000).setConnectionRequestTimeout(35000).setSocketTimeout(60000).build();
+ httpGet.setConfig(requestConfig);
+ response = httpClient.execute(httpGet);
+ HttpEntity entity = response.getEntity();
+ result = EntityUtils.toString(entity);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+
+ if (null != response) {
+ try {
+ response.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ if (null != httpClient) {
+ try {
+ httpClient.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ return result;
+ }
+
+ public static IndiaStockVO objToVo(JSONObject object) {
+ IndiaStockVO market = new IndiaStockVO();
+ if (object.containsKey("close")) {
+ market.setClose(object.getString("close"));
+ }
+ if (object.containsKey("value")) {
+ market.setNowPrice(object.getString("value"));
+ }
+ if (object.containsKey("dayChangePerc")) {
+ market.setRate(object.getString("dayChangePerc"));
+ }
+ if (object.containsKey("high")) {
+ market.setHigh(object.getString("high"));
+ }
+ if (object.containsKey("low")) {
+ market.setLow(object.getString("low"));
+ }
+ if (object.containsKey("open")) {
+ market.setOpen(object.getString("open"));
+ }
+
+ return market;
+ }
+
+ private static List getList(String json) {
+ List dataObject = new ArrayList<>();
+ JSONArray jsonArray = JSON.parseArray(json);
+ for (Object obj : jsonArray) {
+ JSONObject entity = new JSONObject();
+ JSONArray jsonArray1 = JSON.parseArray(obj.toString());
+ entity.put("upd_date", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(JSON.parseArray(obj.toString()).getLong(0) * 1000)).replace(" ", "T"));
+ entity.put("price", jsonArray1.getBigDecimal(1));
+ dataObject.add(entity);
+ }
+ return dataObject;
+ }
+
+ private static TodayStockDTO todayStockDTO(JSONObject jsonObject) {
+ TodayStockDTO dto = new TodayStockDTO();
+ if (jsonObject.containsKey("exchange")) {
+ dto.setStockType(jsonObject.getString("exchange"));
+ } else {
+ dto.setStockType("");
+ }
+ if (jsonObject.containsKey("lname")) {
+ dto.setStockName(jsonObject.getString("lname"));
+ } else {
+ dto.setStockName("");
+ }
+ if (jsonObject.containsKey("high_price")) {
+ dto.setHighPrice(jsonObject.getString("highPrice"));
+ } else {
+ dto.setHighPrice("0.00");
+ }
+ if (jsonObject.containsKey("low_price")) {
+ dto.setLowPrice(jsonObject.getString("low_price"));
+ } else {
+ dto.setLowPrice("0.00");
+ }
+ if (jsonObject.containsKey("price")) {
+ dto.setLastPrice(jsonObject.getString("price"));
+ } else {
+ dto.setLastPrice("0.00");
+ }
+ if (jsonObject.containsKey("close_price")) {
+ dto.setPrevClosePrice(jsonObject.getString("close_price"));
+ } else {
+ dto.setPrevClosePrice("0.00");
+ }
+ if (jsonObject.containsKey("netchg")) {
+ dto.setChange(jsonObject.getString("netchg"));
+ } else {
+ dto.setChange("0.00");
+ }
+ if (jsonObject.containsKey("perchg")) {
+ dto.setChangePercent(jsonObject.getString("perchg"));
+ } else {
+ dto.setChangePercent("0.00");
+ }
+ return dto;
+
+ }
+
+ public static void main(String[] args) {
+ System.out.println(getNifty50Detail());
+ System.out.println(getNifty50Kline());
+ }
+}