1
zj
2024-07-25 bcd96e924ea184da9a4dacfd16a5c3bfba14ac53
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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")){
                        convertBase64ToImage(jsonObject.getString("img"), PropertiesUtil.getProperty("ftp.address") + newsId + ".jpg");
                        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;
    }
 
}