package org.example.server.impl; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.example.constant.StockConstant; import org.example.dao.JournalismMapper; import org.example.dao.SiteNewsMapper; import org.example.pojo.Journalism; import org.example.pojo.SiteNews; import org.example.server.ISiteNewsService; import org.example.util.HttpRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.sql.Timestamp; import java.util.Base64; import java.util.Date; /** * @program: webSocketProject * @description: * @create: 2024-03-26 19:32 **/ @Service public class ISiteNewsServiceImpl implements ISiteNewsService { @Resource private SiteNewsMapper siteNewsMapper; @Autowired JournalismMapper journalismMapper; /*新闻资讯-抓取*/ @Override public int grabNews() { int ret = 0; //新闻类型:1、财经要闻,2、经济数据,3、全球股市,4、7*24全球,5、商品资讯,6、上市公司,7、全球央行 addNews(1, StockConstant.HTTP_API + "stock-markets?key=" + StockConstant.KEY + "&type=4"); addNews(2, StockConstant.HTTP_API + "stock-markets?key=" + StockConstant.KEY + "&type=5"); addNews(4, StockConstant.HTTP_API + "stock-markets?key=" + StockConstant.KEY + "&type=6"); return ret; } /* *抓取新闻专用 * type:新闻类型:1、财经要闻,2、经济数据,3、全球股市,4、7*24全球,5、商品资讯,6、上市公司,7、全球央行 * */ private int addNews(Integer type, String url) { int k = 0; try { String newlist = HttpRequest.doGrabGet(url); JSONArray jsonArray = JSONArray.fromObject(newlist); if (jsonArray.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String newsId = jsonObject.getString("id"); Long count = siteNewsMapper.selectCount(new LambdaQueryWrapper().eq(SiteNews::getSourceId, newsId)); if (count == 0) { SiteNews siteNews = new SiteNews(); siteNews.setSourceId(newsId); siteNews.setSourceName(""); siteNews.setTitle(jsonObject.getString("title")); Long showTime = jsonObject.getLong("time"); siteNews.setShowTime(new Date(showTime)); if (jsonObject.has("img")) { // String imgBase = convertBase64ToImage(jsonObject.getString("img"), "/www/wwwroot/dabao/" + newsId + ".jpg"); siteNews.setImgurl("https://img.jumptalk.net/" + newsId + ".jpg"); } siteNews.setDescription(jsonObject.getString("content")); siteNews.setContent(jsonObject.getString("content")); siteNews.setStatus(1); siteNews.setType(type); siteNewsMapper.insert(siteNews); } Journalism journalism = new Journalism(); conv(jsonObject,journalism); Journalism selectById = journalismMapper.selectById(journalism.getId()); if(null == selectById){ journalismMapper.insert(journalism); }else{ journalismMapper.updateById(journalism); } } } } catch (Exception e) { e.printStackTrace(); } return k; } private void conv(JSONObject jsonObject, Journalism journalism) { journalism.setId(jsonObject.getString("id")); Date date = new Date(jsonObject.getInt("time") * 1000L); Timestamp timestamp = new Timestamp(date.getTime()); journalism.setTime(timestamp); journalism.setContent(jsonObject.getString("content")); journalism.setTitle(jsonObject.getString("title")); journalism.setImg(jsonObject.getString("img")); } 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; } }