apply new daily stock
This commit is contained in:
6
pom.xml
6
pom.xml
@@ -89,6 +89,12 @@
|
||||
<version>4.1.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.json</groupId>
|
||||
<artifactId>json</artifactId>
|
||||
<version>20240303</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.springfox</groupId>
|
||||
<artifactId>springfox-swagger2</artifactId>
|
||||
|
||||
@@ -29,6 +29,10 @@ public class QMoneyStockPO extends EntityPathBase<MoneyStockPO> {
|
||||
|
||||
public final StringPath moneyScId = createString("moneyScId");
|
||||
|
||||
public final StringPath nseIndiaChartId = createString("nseIndiaChartId");
|
||||
|
||||
public final StringPath nseIndiaId = createString("nseIndiaId");
|
||||
|
||||
public final DateTimePath<java.util.Date> saveTime = createDateTime("saveTime", java.util.Date.class);
|
||||
|
||||
public final StringPath selfDispId = createString("selfDispId");
|
||||
@@ -39,6 +43,8 @@ public class QMoneyStockPO extends EntityPathBase<MoneyStockPO> {
|
||||
|
||||
public final StringPath stockType = createString("stockType");
|
||||
|
||||
public final BooleanPath useFromBseindia = createBoolean("useFromBseindia");
|
||||
|
||||
public QMoneyStockPO(String variable) {
|
||||
super(MoneyStockPO.class, forVariable(variable));
|
||||
}
|
||||
|
||||
@@ -23,6 +23,8 @@ public class QStockIpoPO extends EntityPathBase<StockIpoPO> {
|
||||
|
||||
public final DateTimePath<java.util.Date> createDate = createDateTime("createDate", java.util.Date.class);
|
||||
|
||||
public final StringPath exchangeType = createString("exchangeType");
|
||||
|
||||
public final NumberPath<Integer> id = createNumber("id", Integer.class);
|
||||
|
||||
public final NumberPath<Integer> isList = createNumber("isList", Integer.class);
|
||||
@@ -38,7 +40,6 @@ public class QStockIpoPO extends EntityPathBase<StockIpoPO> {
|
||||
public final StringPath stockCode = createString("stockCode");
|
||||
|
||||
public final StringPath stockName = createString("stockName");
|
||||
public final StringPath exchangeType = createString("exchangeType");
|
||||
|
||||
public final NumberPath<java.math.BigDecimal> stockPrice = createNumber("stockPrice", java.math.BigDecimal.class);
|
||||
|
||||
|
||||
@@ -41,23 +41,23 @@ public class StockMarketLaunch implements CommandLineRunner {
|
||||
MDC.put(MdcUtil.TRACE_ID, MdcUtil.getTraceId());
|
||||
log.info("StockMarketLaunch RUNNING....");
|
||||
|
||||
String marketDomain = env.getProperty("market.domain");
|
||||
if(StringUtils.isNotBlank(marketDomain)) {
|
||||
log.info("发现marketDomain: {}", marketDomain);
|
||||
SiteSetting siteSetting = SiteSettingRepository.of().get();
|
||||
if(siteSetting == null) {
|
||||
log.info("找不到siteSetting信息, 无法设置");
|
||||
} else {
|
||||
log.info("设置前: {}", JSON.toJSONString(siteSetting));
|
||||
boolean flag = siteSetting.checkAndAddIfNoExists(marketDomain);
|
||||
if(! flag) {
|
||||
SiteSettingRepository.of().saveAndFlush(siteSetting);
|
||||
log.info("已经设置: {}....", JSON.toJSONString(siteSetting));
|
||||
} else {
|
||||
log.info("包含, 跳过....");
|
||||
}
|
||||
}
|
||||
}
|
||||
// String marketDomain = env.getProperty("market.domain");
|
||||
// if(StringUtils.isNotBlank(marketDomain)) {
|
||||
// log.info("发现marketDomain: {}", marketDomain);
|
||||
// SiteSetting siteSetting = SiteSettingRepository.of().get();
|
||||
// if(siteSetting == null) {
|
||||
// log.info("找不到siteSetting信息, 无法设置");
|
||||
// } else {
|
||||
// log.info("设置前: {}", JSON.toJSONString(siteSetting));
|
||||
// boolean flag = siteSetting.checkAndAddIfNoExists(marketDomain);
|
||||
// if(! flag) {
|
||||
// SiteSettingRepository.of().saveAndFlush(siteSetting);
|
||||
// log.info("已经设置: {}....", JSON.toJSONString(siteSetting));
|
||||
// } else {
|
||||
// log.info("包含, 跳过....");
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
// @Bean
|
||||
|
||||
27
src/main/java/cn/stock/market/dto/model/Symbol.java
Normal file
27
src/main/java/cn/stock/market/dto/model/Symbol.java
Normal file
@@ -0,0 +1,27 @@
|
||||
package cn.stock.market.dto.model;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class Symbol {
|
||||
private String symbol;
|
||||
private String description;
|
||||
private String type;
|
||||
private String exchange;
|
||||
private String currencyCode;
|
||||
private String currencyLogoid;
|
||||
private String logoid;
|
||||
private String providerId;
|
||||
private String sourceLogoid;
|
||||
private String sourceId;
|
||||
private String country;
|
||||
private boolean isPrimaryListing;
|
||||
private List<String> typespecs;
|
||||
|
||||
// Getters and setters
|
||||
// Bạn có thể dùng Lombok nếu muốn ngắn gọn hơn
|
||||
// Hoặc generate getter/setter trong IDE
|
||||
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
package cn.stock.market.infrastructure.job;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.util.*;
|
||||
|
||||
import cn.stock.market.domain.basic.entity.Stock;
|
||||
import cn.stock.market.dto.model.Symbol;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
import org.json.*;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
|
||||
@Component
|
||||
public class StockNewTask {
|
||||
|
||||
private static final OkHttpClient client = new OkHttpClient();
|
||||
private static final String BASE_URL = "https://symbol-search.tradingview.com/symbol_search/v3/";
|
||||
private static final String PARAMS = "?start=%d&hl=1&country=DE&lang=en&search_type=stocks&domain=production&sort_by_country=US&promo=true&exchange=XETR";
|
||||
|
||||
@PostConstruct
|
||||
public void test() throws Exception {
|
||||
List<Symbol> allSymbols = new ArrayList<>();
|
||||
int start = 0;
|
||||
int symbolsRemaining;
|
||||
|
||||
do {
|
||||
int finalStart = start;
|
||||
if(start > 0){
|
||||
finalStart = start + 1;
|
||||
}
|
||||
|
||||
String url = BASE_URL + String.format(PARAMS, finalStart);
|
||||
Request request = new Request.Builder()
|
||||
.url(url)
|
||||
.addHeader("Origin", "https://www.tradingview.com")
|
||||
.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)")
|
||||
.addHeader("Accept", "application/json, text/plain, */*")
|
||||
.addHeader("Referer", "https://www.tradingview.com/")
|
||||
.build();
|
||||
|
||||
Response response = client.newCall(request).execute();
|
||||
|
||||
if (!response.isSuccessful()) {
|
||||
throw new RuntimeException("Unexpected response code: " + response.code());
|
||||
}
|
||||
|
||||
String responseBody = response.body().string();
|
||||
JSONObject json = new JSONObject(responseBody);
|
||||
JSONArray symbols = json.getJSONArray("symbols");
|
||||
symbolsRemaining = json.getInt("symbols_remaining");
|
||||
|
||||
for (int i = 0; i < symbols.length(); i++) {
|
||||
JSONObject s = symbols.getJSONObject(i);
|
||||
Symbol symbol = new Symbol();
|
||||
|
||||
symbol.setSymbol(s.optString("symbol"));
|
||||
symbol.setDescription(s.optString("description"));
|
||||
symbol.setType(s.optString("type"));
|
||||
symbol.setExchange(s.optString("exchange"));
|
||||
symbol.setCurrencyCode(s.optString("currency_code"));
|
||||
symbol.setCurrencyLogoid(s.optString("currency-logoid"));
|
||||
symbol.setLogoid(s.optString("logoid"));
|
||||
symbol.setProviderId(s.optString("provider_id"));
|
||||
symbol.setSourceLogoid(s.optString("source_logoid"));
|
||||
symbol.setSourceId(s.optString("source_id"));
|
||||
symbol.setCountry(s.optString("country"));
|
||||
symbol.setPrimaryListing(s.optBoolean("is_primary_listing", false));
|
||||
Stock stock = new Stock();
|
||||
// typespecs array
|
||||
JSONArray typespecsArr = s.optJSONArray("typespecs");
|
||||
List<String> typespecsList = new ArrayList<>();
|
||||
if (typespecsArr != null) {
|
||||
for (int j = 0; j < typespecsArr.length(); j++) {
|
||||
typespecsList.add(typespecsArr.getString(j));
|
||||
}
|
||||
}
|
||||
symbol.setTypespecs(typespecsList);
|
||||
|
||||
allSymbols.add(symbol);
|
||||
}
|
||||
|
||||
Thread.sleep(1000);
|
||||
|
||||
start += symbols.length();
|
||||
System.out.println("Fetched: " + symbols.length() + ", Remaining: " + symbolsRemaining);
|
||||
|
||||
} while (symbolsRemaining > 0);
|
||||
|
||||
// Output test
|
||||
for (int i = 0; i < Math.min(5, allSymbols.size()); i++) {
|
||||
Symbol s = allSymbols.get(i);
|
||||
System.out.println(s.getSymbol() + " - " + s.getDescription());
|
||||
}
|
||||
// Lúc này bạn có thể insert vào DB hoặc return từ service
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@ spring:
|
||||
show-sql: true
|
||||
# Redis配置
|
||||
redis:
|
||||
host: 43.153.174.179
|
||||
host: 43.153.142.41
|
||||
password: a5v8b86P4mVzFlUqJV
|
||||
port: 30001
|
||||
database: 1
|
||||
@@ -17,7 +17,7 @@ spring:
|
||||
datasource:
|
||||
stock-market:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
url: jdbc:mysql://43.153.174.179:30000/india_stock?useUnicode=true&characterEncoding=utf-8
|
||||
url: jdbc:mysql://43.153.142.41:30000/india_stock?useUnicode=true&characterEncoding=utf-8
|
||||
username: root
|
||||
password: uNejHIFQGJOUtYTmE
|
||||
maxActive: 500
|
||||
|
||||
Reference in New Issue
Block a user