zj
2024-03-27 533f1b6ba44f398d1860a95e38589fbc13d60d44
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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;
    }
 
}