done sync us stock and change env

This commit is contained in:
VoGiaHuy2058
2025-07-23 10:19:05 +07:00
parent ccda6cba45
commit 9fd87aaf89
2 changed files with 75 additions and 5 deletions

View File

@@ -31,6 +31,9 @@ public class StockNewTask {
private static final String BASE_URL = "https://symbol-search.tradingview.com/symbol_search/v3/"; private static final String BASE_URL = "https://symbol-search.tradingview.com/symbol_search/v3/";
private static final String PARAMS = "?start={start}&hl=1&country=DE&lang=en&search_type=stocks&domain=production&sort_by_country=US&promo=true&exchange={exchange}"; private static final String PARAMS = "?start={start}&hl=1&country=DE&lang=en&search_type=stocks&domain=production&sort_by_country=US&promo=true&exchange={exchange}";
private static final String US_URL =
"https://financialmodelingprep.com/api/v3/stock-screener";
private static final String US_API_KEY = "57ZI1xeAsqHY7ag0FBuMkwQzt6TQ60dG";
@Autowired @Autowired
StockRepository stockRepository; StockRepository stockRepository;
@@ -113,4 +116,71 @@ public class StockNewTask {
e.printStackTrace(); e.printStackTrace();
} }
} }
@Scheduled(cron = "0 0 8 * * *")
// @PostConstruct
public void fetchListStock() {
try {
List<Stock> nasdaqStocks = fetchStocksByExchange("NASDAQ");
List<Stock> nyseStocks = fetchStocksByExchange("NYSE");
List<Stock> allActiveStocks = new ArrayList<>();
allActiveStocks.addAll(nasdaqStocks);
allActiveStocks.addAll(nyseStocks);
try {
if (!allActiveStocks.isEmpty()) {
stockRepository.saveAll(allActiveStocks);
}
} catch (Exception e) {
log.error("Insert stock failed: {}", e.getMessage());
}
} catch (Exception e) {
log.error("Error fetchListStock every day: {}", e.getMessage());
}
}
private static List<Stock> fetchStocksByExchange(String exchange) throws Exception {
List<Stock> result = new ArrayList<>();
String url = US_URL + "?exchange=" + exchange + "&apikey=" + US_API_KEY;
Request request = new Request.Builder()
.url(url)
.addHeader("accept", "application/json")
.addHeader("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)")
.build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) {
throw new RuntimeException("HTTP error code: " + response.code());
}
String body = response.body().string();
JSONArray array = new JSONArray(body);
for (int i = 0; i < array.length(); i++) {
JSONObject obj = array.getJSONObject(i);
if (!obj.optBoolean("isActivelyTrading", false) && obj.optBoolean("isEtf", false)) {
continue;
}
Stock stock = new Stock();
String stockCodeNew = obj.getString("symbol") + ":" + obj.getString("exchangeShortName");
stock.setStockName(obj.getString("companyName"));
stock.setStockCode(stockCodeNew);
stock.setStockSpell(obj.getString("symbol"));
stock.setStockType(obj.getString("exchangeShortName"));
stock.setStockGid(stockCodeNew);
stock.setStockSymbol(obj.getString("symbol"));
result.add(stock);
}
System.out.println("Fetched " + result.size() + " stocks for exchange: " + exchange);
return result;
}
} }

View File

@@ -3,9 +3,9 @@ spring:
show-sql: true show-sql: true
# Redis配置 # Redis配置
redis: redis:
host: 43.153.142.41 host: 43.160.197.177
password: a5v8b86P4mVzFlUqJV password: redispass123
port: 30041 port: 6379
database: 1 database: 1
lettuce: lettuce:
pool: pool:
@@ -17,9 +17,9 @@ spring:
datasource: datasource:
stock-market: stock-market:
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://43.153.142.41:30040/germany_stock?useUnicode=true&characterEncoding=utf-8 url: jdbc:mysql://43.160.197.177:3306/germany_stock?useUnicode=true&characterEncoding=utf-8
username: root username: root
password: uNejHIFQGJOUtYTmE password: mysqlpass123
maxActive: 500 maxActive: 500
testWhileIdle: true testWhileIdle: true
validationQuery: SELECT 1 validationQuery: SELECT 1