From 5b3cc7e156261a6778100ad995d943db0a6b6f3a Mon Sep 17 00:00:00 2001 From: zhangjian Date: Sat, 20 Apr 2024 17:01:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=B0=E5=BA=A6--=E8=8E=B7=E5=8F=96=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E6=8C=87=E6=95=B0=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?getIndiaIndexByToday.do:=20BToday=E6=B7=BB=E5=8A=A0=E5=85=9C?= =?UTF-8?q?=E5=BA=95=E6=95=B0=E6=8D=AE=E6=BA=90Growwin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/basic/service/StockService.java | 34 +-- .../infrastructure/api/GrowwInApis.java | 233 ++++++++++++++++++ 2 files changed, 246 insertions(+), 21 deletions(-) create mode 100644 src/main/java/cn/stock/market/infrastructure/api/GrowwInApis.java 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()); + } +}