From c464451dab3467a0aace7402a39a6e9ad1b503b5 Mon Sep 17 00:00:00 2001
From: zyy <zyy@email.com>
Date: Wed, 29 Oct 2025 18:12:07 +0800
Subject: [PATCH] 美股新闻
---
trading-order-admin/src/main/java/com/yami/trading/admin/task/cms/XueQiuInfomationGet.java | 164 ++++++++++++++++++++++++++++++++++++------------------
1 files changed, 109 insertions(+), 55 deletions(-)
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/task/cms/XueQiuInfomationGet.java b/trading-order-admin/src/main/java/com/yami/trading/admin/task/cms/XueQiuInfomationGet.java
index 209564c..59faad5 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/task/cms/XueQiuInfomationGet.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/task/cms/XueQiuInfomationGet.java
@@ -1,73 +1,127 @@
package com.yami.trading.admin.task.cms;
-import java.util.List;
-
+import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.yami.trading.bean.cms.Infomation;
+import com.yami.trading.common.util.DateUtil;
+import com.yami.trading.service.cms.InfomationService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.yami.trading.admin.facade.MachineTranslationService;
-import com.yami.trading.bean.cms.Infomation;
-import com.yami.trading.common.config.ThreadPool;
-import com.yami.trading.common.util.StringUtils;
-import com.yami.trading.service.cms.InfomationService;
-
-import cn.hutool.core.bean.BeanUtil;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.time.Instant;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
@Slf4j
@Component
public class XueQiuInfomationGet {
-
+
@Autowired
private InfomationService infomationService;
- @Autowired
- private MachineTranslationService translationService;
-
- private ThreadPoolTaskExecutor taskExecutor=ThreadPool.getApplicationThreadPool();
-// @Scheduled(cron = "0 0/30 * ? * *")
-// public void crawl(){
-// infomationService.getInformation();
-// }
+ private final AtomicInteger requestCount = new AtomicInteger(0);
+ private static final int DAILY_LIMIT = 100;
+ private static final long INTERVAL = 86400 / DAILY_LIMIT * 1000; // 864秒/次
- @Scheduled(cron = "0 */5 * ? * *")
- public void translate(){
- QueryWrapper<Infomation> queryWrapper = new QueryWrapper<>();
- queryWrapper.isNull("translate");
- queryWrapper.eq("lang", "zh-CN");
- List<Infomation> list = infomationService.list(queryWrapper);
- for(Infomation infomation : list){
- try{
- String description = infomation.getDescription();
- String source = infomation.getSource();
- Infomation infomationEn = BeanUtil.copyProperties(infomation, Infomation.class);
- infomationEn.setUuid(null);
- if(StringUtils.isNotEmpty(description)){
- String translate = translationService.translate(description);
- if(translate == null){
- return;
- }
- infomationEn.setDescription(translate);
- }
- if(StringUtils.isNotEmpty(source)){
- String translate = translationService.translate(source);
- if(translate == null){
- return;
- }
- infomationEn.setSource(translate);
- }
- infomationEn.setLang("en");
- infomationService.save(infomationEn);
- infomation.setTranslate("1");
- infomationService.updateById(infomation);
- }catch (Exception e){
- log.info("翻译报错", e);
- }
+ @Scheduled(fixedRate = INTERVAL)
+ public void callApi() {
+ if (requestCount.get() < DAILY_LIMIT) {
+ // 替换为你的实际API调用逻辑
+ System.out.println("调用API (" + requestCount.incrementAndGet() + "/100) " +
+ "时间: " + System.currentTimeMillis());
}
-
}
-}
+
+ @Scheduled(cron = "0 0 0 * * ?") // 每天0点重置计数器
+ public void resetCounter() {
+ requestCount.set(0);
+ }
+
+ @Scheduled(fixedRate = INTERVAL)
+ public void translate(){
+ if (requestCount.get() < DAILY_LIMIT) {
+ String apiUrl = "https://newsapi.org/v2/top-headlines?sources=bbc-news&apiKey=576edade92ff4b63b2b445a6292f3fbf";
+ try {
+ String json = sendGetRequest(apiUrl);
+ List<Infomation> newsList = new ArrayList<>();
+
+ JSONObject jsonObject = JSONObject.parseObject(json);
+ String status = jsonObject.get("status").toString();
+ if(status.equals("ok")) {
+ JSONArray articles = jsonObject.getJSONArray("articles");
+ for (Object object : articles) {
+ JSONObject article = (JSONObject) object;
+ Infomation infomation = new Infomation();
+ infomation.setTitle((String) article.get("title"));
+ infomation.setDescription((String) article.get("description"));
+ infomation.setOriginUrl((String) article.get("url"));
+ infomation.setImg((String) article.get("urlToImage"));
+ String dateStr = (String) article.get("publishedAt");
+ Instant instant = Instant.parse(dateStr);
+ infomation.setCreateTime(Date.from(instant));
+ infomation.setCreatedAt(DateUtil.formatDate(infomation.getCreateTime(),"yyyy-MM-dd HH:mm:ss"));
+ infomation.setContent((String) article.get("content"));
+ infomation.setLang("en");
+ newsList.add(infomation);
+ }
+ newsList.forEach(f->{
+ List<Infomation> list = infomationService.list(new LambdaQueryWrapper<>(Infomation.class).eq(Infomation::getTitle, f.getTitle()));
+ if(CollectionUtil.isEmpty(list)){
+ infomationService.save(f);
+ }
+ });
+ }
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ System.err.println("新闻请求出错: " + e.getMessage());
+ }
+ }
+ }
+
+ public static String sendGetRequest(String urlString) throws Exception {
+ URL url = new URL(urlString);
+ HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+
+ // 设置请求方法
+ connection.setRequestMethod("GET");
+
+ // 设置连接超时
+ connection.setConnectTimeout(5000);
+ // 设置读取超时
+ connection.setReadTimeout(5000);
+
+ // 设置请求头(可选)
+ connection.setRequestProperty("Accept", "application/json");
+ connection.setRequestProperty("User-Agent", "Mozilla/5.0");
+
+ // 获取响应代码
+ int responseCode = connection.getResponseCode();
+ System.out.println("响应状态码: " + responseCode);
+
+ // 读取响应内容
+ if (responseCode == HttpURLConnection.HTTP_OK) {
+ BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+ String inputLine;
+ StringBuilder response = new StringBuilder();
+
+ while ((inputLine = in.readLine()) != null) {
+ response.append(inputLine);
+ }
+ in.close();
+ return response.toString();
+ } else {
+ throw new RuntimeException("HTTP 请求失败: " + responseCode);
+ }
+ }
+}
\ No newline at end of file
--
Gitblit v1.9.3