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<SiteNews>().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;
|
}
|
|
}
|