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 fa8d0c9..818b724 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 @@ -272,8 +272,9 @@ public class StockService { return result; } - public String getNewsInfo(String url) { + public List getNewsInfo(String url) { String result = ""; + List list = new ArrayList<>(); try { // 使用Jsoup连接到网页 Document doc = Jsoup.connect(url) @@ -281,11 +282,14 @@ public class StockService { .header("Referer", "https://www.business-standard.com/") .header("Accept-Language", "en-US,en;q=0.9") .get(); - result = doc.html().substring(doc.html().indexOf("articleBody") + 15, doc.html().indexOf(",\"author\":") - 1); + result = doc.html().substring(doc.html().indexOf("articleBody") + 14, doc.html().indexOf(",\"author\":") - 1); + list.add(result); + list.add(doc.html().substring(doc.html().indexOf("og:title") + 19, doc.html().indexOf(" list = InvestingApis.of().kline(StockCode.of(stockCode), type); + String period = "P1D"; + String interval = "PT5M"; + String type = "day"; + List list = InvestingApis.of().kIndex(stockCode,period,interval, type); if(list == null || list.size() == 0){ type = "day"; list = InvestingApis.of().kline(StockCode.of(stockCode), type); @@ -954,13 +960,15 @@ public class StockService { } try { IndiaIndexVo vo2 = new IndiaIndexVo(); - String stockCode = "8985"; //"17940"; + String stockCode = "17940"; //"17940";8985 IndiaStockVO market = InvestingApis.of().market(StockCode.of(stockCode)); market.setName("NIFTY50指数"); vo2.setIndexVo(market); - String type = "min"; - List list = InvestingApis.of().kline(StockCode.of(stockCode), type); + String period = "P1D"; + String interval = "PT1M"; + String type = "day"; + List list = InvestingApis.of().kIndex(stockCode,period,interval, type); if(list == null || list.size() == 0){ type = "day"; list = InvestingApis.of().kline(StockCode.of(stockCode), type); diff --git a/src/main/java/cn/stock/market/infrastructure/api/investing/InvestingApis.java b/src/main/java/cn/stock/market/infrastructure/api/investing/InvestingApis.java index 0720def..fa410cf 100644 --- a/src/main/java/cn/stock/market/infrastructure/api/investing/InvestingApis.java +++ b/src/main/java/cn/stock/market/infrastructure/api/investing/InvestingApis.java @@ -153,7 +153,6 @@ public class InvestingApis { "Time": "1698055197", "Url": "/equities/aditya-birla", "Volume": 3693615 - * @param httpClient * @param currPage * @param pageSize * @return @@ -252,7 +251,35 @@ public class InvestingApis { .collect(Collectors.toList()) ; } - + public List kIndex(String code,String period, String interval,String type) throws IOException { + if(code == null) { + throw new RuntimeException("找不到股票信息"); + } + Date nowDate = new Date(); + JSONObject json = InvestingInvokerApis.of().__IndiaIndex(code, period,interval); + return json + .getJSONArray("data") + .stream() + .map(val -> { + JSONArray _ar = (JSONArray) val; + JSONObject item = new JSONObject(); + item.put("date", _ar.get(0)); + item.put("open", _ar.get(1)); + item.put("high", _ar.get(2)); + item.put("low", _ar.get(3)); + item.put("close", _ar.get(4)); + item.put("volume", _ar.get(5)); + return item; + }).filter(val -> { + if("day".equalsIgnoreCase(type)) { + return DateUtil.isSameDay(nowDate, new Date(val.getLong("date"))); + } + return true; + }) + .collect(Collectors.toList()) + ; + } + public static InvestingApis of() { return new InvestingApis(); } diff --git a/src/main/java/cn/stock/market/infrastructure/api/investing/InvestingInvokerApis.java b/src/main/java/cn/stock/market/infrastructure/api/investing/InvestingInvokerApis.java index 57924da..06b5f2e 100644 --- a/src/main/java/cn/stock/market/infrastructure/api/investing/InvestingInvokerApis.java +++ b/src/main/java/cn/stock/market/infrastructure/api/investing/InvestingInvokerApis.java @@ -201,6 +201,15 @@ public class InvestingInvokerApis { String body = httpClient().newCall(builder.build()).execute().body().string(); return JSON.parseObject(body); } + + public JSONObject __IndiaIndex(String code,String period, String interval)throws IOException { + String tmpl = "https://api.investing.com/api/financialdata/{}/historical/chart/?period={}&interval={}&pointscount=160"; + String url = StrFormatter.format(tmpl, code, period, interval); + Builder builder = builderGet(url); + + String body = httpClient().newCall(builder.build()).execute().body().string(); + return JSON.parseObject(body); + } public static InvestingInvokerApis of() { return new InvestingInvokerApis(); diff --git a/src/main/java/cn/stock/market/infrastructure/db/po/BtodayStockPO.java b/src/main/java/cn/stock/market/infrastructure/db/po/BtodayStockPO.java index fddb048..5802af8 100644 --- a/src/main/java/cn/stock/market/infrastructure/db/po/BtodayStockPO.java +++ b/src/main/java/cn/stock/market/infrastructure/db/po/BtodayStockPO.java @@ -71,4 +71,10 @@ public class BtodayStockPO { /** * 上次更新时间 */ Date lastUpdateTime; + + /** 是否锁定 0否 1是 */ + Integer isLock; + + /** 是否展示 0是 1否 */ + Integer isShow; } diff --git a/src/main/java/cn/stock/market/infrastructure/job/InvestingTask.java b/src/main/java/cn/stock/market/infrastructure/job/InvestingTask.java index e8103d2..de262c7 100644 --- a/src/main/java/cn/stock/market/infrastructure/job/InvestingTask.java +++ b/src/main/java/cn/stock/market/infrastructure/job/InvestingTask.java @@ -117,15 +117,15 @@ public class InvestingTask { String id = contentUrl.substring(contentUrl.lastIndexOf("-") + 1, contentUrl.lastIndexOf("_")); String imgUrl = n.substring(n.indexOf("img src=") + 9, n.indexOf("?")); String time = n.substring(n.indexOf("Last Updated") + 23, n.indexOf("IST") - 9); - String title = n.substring(n.indexOf("html\">") + 6, n.indexOf("
") - 47); SiteNews siteNews = new SiteNews(); siteNews.setAddTime(new Date()); siteNews.setSourceId(id); - siteNews.setTitle(title); siteNews.setDescription(time); siteNews.setImgurl(imgUrl); - siteNews.setContent(stockService.getNewsInfo(contentUrl)); + List newsInfo = stockService.getNewsInfo(contentUrl); + siteNews.setContent(newsInfo.get(0)); + siteNews.setTitle(newsInfo.get(1)); List list = newsRepository.findAll(QSiteNewsPO.siteNewsPO.sourceId.eq(id)); if (list.size() == 0) { newsRepository.save(siteNews); diff --git a/src/main/java/cn/stock/market/infrastructure/job/Scraper.java b/src/main/java/cn/stock/market/infrastructure/job/Scraper.java index 1c53c70..dc54bcf 100644 --- a/src/main/java/cn/stock/market/infrastructure/job/Scraper.java +++ b/src/main/java/cn/stock/market/infrastructure/job/Scraper.java @@ -261,6 +261,8 @@ public class Scraper { btodayStock.setSelfUrl(url); btodayStock.setUrl(detailUrl); btodayStock.setLastUpdateTime(new Date()); + btodayStock.setIsLock(0); + btodayStock.setIsShow(0); btodayStockRepo.save(btodayStock); /* if (webInfo != null) { diff --git a/src/main/java/cn/stock/market/web/StockApiController.java b/src/main/java/cn/stock/market/web/StockApiController.java index 1a6d0e1..069d640 100644 --- a/src/main/java/cn/stock/market/web/StockApiController.java +++ b/src/main/java/cn/stock/market/web/StockApiController.java @@ -167,6 +167,34 @@ public class StockApiController { return ServerResponse.createBySuccess(newsRepository.findAll(ConditionBuilder.builder().build(), PageParam.of(pageNum, pageSize), QSiteNewsPO.siteNewsPO.id.desc())); } + @RequestMapping({"test.do"}) + @ResponseBody + public ServerResponse test(@RequestParam("url") String url, @RequestParam("pageNum") Integer pageNum) { + String news = stockService.getNews(); + List newsList = Arrays.asList(news.split(" newsInfo = stockService.getNewsInfo(contentUrl); + siteNews.setContent(newsInfo.get(0)); + siteNews.setTitle(newsInfo.get(1)); + List list = newsRepository.findAll(QSiteNewsPO.siteNewsPO.sourceId.eq(id)); + if (list.size() == 0) { + newsRepository.save(siteNews); + } + }); + return ServerResponse.createBySuccess(); + } + //印度股票时线-K线 @RequestMapping({"getINDTimeK.do"}) @ApiOperation(value = "印度股票K线", httpMethod = "GET")