0
点赞
收藏
分享

微信扫一扫

【JAVA学习记录】股票预警

pipu 2022-04-07 阅读 433
java

调用股票API获取数据,对股票数据进行监测,通过发邮件的形式进行预警。

效果预览:

项目准备:

先新建一个java项目,导入如下图所示的包(自己去网上下载吧)。

 如果觉得下包导包太麻烦,可以新建一个Maven工程,直接在pom.xml中导包岂不美滋滋。

    <dependencies>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.5</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
    </dependencies>

实现步骤:

1.申请股票数据API

在聚合数据上申请股票数据API。

会得到一个请求key。

点击进去能看到接口的详细说明,根据自己的需求调用。

可以测试下API。

编写代码申请数据(股票类中的属性根据自己的需求定义)。

参考文档:HttpClient使用详解

public class Stock {
    private String gid = "sh601009"; //股票编号
    private String name; //股票名称
    private double nowpri; //当前价格
    private double increPer; //涨跌百分比
    private double increase; //涨跌幅

    private String key = "需要填写"; //申请的app key

    public Stock(){
        String url = "http://web.juhe.cn:8080/finance/stock/hs?gid="+gid+"&type=0&key="+key; //请求API
        try {
            HttpClient client = new DefaultHttpClient();
            //发送get请求
            HttpGet request = new HttpGet(url);
            HttpResponse response = client.execute(request);

            //请求发送成功,并得到响应
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                //读取服务器返回过来的json字符串数据
                String strResult = EntityUtils.toString(response.getEntity());

                JSONObject object = JSONObject.parseObject(strResult);
                JSONObject object1 = JSONObject.parseObject(object.getString("result"));

                name = object1.getString("name");
                nowpri = Double.parseDouble(object1.getString("nowpri"));
                increPer = Double.parseDouble(object1.getString("increPer"));
                increase = Double.parseDouble(object1.getString("increase"));
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 2.实现邮件收发

参考文档:java实现邮件收发

 打开qq邮箱的权限并获取授权码。

 编写代码:

public class SendMail {
    public void send(String IncrePer) throws GeneralSecurityException, MessagingException {
        Properties prop = new Properties();
        //设置QQ邮件服务器
        prop.setProperty("mail.host", "smtp.qq.com");
        //邮件发送协议
        prop.setProperty("mail.transport.protocol", "smtp");
        //需要验证用户名密码
        prop.setProperty("mail.smtp.auth", "true");

        //关于QQ邮箱,还要设置SSL加密,加上以下代码即可
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        prop.put("mail.smtp.ssl.enable", "true");
        prop.put("mail.smtp.ssl.socketFactory", sf);

        //使用JavaMail发送邮件的5个步骤
        //1.txt、创建定义整个应用程序所需的环境信息的Session对象
        Session session = Session.getDefaultInstance(prop, new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                //发件人邮件用户名、授权码
                return new PasswordAuthentication("邮箱@qq.com",
                        "授权码");
            }
        });

        //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
        session.setDebug(true);

        //2、通过session得到transport对象
        Transport ts = session.getTransport();

        //3、使用邮箱的用户名和授权码连上邮件服务器
        ts.connect("smtp.qq.com", "邮箱@qq.com", "授权码");

        //4,创建邮件
        //4-1.txt,创建邮件对象
        MimeMessage message = new MimeMessage(session);

        //4-2,指明邮件的发件人
        message.setFrom(new InternetAddress("邮箱@qq.com"));

        //4-3,指明邮件的收件人
        message.setRecipient(Message.RecipientType.TO, new InternetAddress("邮箱@qq.com"));

        //4-4,邮件标题
        message.setSubject("股票涨跌幅预警!!!");

        //4-5,邮件文本内容
        message.setContent("股票的涨跌百分比为"+IncrePer, "text/html;charset=UTF-8");

        //4-6,发送邮件
        ts.sendMessage(message, message.getAllRecipients());

        //5,关闭连接
        ts.close();
    }
}

3.创建GUI窗口 

可以设置相应的条件发送邮件。

public class Window {

    public void createWindow() throws GeneralSecurityException, MessagingException {
        Stock stock = new Stock();

        JFrame jf = new JFrame("股票监控");
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        // 创建内容面板,使用边界布局
        JPanel panel = new JPanel(new BorderLayout());

        // 表头(列名)
        Object[] columnNames = {"股票编号", "股票名称", "当前价格", "涨跌百分比", "涨跌幅"};

        // 表格所有行数据
        Object[][] rowData = {
                {stock.getGid(), stock.getName(), stock.getNowpri(), stock.getIncrePer(), stock.getIncrease()},
        };

        // 创建一个表格,指定 所有行数据 和 表头
        JTable table = new JTable(rowData, columnNames);

        // 把 表头 添加到容器顶部(使用普通的中间容器添加表格时,表头 和 内容 需要分开添加)
        panel.add(table.getTableHeader(), BorderLayout.NORTH);
        // 把 表格内容 添加到容器中心
        panel.add(table, BorderLayout.CENTER);

        jf.setContentPane(panel);
        jf.pack();
        jf.setLocationRelativeTo(null);
        jf.setVisible(true);

        if(Math.abs(stock.getIncrePer())<=5){ //当股票的涨跌百分比在5之间时发送邮件预警
            SendMail sendMail = new SendMail();
            sendMail.send(String.valueOf(stock.getIncrePer()));
        }
    }
}

4.运行程序 

public class Main {
    public static void main(String[] args) throws GeneralSecurityException, MessagingException {
        Window window = new Window();
        window.createWindow();
    }
}

举报

相关推荐

java学习记录

Java学习记录

记录java学习

Java学习记录02

Java 学习记录 多态

Java学习日常记录2

【Java学习记录-8】集合

0 条评论