package com.yami.trading.service.cms.impl; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yami.trading.bean.cms.Cms; import com.yami.trading.bean.cms.News; import com.yami.trading.bean.cms.dto.NewsDto; import com.yami.trading.common.util.GoogleAuthenticator; import com.yami.trading.dao.cms.CmsMapper; import com.yami.trading.dao.cms.NewsMapper; import com.yami.trading.service.cms.CmsService; import com.yami.trading.service.cms.NewsSerivce; import com.yami.trading.util.GoogleTranslateUtil; import jodd.util.PropertiesUtil; import org.apache.commons.collections.CollectionUtils; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.json.JSONArray; import org.json.JSONObject; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.*; @Service public class NewsSerivceImpl extends ServiceImpl implements NewsSerivce { @Value("${http.prefix}") private String httpPrefix; @Override public Page pageNews(Page page,String title,String language,String userCode) { return baseMapper.pageNews(page,title,language,userCode); } @Override public News getIndex(String language) { List list = list(Wrappers.query().lambda().orderByDesc(News::getCreateTime)); if (!CollectionUtil.isEmpty(list)) { Date date = new Date(); for (News news : list) { if ((null != news.getStartTime() && date.before(news.getStartTime())) || (null != news.getEndTime() && news.getEndTime().before(date))) { continue; } if (news.isIndexTop() && !news.isPopUp()) { list.add(news); } } } if (CollectionUtils.isEmpty(list)) return null; return list.get(0); } @Override public void grabNews() { addNews(1, "http://api-in-pro.js-stock.top/stock-markets?key=xKChgi47AP1NMwMeYI3c&type=1&country_id=14"); } private void addNews(Integer type, String url) { // 使用CloseableHttpClient发送请求 try (CloseableHttpClient client = HttpClients.createDefault()) { // 创建HttpGet请求 HttpGet request = new HttpGet(url); // 执行请求并获取响应 HttpResponse response = client.execute(request); // 输出响应状态码 System.out.println("响应状态: " + response.getStatusLine()); GoogleTranslateUtil googleTranslateUtil = new GoogleTranslateUtil(); // 获取响应内容并转换成字符串 String content = EntityUtils.toString(response.getEntity()); JSONArray jsonArray = new JSONArray(content); if (jsonArray.length() > 0) { for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String newsId = jsonObject.getString("id"); if (list(Wrappers.query().lambda().eq(News::getSourceId,newsId)).size() == 0) { News siteNews = new News(); siteNews.setSourceId(newsId); siteNews.setContent(googleTranslateUtil.translate("en","zh-TW",jsonObject.getString("content"))); siteNews.setTitle(googleTranslateUtil.translate("en", "zh-TW",jsonObject.getString("title"))); if(jsonObject.has("img")){ convertBase64ToImage(jsonObject.getString("img"), com.yami.trading.common.util.PropertiesUtil.getProperty("loca.images.dir") + "/" +newsId+".jpg"); siteNews.setImgUrl(httpPrefix + newsId+".jpg"); } siteNews.setCreateTime(new Date()); save(siteNews); } } } } catch (Exception e) { // 捕获并打印异常 e.printStackTrace(); log.error("添加新闻出现异常: " + e.getMessage()); } } public static String convertBase64ToImage(String base64Str, String path) { byte[] imageBytes = Base64.getDecoder().decode(base64Str); try { File file = new File(path); FileOutputStream fos = new FileOutputStream(file); fos.write(imageBytes); fos.flush(); fos.close(); } catch (IOException e) { e.printStackTrace(); } return path; } }