提交部分代码
This commit is contained in:
25
src/main/java/cn/stock/market/MoneyStockSuggestDTO.java
Normal file
25
src/main/java/cn/stock/market/MoneyStockSuggestDTO.java
Normal file
@@ -0,0 +1,25 @@
|
||||
package cn.stock.market;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author gs
|
||||
* @date 2024/1/6 11:12
|
||||
*/
|
||||
@Data
|
||||
public class MoneyStockSuggestDTO {
|
||||
|
||||
private String stockType;
|
||||
private String stockName;
|
||||
private String stockUrl;
|
||||
private String highPrice;
|
||||
private String lowPrice;
|
||||
private String lastPrice;
|
||||
private String prevClosePrice;
|
||||
private String change;
|
||||
private String changePercent;
|
||||
|
||||
private String scId;
|
||||
|
||||
|
||||
}
|
||||
@@ -1,12 +1,23 @@
|
||||
package cn.stock.market.web;
|
||||
|
||||
import cn.stock.market.MoneyStockSuggestDTO;
|
||||
import cn.stock.market.domain.basic.entity.MoneyStock;
|
||||
import cn.stock.market.domain.basic.repository.MoneyStockRepository;
|
||||
import cn.stock.market.infrastructure.db.po.QMoneyStockPO;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.google.common.collect.Lists;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiResponse;
|
||||
import io.swagger.annotations.ApiResponses;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.jsoup.Jsoup;
|
||||
import org.jsoup.nodes.Document;
|
||||
import org.jsoup.nodes.Element;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
@@ -16,18 +27,27 @@ import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author gs
|
||||
* @date 2024/1/4 10:25
|
||||
*/
|
||||
@RestController
|
||||
@Api(value = "/MoneyApiController", tags = "money股票行情")
|
||||
@Slf4j
|
||||
public class MoneyApiController {
|
||||
|
||||
|
||||
@Autowired
|
||||
private RestTemplate restTemplate;
|
||||
|
||||
@Autowired
|
||||
private MoneyStockRepository moneyStockRepository;
|
||||
|
||||
|
||||
@ApiOperation(value = "股票详情信息",httpMethod = "GET")
|
||||
@ApiImplicitParams({
|
||||
@@ -133,23 +153,26 @@ public class MoneyApiController {
|
||||
})
|
||||
@GetMapping("/api/market/money/getStockDetail")
|
||||
@ResponseBody
|
||||
public JSONObject forwardRequest(@RequestParam String stockType, @RequestParam String symbol) {
|
||||
public JSONObject getStockDetail(@RequestParam String stockType, @RequestParam String symbol) {
|
||||
String url = String.format("https://priceapi.moneycontrol.com/pricefeed/%s/equitycash/%s",stockType,symbol);
|
||||
|
||||
// 设置重试次数
|
||||
int maxRetries = 3;
|
||||
for (int retry = 1; retry <= maxRetries; retry++) {
|
||||
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.GET, null, String.class);
|
||||
try {
|
||||
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.GET, null, String.class);
|
||||
|
||||
if (responseEntity.getStatusCode().value() == 200 && responseEntity.getBody() != null) {
|
||||
return JSONObject.parseObject(responseEntity.getBody());
|
||||
if (responseEntity.getStatusCode().value() == 200 && responseEntity.getBody() != null) {
|
||||
return JSONObject.parseObject(responseEntity.getBody());
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
}
|
||||
|
||||
// 如果不是最后一次重试,则等待一段时间再进行下一次重试
|
||||
if (retry < maxRetries) {
|
||||
try {
|
||||
// 你可以根据需要调整等待的时间
|
||||
Thread.sleep(100); // 1秒钟
|
||||
// 1秒钟
|
||||
Thread.sleep(100);
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
@@ -158,4 +181,352 @@ public class MoneyApiController {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static void nseActives() {
|
||||
String url = "https://www.moneycontrol.com/stocks/marketstats/nse-mostactive-stocks/nifty-50-9/";
|
||||
try {
|
||||
Document doc = Jsoup.connect(url).get();
|
||||
int size = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div.bsr_table.hist_tbl_hm > table > tbody > tr").size();
|
||||
System.err.println(size);
|
||||
for (int i =1;i<=size;i++){
|
||||
Element company_a = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child("+i+") > td.PR > span > a").first();
|
||||
if (company_a != null) {
|
||||
String stockUrl = company_a.attr("href");
|
||||
String stockName = company_a.text();
|
||||
log.info(stockName);
|
||||
log.info(stockUrl);
|
||||
}
|
||||
|
||||
String highPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child("+i+") > td:nth-child(2)").first());
|
||||
log.info(highPrice);
|
||||
|
||||
String lowPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(3)").first());
|
||||
log.info(lowPrice);
|
||||
|
||||
String lastPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(4)").first());
|
||||
log.info(lastPrice);
|
||||
|
||||
String change = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(5)").first());
|
||||
log.info(change);
|
||||
|
||||
String changePercent = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(6)").first());
|
||||
log.info(changePercent);
|
||||
|
||||
log.info("---------------------------------------------" + i);
|
||||
}
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private static void bseActives() {
|
||||
String url = "https://www.moneycontrol.com/stocks/marketstats/bsemact1/index.php";
|
||||
try {
|
||||
Document doc = Jsoup.connect(url).get();
|
||||
int size = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr").size();
|
||||
System.err.println(size);
|
||||
for (int i =1;i<=size;i++){
|
||||
Element company_a = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child("+i+") > td.PR > span > a").first();
|
||||
if (company_a != null) {
|
||||
String stockUrl = company_a.attr("href");
|
||||
String stockName = company_a.text();
|
||||
log.info(stockName);
|
||||
log.info(stockUrl);
|
||||
}
|
||||
|
||||
String highPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(2)").first());
|
||||
log.info(highPrice);
|
||||
|
||||
String lowPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(3)").first());
|
||||
log.info(lowPrice);
|
||||
|
||||
String lastPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(4)").first());
|
||||
log.info(lastPrice);
|
||||
|
||||
String prevClosePrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(5)").first());
|
||||
log.info(prevClosePrice);
|
||||
|
||||
String change = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(6)").first());
|
||||
log.info(change);
|
||||
|
||||
String changePercent = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(7)").first());
|
||||
log.info(changePercent);
|
||||
|
||||
log.info("---------------------------------------------" + i);
|
||||
}
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private static List<MoneyStockSuggestDTO> bseGainer() {
|
||||
String url = "https://www.moneycontrol.com/stocks/marketstats/bse-gainer/sensex_4/";
|
||||
List<MoneyStockSuggestDTO> list = Lists.newArrayList();
|
||||
try {
|
||||
Document doc = Jsoup.connect(url).get();
|
||||
int size = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr").size();
|
||||
for (int i =1;i<=size;i++){
|
||||
Element company_a = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child("+i+") > td.PR > span > a").first();
|
||||
MoneyStockSuggestDTO dto = new MoneyStockSuggestDTO();
|
||||
if (company_a != null) {
|
||||
String stockUrl = company_a.attr("href");
|
||||
String stockName = company_a.text();
|
||||
log.info(stockName);
|
||||
log.info(stockUrl);
|
||||
dto.setStockName(stockName);
|
||||
dto.setStockUrl(stockUrl);
|
||||
}
|
||||
|
||||
String highPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(2)").first());
|
||||
dto.setHighPrice(highPrice);
|
||||
|
||||
String lowPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(3)").first());
|
||||
dto.setLowPrice(lowPrice);
|
||||
|
||||
String lastPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(4)").first());
|
||||
dto.setLastPrice(lastPrice);
|
||||
|
||||
String prevClosePrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(5)").first());
|
||||
dto.setPrevClosePrice(prevClosePrice);
|
||||
|
||||
String change = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(6)").first());
|
||||
dto.setChange(change);
|
||||
|
||||
String changePercent = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(7)").first());
|
||||
dto.setChangePercent(changePercent);
|
||||
|
||||
dto.setStockType("bse");
|
||||
list.add(dto);
|
||||
log.info("---------------------------------------------" + i);
|
||||
}
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
private static List<MoneyStockSuggestDTO> nseGainer() {
|
||||
String url = "https://www.moneycontrol.com/stocks/marketstats/nsegainer/index.php";
|
||||
List<MoneyStockSuggestDTO> list = Lists.newArrayList();
|
||||
try {
|
||||
Document doc = Jsoup.connect(url).get();
|
||||
int size = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr").size();
|
||||
for (int i =1;i<=size;i++){
|
||||
MoneyStockSuggestDTO dto = new MoneyStockSuggestDTO();
|
||||
Element company_a = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child("+i+") > td.PR > span > h3 > a").first();
|
||||
if (company_a != null) {
|
||||
String stockUrl = company_a.attr("href");
|
||||
String stockName = company_a.text();
|
||||
dto.setStockUrl(stockUrl);
|
||||
dto.setStockName(stockName);
|
||||
}
|
||||
|
||||
String highPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(2)").first());
|
||||
dto.setHighPrice(highPrice);
|
||||
|
||||
String lowPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(3)").first());
|
||||
dto.setLowPrice(lowPrice);
|
||||
|
||||
String lastPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(4)").first());
|
||||
dto.setLastPrice(lastPrice);
|
||||
|
||||
String prevClosePrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(5)").first());
|
||||
dto.setPrevClosePrice(prevClosePrice);
|
||||
|
||||
String change = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(6)").first());
|
||||
dto.setChange(change);
|
||||
|
||||
String changePercent = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(7)").first());
|
||||
dto.setChangePercent(changePercent);
|
||||
dto.setStockType("nse");
|
||||
list.add(dto);
|
||||
}
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
private static List<MoneyStockSuggestDTO> nseTopLoser() {
|
||||
String url = "https://www.moneycontrol.com/stocks/marketstats/nseloser/index.php";
|
||||
List<MoneyStockSuggestDTO> list = Lists.newArrayList();
|
||||
|
||||
try {
|
||||
Document doc = Jsoup.connect(url).get();
|
||||
int size = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr").size();
|
||||
for (int i =1;i<=size;i++){
|
||||
MoneyStockSuggestDTO dto = new MoneyStockSuggestDTO();
|
||||
Element company_a = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child("+i+") > td.PR > span > h3 > a").first();
|
||||
if (company_a != null) {
|
||||
String stockUrl = company_a.attr("href");
|
||||
String stockName = company_a.text();
|
||||
dto.setStockUrl(stockUrl);
|
||||
dto.setStockName(stockName);
|
||||
}
|
||||
|
||||
String highPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(2)").first());
|
||||
dto.setHighPrice(highPrice);
|
||||
String lowPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(3)").first());
|
||||
dto.setLowPrice(lowPrice);
|
||||
String lastPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(4)").first());
|
||||
dto.setLastPrice(lastPrice);
|
||||
|
||||
String prevClosePrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(5)").first());
|
||||
dto.setPrevClosePrice(prevClosePrice);
|
||||
|
||||
String change = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(6)").first());
|
||||
dto.setChange(change);
|
||||
|
||||
String changePercent = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(7)").first());
|
||||
dto.setChangePercent(changePercent);
|
||||
dto.setStockType("nse");
|
||||
list.add(dto);
|
||||
log.info("---------------------------------------------" + i);
|
||||
}
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
private static List<MoneyStockSuggestDTO> bseTopLoser() {
|
||||
String url = "https://www.moneycontrol.com/stocks/marketstats/bse-loser/sensex_4/";
|
||||
List<MoneyStockSuggestDTO> list = Lists.newArrayList();
|
||||
|
||||
try {
|
||||
Document doc = Jsoup.connect(url).get();
|
||||
int size = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr").size();
|
||||
for (int i =1;i<=size;i++){
|
||||
Element company_a = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td.PR > span > a").first();
|
||||
MoneyStockSuggestDTO dto = new MoneyStockSuggestDTO();
|
||||
if (company_a != null) {
|
||||
String stockUrl = company_a.attr("href");
|
||||
String stockName = company_a.text();
|
||||
dto.setStockName(stockName);
|
||||
dto.setStockUrl(stockUrl);
|
||||
|
||||
}
|
||||
|
||||
String highPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(2)").first());
|
||||
dto.setHighPrice(highPrice);
|
||||
|
||||
String lowPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(3)").first());
|
||||
dto.setLowPrice(lowPrice);
|
||||
|
||||
String lastPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(4)").first());
|
||||
dto.setLastPrice(lastPrice);
|
||||
|
||||
String prevClosePrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(5)").first());
|
||||
dto.setPrevClosePrice(prevClosePrice);
|
||||
|
||||
String change = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(6)").first());
|
||||
dto.setChange(change);
|
||||
|
||||
String changePercent = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(7)").first());
|
||||
dto.setChangePercent(changePercent);
|
||||
list.add(dto);
|
||||
log.info("---------------------------------------------" + i);
|
||||
}
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
// 辅助方法,获取元素的文本或返回空字符串
|
||||
private static String getTextOrEmpty(Element element) {
|
||||
return element != null ? element.text() : "";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@ApiOperation(value = "股票推荐TopGainer",httpMethod = "GET")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name="stockType",value = "BSE或者NSE"),
|
||||
})
|
||||
@ApiResponses(value = {
|
||||
@ApiResponse(code = 200, message = "" +
|
||||
"股票推荐相关: top gainer", response = JSONObject.class),
|
||||
})
|
||||
@GetMapping("/api/market/money/getTopGainer")
|
||||
@ResponseBody
|
||||
public List<MoneyStockSuggestDTO> getTopGainer(@RequestParam String stockType) {
|
||||
List<MoneyStockSuggestDTO> moneyStockSuggestDTOS = null;
|
||||
if(StringUtils.equals(stockType,"nse")){
|
||||
moneyStockSuggestDTOS = nseGainer();
|
||||
}else if(StringUtils.equals(stockType,"bse")){
|
||||
moneyStockSuggestDTOS = bseGainer();
|
||||
}
|
||||
if(CollectionUtils.isNotEmpty(moneyStockSuggestDTOS)){
|
||||
moneyStockSuggestDTOS.stream().forEach(f->
|
||||
f.getStockUrl().replaceAll("(?<!https:)//", "/"));
|
||||
|
||||
List<String> selfUlrList = moneyStockSuggestDTOS.stream().map(MoneyStockSuggestDTO::getStockUrl).collect(Collectors.toList());
|
||||
if(CollectionUtils.isNotEmpty(selfUlrList)){
|
||||
List<MoneyStock> all = moneyStockRepository.findAll(QMoneyStockPO.moneyStockPO.selfUrl.in(selfUlrList));
|
||||
if(CollectionUtils.isNotEmpty(all)){
|
||||
moneyStockSuggestDTOS.stream().filter(f->all.stream().anyMatch(s->s.getSelfUrl().equals(f.getStockUrl())))
|
||||
.forEach(f->f.setScId(all.stream().filter(s->s.getSelfUrl().equals(f.getStockUrl())).findFirst().orElse(null).getMoneyScId()));
|
||||
}
|
||||
}
|
||||
}
|
||||
return moneyStockSuggestDTOS;
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation(value = "股票推荐TopLoser",httpMethod = "GET")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name="stockType",value = "BSE或者NSE"),
|
||||
})
|
||||
@ApiResponses(value = {
|
||||
@ApiResponse(code = 200, message = "" +
|
||||
"股票推荐相关: top gainer", response = JSONObject.class),
|
||||
})
|
||||
@GetMapping("/api/market/money/getTopLoser")
|
||||
@ResponseBody
|
||||
public List<MoneyStockSuggestDTO> getTopLoser(@RequestParam String stockType) {
|
||||
List<MoneyStockSuggestDTO> moneyStockSuggestDTOS = null;
|
||||
if(StringUtils.equals(stockType,"nse")){
|
||||
moneyStockSuggestDTOS = nseTopLoser();
|
||||
}else if(StringUtils.equals(stockType,"bse")){
|
||||
moneyStockSuggestDTOS = bseTopLoser();
|
||||
}
|
||||
if (CollectionUtils.isNotEmpty(moneyStockSuggestDTOS)){
|
||||
moneyStockSuggestDTOS.stream().forEach(f->
|
||||
f.getStockUrl().replaceAll("(?<!https:)//", "/"));
|
||||
List<String> selfUlrList = moneyStockSuggestDTOS.stream().map(MoneyStockSuggestDTO::getStockUrl).collect(Collectors.toList());
|
||||
if(CollectionUtils.isNotEmpty(selfUlrList)){
|
||||
List<MoneyStock> all = moneyStockRepository.findAll(QMoneyStockPO.moneyStockPO.selfUrl.in(selfUlrList));
|
||||
if(CollectionUtils.isNotEmpty(all)){
|
||||
moneyStockSuggestDTOS.stream().filter(f->all.stream().anyMatch(s->s.getSelfUrl().equals(f.getStockUrl())))
|
||||
.forEach(f->f.setScId(all.stream().filter(s->s.getSelfUrl().equals(f.getStockUrl())).findFirst().orElse(null).getMoneyScId()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return moneyStockSuggestDTOS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
nseGainer();
|
||||
nseActives();
|
||||
nseTopLoser();
|
||||
|
||||
bseActives();
|
||||
bseGainer();
|
||||
bseTopLoser();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user