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.IFileUploadService; import org.example.server.ISiteNewsService; import org.example.util.FTPUtil; import org.example.util.HttpRequest; import org.example.util.PropertiesUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; 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; import java.util.List; /** * @program: webSocketProject * @description: * @create: 2024-03-26 19:32 **/ @Service public class ISiteNewsServiceImpl implements ISiteNewsService { @Resource private SiteNewsMapper siteNewsMapper; @Autowired JournalismMapper journalismMapper; /*新闻资讯-抓取*/ @Override public void grabNews() throws Exception { //新闻类型:1、财经要闻,2、经济数据,3、全球股市,4、7*24全球,5、商品资讯,6、上市公司,7、全球央行 addNews(StockConstant.HTTP_API + "stock-markets?key=" + StockConstant.KEY + "&type=4"); addNews(StockConstant.HTTP_API + "stock-markets?key=" + StockConstant.KEY + "&type=5"); addNews(StockConstant.HTTP_API + "stock-markets?key=" + StockConstant.KEY + "&type=6"); } /* *抓取新闻专用 * type:新闻类型:1、财经要闻,2、经济数据,3、全球股市,4、7*24全球,5、商品资讯,6、上市公司,7、全球央行 * */ private int addNews(String url) throws Exception { int k = 0; 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"); Journalism journalism = new Journalism(); conv(jsonObject,journalism); Journalism selectById = journalismMapper.selectById(journalism.getId()); if(jsonObject.has("img")){ String s = convertBase64ToImage(jsonObject.getString("img"), PropertiesUtil.getProperty("ftp.address") + newsId + ".jpg"); File file = new File(s); FTPUtil ftpUtil = new FTPUtil(PropertiesUtil.getProperty("ftp.server.ip"), 21, PropertiesUtil.getProperty("ftp.user"),PropertiesUtil.getProperty("ftp.pass") ); ftpUtil.uploadFile(PropertiesUtil.getProperty("ftp.address"), file); journalism.setImg(PropertiesUtil.getProperty("ftp.server.http.prefix")+newsId+".jpg"); } if(null == selectById){ journalismMapper.insert(journalism); }else{ journalismMapper.updateById(journalism); } } } return k; } private void conv(JSONObject jsonObject, Journalism journalism) { journalism.setId(jsonObject.getString("id")); journalism.setTime(Long.valueOf(jsonObject.getInt("time"))); 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; } }