java Swing之JTabbedPane用法实例 & JTable用法实例

一款用JTabbedPane选项卡实现的实例,其功能领域有:笑话、新闻、星座运势、成语、解梦。询问不同领域的问题,自动切换至对应的选项卡来输出答案。用到的技术主要有:javax.swing.JFrame,javax.swing.JTabbedPane,javax.swing.JScrollPane,javax.swing.GroupLayout,javax.swing.JTable,Jsoup。

程序运行效果图见(上一篇)Olami智能语义解析—学习娱乐小能手

该程序可运行jar包见xiaonengshou.jar

代码原文如下:

1、MyJFrame:界面显示。

import java.awt.Color;
import java.awt.Desktop;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.GroupLayout.Alignment;
import javax.swing.GroupLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;


public class MyJFrame extends javax.swing.JFrame {

    private static final long serialVersionUID = 1L;
    private JButton jButton_send;
    private JLabel jLabel1;
    private JLabel jLabel2;
    private JPanel jPanel1;
    private JTextField jTextField1;
    private JTextArea areaTxt;
    private JTabbedPane tabbedPanel;
    private JTable table;
    private String introduce = "你好,我是娱乐学习小能手。\r\n 我可以讲笑话、查运势、查新闻、查公交线、查成语、还可以解梦呢!\r\n\r\n";
    private String[] introduces = {"笑话类:\r\n 1、讲笑话。\r\n 2、来个笑话。\r\n 趣图类:\r\n 1、看趣图。\r\n 2、来张趣图。","新闻类:\r\n 1、娱乐头条。\r\n 2、看新闻。","星座类:\r\n 1、摩羯座今日运势。\r\n 2、摩羯座本月运势。 \r\n 3、摩羯座的本周运势","成语类:\r\n 1、日积月累是什么意思。\r\n 2、有龙字的成语 。\r\n 3、带龙马的成语。","解梦类:\r\n 1、我梦到了黄金。\r\n 2、梦到了黄金有什么寓意。"};
    private AppProcess app;

    public MyJFrame() {     
        initComponents();
        app = new AppProcess();
    }  

    private void initComponents() {

        jPanel1 = new JPanel();
        jLabel1 = new JLabel();
        jLabel2 = new JLabel();
        jTextField1 = new JTextField();
        jButton_send = new JButton();
        tabbedPanel = new JTabbedPane(JTabbedPane.TOP);

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setMinimumSize(new java.awt.Dimension(430, 280));

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("智能问答"));

        JLabel jl_href = new JLabel("<html><a href=''>相关代码详细说明</a></html>"); 
        jl_href.addMouseListener(new MouseListener(){

            @Override
            public void mouseClicked(MouseEvent arg0) {
                // TODO Auto-generated method stub
                Desktop desktop = Desktop.getDesktop();
                try {
                    desktop.browse(new URI("http://blog.csdn.net/u011827504/article/details/75284546"));
                } catch (IOException | URISyntaxException e1) {
                    e1.printStackTrace();
                }
            }
            @Override
            public void mouseEntered(MouseEvent arg0) {}
            @Override
            public void mouseExited(MouseEvent arg0) {}
            @Override
            public void mousePressed(MouseEvent arg0) {}
            @Override
            public void mouseReleased(MouseEvent arg0) {}

        });
        jLabel1.setText("提问:");

        jTextField1.setText("娱乐头条");

        jButton_send.setText("send");
        jButton_send.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton_sendActionPerformed(evt);
            }
        });    

        GroupLayout jPanel1Layout = new GroupLayout(jPanel1);
        GroupLayout.SequentialGroup hGroup = jPanel1Layout.createSequentialGroup();
        hGroup.addGap(15);
        hGroup.addGroup(jPanel1Layout.createParallelGroup(Alignment.LEADING).addComponent(jLabel1));
        hGroup.addGap(5);
        hGroup.addGroup(jPanel1Layout.createParallelGroup(Alignment.LEADING).addComponent(jTextField1).addComponent(jl_href).addComponent(jLabel2));
        hGroup.addGap(5);
        hGroup.addGroup(jPanel1Layout.createParallelGroup(Alignment.LEADING).addComponent(jButton_send));
        hGroup.addGap(15);
        jPanel1Layout.setHorizontalGroup(hGroup);


        GroupLayout.SequentialGroup vGroup = jPanel1Layout.createSequentialGroup();
        vGroup.addGap(8);
        vGroup.addGroup(jPanel1Layout.createParallelGroup(Alignment.LEADING).addComponent(jl_href));
        vGroup.addGap(8);
        vGroup.addGroup(jPanel1Layout.createParallelGroup(Alignment.LEADING).addComponent(jLabel1)
                .addComponent(jTextField1).addComponent(jButton_send));
        vGroup.addGap(8);
        vGroup.addGroup(jPanel1Layout.createParallelGroup(Alignment.LEADING).addComponent(jLabel2));
        vGroup.addGap(8);
        //设置垂直组
        jPanel1Layout.setVerticalGroup(vGroup);
        jPanel1.setLayout(jPanel1Layout);

      //创建面板  
        JScrollPane panel_joke = new JScrollPane();  
        JScrollPane panel_news = new JScrollPane();  
        JScrollPane panel_hor = new JScrollPane();  
        JScrollPane panel_idiom = new JScrollPane();  
        JScrollPane panel_oneir = new JScrollPane();  

        areaTxt = new JTextArea();
        areaTxt.setColumns(28);
        areaTxt.setRows(15);
        areaTxt.setText(introduce + introduces[0]); 
        areaTxt.setEditable(false);
        areaTxt.setLineWrap(true);
        areaTxt.setAutoscrolls(true);
        panel_joke.setViewportView(areaTxt);

        tabbedPanel.addTab("笑话",panel_joke);  
        tabbedPanel.addTab("新闻",panel_news);   
        tabbedPanel.addTab("星座",panel_hor);  
        tabbedPanel.addTab("成语",panel_idiom);  
        tabbedPanel.addTab("解梦",panel_oneir);  

        tabbedPanel.addChangeListener(new ChangeListener(){  

            @Override
            public void stateChanged(ChangeEvent arg0) {
                // TODO Auto-generated method stub
                int index = tabbedPanel.getSelectedIndex();
                areaTxt.setText(introduce + introduces[index]);
                ((JScrollPane)tabbedPanel.getComponent(index)).setViewportView(areaTxt);
            }  
        });  

        GroupLayout layout = new GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
                    .addComponent(tabbedPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanel1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(tabbedPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );


        pack();
    } 

    private void jButton_sendActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        Map<String, Object> retMap = app.process(jTextField1.getText());
        jLabel2.setText("");
        if (retMap.containsKey("ds")) {
            jLabel2.setText(retMap.get("ds").toString());
            jLabel2.setForeground(Color.red);
        } else if (retMap.containsKey("joke")) {
            Object obj = retMap.get("joke");
            tabbedPanel.setSelectedIndex(0);
            JScrollPane jpanel = ((JScrollPane) tabbedPanel.getComponent(0));
            if (obj instanceof String) {
                areaTxt.setText(obj.toString());
                jpanel.setViewportView(areaTxt);
            } else {
                JLabel jLabel = new JLabel();
                if (obj != null) {
                    ImageIcon image = new ImageIcon((URL) obj);
                    jLabel.setIcon(image);
                } else {
                    jLabel.setText("图片加载失败!");
                }
                jpanel.setViewportView(jLabel);

            }
        }else if (retMap.containsKey("horoname")){
            Object obj = retMap.get("horoname");
            tabbedPanel.setSelectedIndex(2);
            JScrollPane jpanel = ((JScrollPane) tabbedPanel.getComponent(2));
            areaTxt.setText(obj.toString());
            jpanel.setViewportView(areaTxt);
        }else if(retMap.containsKey("news")){
            Object obj = retMap.get("news");
            tabbedPanel.setSelectedIndex(1);
            JScrollPane jpanel = ((JScrollPane) tabbedPanel.getComponent(1));

            if (obj instanceof String) {
                areaTxt.setText(obj.toString());
                jpanel.setViewportView(areaTxt);
            }else{
                @SuppressWarnings("unchecked")
                Map<String, List<String>> newsMap = (HashMap<String, List<String>>)obj;
                List<String> titleList = newsMap.get("title");
                final List<String> urlList = newsMap.get("url");

                table = getSimpleTable(titleList);
                jpanel.setViewportView(table);
                table.addMouseListener(new MouseListener(){

                    @Override
                    public void mouseClicked(MouseEvent arg0) {
                        // TODO Auto-generated method stub
                        // 取得用户所选行的行数
                        int selectRows=table.getSelectedRows().length;
                        if(selectRows==1){
                          // 取得用户所选单行 
                          int selectedRowIndex = table.getSelectedRow(); 
                          String url = urlList.get(selectedRowIndex);
                          Desktop desktop = Desktop.getDesktop();
                            try {
                                desktop.browse(new URI(url));
                            } catch (IOException | URISyntaxException e1) {
                                e1.printStackTrace();
                            }
                        }                       

                    }

                    @Override
                    public void mouseEntered(MouseEvent arg0) {}

                    @Override
                    public void mouseExited(MouseEvent arg0) {}

                    @Override
                    public void mousePressed(MouseEvent arg0) {}

                    @Override
                    public void mouseReleased(MouseEvent arg0) {}});


            }           

        }else if(retMap.containsKey("oneiromancy")){
            Object obj = retMap.get("oneiromancy");
            tabbedPanel.setSelectedIndex(4);
            final JScrollPane jpanel = ((JScrollPane) tabbedPanel.getComponent(4));

            if (obj instanceof String) {
                areaTxt.setText(obj.toString());
                jpanel.setViewportView(areaTxt);
            }else{
                @SuppressWarnings("unchecked")
                Map<String, List<String>> OneirMap = (HashMap<String, List<String>>)obj;
                List<String> wordList = OneirMap.get("word");
                final List<String> urlList = OneirMap.get("url");
                table = getSimpleTable(wordList);
                jpanel.setViewportView(table);
                table.addMouseListener(new MouseListener(){

                    @Override
                    public void mouseClicked(MouseEvent arg0) {
                        // TODO Auto-generated method stub
                        // 取得用户所选行的行数
                        int selectRows=table.getSelectedRows().length;
                        if(selectRows==1){
                          // 取得用户所选单行 
                          int selectedRowIndex = table.getSelectedRow(); 
                          String url = urlList.get(selectedRowIndex);
                          String answer = app.getOneirData(url);
                          areaTxt.setText(answer);
                          jpanel.setViewportView(areaTxt);
                        }                       

                    }

                    @Override
                    public void mouseEntered(MouseEvent arg0) {}

                    @Override
                    public void mouseExited(MouseEvent arg0) {}

                    @Override
                    public void mousePressed(MouseEvent arg0) {}

                    @Override
                    public void mouseReleased(MouseEvent arg0) {}});

            }

        }else if(retMap.containsKey("idioms")){
        Object obj = retMap.get("idioms");
        tabbedPanel.setSelectedIndex(3);
        final JScrollPane jpanel = ((JScrollPane) tabbedPanel.getComponent(3));

        if (obj instanceof String) {
            areaTxt.setText(obj.toString());
            jpanel.setViewportView(areaTxt);
        }else{
            @SuppressWarnings("unchecked")
            Map<String, List<String>> OneirMap = (HashMap<String, List<String>>)obj;
            List<String> nameList = OneirMap.get("name");
            final List<String> idList = OneirMap.get("id");
            table = getSimpleTable(nameList);
            jpanel.setViewportView(table);
            table.addMouseListener(new MouseListener(){

                @Override
                public void mouseClicked(MouseEvent arg0) {
                    // TODO Auto-generated method stub
                    // 取得用户所选行的行数
                    int selectRows=table.getSelectedRows().length;
                    if(selectRows==1){
                      // 取得用户所选单行 
                      int selectedRowIndex = table.getSelectedRow(); 
                      String id = idList.get(selectedRowIndex);
                      String answer = app.getIdiomsP(id);
                      areaTxt.setText(answer);
                      jpanel.setViewportView(areaTxt);
                    }                       

                }

                @Override
                public void mouseEntered(MouseEvent arg0) {}

                @Override
                public void mouseExited(MouseEvent arg0) {}

                @Override
                public void mousePressed(MouseEvent arg0) {}

                @Override
                public void mouseReleased(MouseEvent arg0) {}});

        }

    }

    }

    public JTable getSimpleTable(List<String> titleList){  
        String[] colname = {"请选择"}; 
        int num = titleList.size();
        Object[][] data = new Object[num][1];
        for(int i =0; i < num; i++ ){
            data[i] = new Object[]{(i+1) + "、" +titleList.get(i)};              
        }

        JTable jtable = new JTable(data,colname);  
        return jtable;  
    }  

    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                MyJFrame frame = new MyJFrame();
                frame.setTitle("自然语言理解试验小程序——学习娱乐小能手");
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });

    }

}

2、NLIProcess:智能语义解析(支持领域有笑话、新闻、星座运势、成语、解梦)。

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;


public class NLIProcess {
    private static final String url = "https://cn.olami.ai/cloudservice/api";
    private static final String Appkey = "fcf20941682b494e9db8c23c14deeb74";
    private static final String Appsecret = "1bcbbe1fb5924185a13c9b5f6d548ee0";
    private static final String api = "nli";    

    private JSONObject process (String input) {
        JSONObject NLIresult = new JSONObject();
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("appkey", Appkey));
        params.add(new BasicNameValuePair("api", api));

        long timestamp = Calendar.getInstance().getTimeInMillis();
        params.add(new BasicNameValuePair("timestamp", String.valueOf(timestamp)));
        params.add(new BasicNameValuePair("sign", generateSign(timestamp)));

        JSONObject request = new JSONObject();
        JSONObject data = new JSONObject();
        try {
            data.put("input_type", 0);
            data.put("text", input);

            request.put("data_type", "stt");
            request.put("data", data);
        } catch (JSONException e1) {
            e1.printStackTrace();
            return NLIresult;
        }
        params.add(new BasicNameValuePair("rq", request.toString()));
        params.add(new BasicNameValuePair("cusid", "asdfghj"));

        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpPost httppost = new HttpPost(url);
        try {
            httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
            CloseableHttpResponse response = httpclient.execute(httppost);
            try {
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    String contnt = EntityUtils.toString(entity);
                    NLIresult = JSONObject.parseObject(contnt);
                }
            } finally {
                response.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
            return NLIresult;
        } finally {
            try {
                httpclient.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        return NLIresult;
    }

    private String generateSign(long timestamp) {
        String sign = Appsecret + "api=" + api + "appkey=" + Appkey + "timestamp=" + timestamp + Appsecret;
        return MD5String(sign);
    }

    public String MD5String(String str) {
        try {
            MessageDigest msgDigest = MessageDigest.getInstance("MD5");
            msgDigest.reset();
            msgDigest.update(str.getBytes("UTF-8"));
            byte[] byteArrary = msgDigest.digest();
            StringBuffer md5StrBuff = new StringBuffer();
            for (int i = 0; i < byteArrary.length; i++) {
                String tmp = Integer.toHexString(0xFF & byteArrary[i]);
                if (tmp.length() == 1) {
                    md5StrBuff.append(0).append(tmp);
                } else {
                    md5StrBuff.append(tmp);
                }
            }
            return md5StrBuff.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return null;
        }
    }   

    public Semantic parseSemantic(String input) {
        JSONObject semantic = process(input);
        Semantic s = new Semantic();
        if (semantic == null || !"ok".equalsIgnoreCase(semantic.getString("status"))) 
            return s;

        JSONObject data = semantic.getJSONObject("data");
        JSONArray s_list = data.getJSONArray("nli");
        JSONObject s_first = s_list.getJSONObject(0);
        s.app = s_first.getString("type");
        JSONObject desc_obj = s_first.getJSONObject("desc_obj");
        s.status = desc_obj.getInteger("status");
        if (0 == s.status && desc_obj.containsKey("result")) {
            s.answer = desc_obj.getString("result");
        }else if(0 != s.status){
            s.answer = desc_obj.getString("result");
            return s;
        }

        JSONObject intention = s_first.getJSONArray("semantic").getJSONObject(0);
        JSONArray modifier = intention.getJSONArray("modifier");
        for (int i = 0; i != modifier.size(); i++) {
            s.modifiers.add(modifier.getString(i));
        }
        JSONArray slots = intention.getJSONArray("slots");
        for (int i = 0; i != slots.size(); i++) {
            JSONObject record = slots.getJSONObject(i);
            Slot slot = new Slot();
            slot.name = record.getString("name");
            slot.value = record.getString("value");
            s.slots.put(slot.name, slot);
        }

        return s;
    }


}
class Semantic {
    String app = "";
    String answer = "";
    Map<String, Slot> slots = new HashMap<String, Slot>();
    List<String> modifiers = new ArrayList<>();
    int status = -1;
}

class Slot {
    String name = "";
    String value = "";
}

3、AppProcess:笑话和成语的api接口访问,新闻、星座运势、解梦爬虫。

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.eclipse.swt.graphics.ImageData;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.parser.Parser;
import org.jsoup.parser.XmlTreeBuilder;
import org.jsoup.select.Elements;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class AppProcess {

    private NLIProcess nli = new NLIProcess();
    private Map<String,List<String>> horMap = new HashMap<>();
    private List<String> jokeList = new ArrayList<String>();
    private List<String> jokePicList = new ArrayList<String>();

    private void getHorMap(){
        String[] horStrs = {"白羊座","金牛座","双子座","巨蟹座","狮子座","处女座","天秤座","天蝎座","射手座","摩羯座","水瓶座","双鱼座"};
        String[] yunshiStrs = {"todaybox3","tomorrowbox3","weekbox3","monthbox3","textbox"};
        for(int i = 1; i <= 12; i++){
            List<String> yunshiList = new ArrayList<>();
            for(int j = 1; j <= 5; j++){                
                String url = MessageFormat.format("http://cn.xingbar.com/cgi-bin/x5starfate2?fate={0}&type={1}", j, i);
                String httpContent = getHttpContent(url, "GBK");
                if (httpContent != null && !httpContent.equals("")){
                    Document doc = Jsoup.parse(httpContent);
                    Element boxElement = doc.getElementsByClass(yunshiStrs[j-1]).first();
                    if(boxElement != null){
                        StringBuffer content = new StringBuffer();
                        Elements dottxtElements = boxElement.getElementsByClass("dotLbox");
                        if(dottxtElements != null){                     
                            for(Element e : dottxtElements){
                                content.append(e.text() + "\r\n");
                            }                       
                        }
                        Elements dotRtxtElements = boxElement.getElementsByClass("dotRbox");
                        if(dotRtxtElements != null){                            
                            for(Element e : dotRtxtElements){
                                content.append(e.text() + "\r\n");
                            }
                        }
                        Elements trElements = boxElement.select("tr");
                        for(Element e : trElements){
                            content.append(e.text() + "\r\n");
                        }

                        yunshiList.add(content.toString());
                    }

                }

            }

            horMap.put(horStrs[i-1], yunshiList);

        }


    }

    private void getJokeList(){
        String jokeUrl = "http://api.laifudao.com/open/xiaohua.json";
        String jokePicUrl = "http://api.laifudao.com/open/tupian.json";
        String httpContent = getHttpContent(jokeUrl,"UTF-8");
        JSONArray jokeJS = JSONArray.parseArray(httpContent);
        for(int i = 0; i<jokeJS.size(); i++){
            JSONObject js = jokeJS.getJSONObject(i);
            String jTitle = js.getString("title");
            String jContent = js.getString("content");
            jokeList.add(jTitle + "\r\n" + jContent.replaceAll("<br/><br/>", "\r\n"));
        }

        httpContent = getHttpContent(jokePicUrl,"UTF-8");
        JSONArray jokepJS = JSONArray.parseArray(httpContent);
        for(int i = 0; i<jokepJS.size(); i++){
            JSONObject js = jokepJS.getJSONObject(i);
            String jContent = js.getString("sourceurl");
            jokePicList.add(jContent);
        }
    }

    private Map<String, List<String>> getNewsMap(String type){
        Map<String, List<String>> newsMap = new HashMap<>();
        List<String> titleList = new ArrayList<>();
        List<String> urlList = new ArrayList<>();
        String url = MessageFormat.format("http://www.chinanews.com/rss/{0}.xml", type);
        String httpContent = getHttpContent(url,"gbk");

        //Document doc = Jsoup.parse(httpContent);
        Document doc = Jsoup.parse(httpContent, "", new Parser(new XmlTreeBuilder()));
        //item
        Elements itemElements = doc.select("item");
        if(itemElements != null){                   
            for(Element e : itemElements){
                String title = e.select("title").first().text();
                String link = e.select("link").first().text();
                titleList.add(title);
                urlList.add(link);
            }

            newsMap.put("title", titleList);
            newsMap.put("url", urlList);
        }

        return newsMap;
    }

    private Map<String, List<String>> getOneirMap(String content){
        Map<String, List<String>> OneirMap = new HashMap<>();
        List<String> wordList = new ArrayList<>();
        List<String> urlList = new ArrayList<>();
        String path = "http://www.aqioo.cn";
        String url = "http://www.aqioo.cn/dream/Dlist?word=" + content;
        String httpContent = getHttpContent(url, "GBK");
        if (httpContent != null && !httpContent.equals("")){
            Document doc = Jsoup.parse(httpContent);
            Element fixElement = doc.getElementsByClass("clearfix").first();
            if(fixElement != null){
                Elements aElements = fixElement.select("a");
                if(aElements != null){                  
                    for(Element e : aElements){
                        String word = e.text();
                        String id = e.attr("href");
                        wordList.add(word);
                        urlList.add(path+id);
                    }

                    OneirMap.put("word", wordList);
                    OneirMap.put("url", urlList);
                }

            }

        }

        return OneirMap;
    }

    public String getOneirData(String url){
        StringBuffer content = new StringBuffer();
        String httpContent = getHttpContent(url, "GBK");
        if (httpContent != null && !httpContent.equals("")){
            Document doc = Jsoup.parse(httpContent);
            Element idElement = doc.getElementById("wraper");
            if(idElement != null){
                Element infoElement = idElement.getElementsByClass("info").first();
                content.append(infoElement.text());             
            }                               
        }       
        return content.toString();
    }

    private Map<String, List<String>> getIdioms(String idiom){
        Map<String, List<String>> idiomsMap = new HashMap<>();
        List<String> idiomList = new ArrayList<>();
        List<String> idList = new ArrayList<>();
        String urlkey = "您申请的key值";
        String url = "http://api.avatardata.cn/ChengYu/Search?key="+urlkey+"&keyWord="+idiom;
        String httpContent = getHttpContent(url,"UTF-8");
        JSONObject idiomJS = JSONObject.parseObject(httpContent);
        if(idiomJS != null && idiomJS.get("reason").equals("Succes")){
            JSONArray idiomsJSlist = idiomJS.getJSONArray("result");
            int size = idiomsJSlist.size();
            for(int i = 0; i<size; i++){
                JSONObject js = idiomsJSlist.getJSONObject(i);
                idiomList.add(js.getString("name"));
                idList.add(js.getString("id"));
            }
            idiomsMap.put("name", idiomList);
            idiomsMap.put("id", idList);

            if(size == 1){
                String desc = getIdiomsP(idList.get(0));
                List<String> descList = new ArrayList<>();
                descList.add(desc);
                idiomsMap.put("desc", descList);
            }
        }

        return idiomsMap;
    }

    public String getIdiomsP(String id){
        String urlkey = "您申请的key值";
        String url = "http://api.avatardata.cn/ChengYu/LookUp?key="+urlkey+"&id="+id;
        String httpContent = getHttpContent(url,"UTF-8");
        JSONObject idiomJS = JSONObject.parseObject(httpContent).getJSONObject("result");
        StringBuffer retStr = new StringBuffer();
        retStr.append("成语:"+idiomJS.getString("name")+"\r\n" + "拼音:"+idiomJS.getString("spell")+"\r\n"+"释义:"+idiomJS.getString("content")+"\r\n");
        String derivation = idiomJS.getString("derivation");
        if(derivation!= null && !derivation.equals("")){
            retStr.append("出处:"+derivation+"\r\n");
        }
        String samples = idiomJS.getString("samples");
        if(samples!= null && !samples.equals("")){
            retStr.append("例句:"+samples+"\r\n");
        }
        return retStr.toString();
    }

    public String getHttpContent(String url,String charset) {
        StringBuffer httpContent = new StringBuffer();
        CloseableHttpClient httpclient = HttpClients.createDefault();
        try {
            HttpGet httpget = new HttpGet(url);
            CloseableHttpResponse response = httpclient.execute(httpget);
            try {
                // 获取响应实体
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    if(charset != null && !charset.isEmpty()){                      
                        httpContent.append(EntityUtils.toString(entity,charset));
                    }else{
                        httpContent.append(EntityUtils.toString(entity));
                    }
                }
            } finally {
                response.close();
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭连接,释放资源
            try {
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return httpContent.toString();
    }

    public ImageData DownloadImg(String listImgSrc) {
        try {

            URL url = new URL(listImgSrc);
            HttpURLConnection urlcon = (HttpURLConnection) url.openConnection();
            urlcon.setInstanceFollowRedirects(false);
            urlcon.setRequestMethod("GET");
            urlcon.setDoOutput(true);
            urlcon.setDoInput(true);

            if (urlcon.getResponseCode() == HttpURLConnection.HTTP_OK) {
                try (InputStream urlcon_is = urlcon.getInputStream();) {

                    return new ImageData(urlcon_is);

                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

    private URL getUrl(String picurl){
        try {
            URL url = new URL(picurl);
            return url;
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }

    public Map<String, Object> process(String input) {
        Semantic s = nli.parseSemantic(input);
        Map<String, Object> retMap = new HashMap<String, Object>();

        if(s.app.equals("joke")){
            if(jokeList.size() < 1 || jokePicList.size() < 1){
                getJokeList();
            }
            if(s.modifiers.contains("query")){
                if(jokeList.size() < 1){
                    retMap.put("joke", "对不起,网络不给力,笑话加载失败。");
                }else{                  
                    int randomInt = (int)(Math.random() * jokeList.size());
                    retMap.put("joke", jokeList.get(randomInt));
                }
            }else if(s.modifiers.contains("query_pic")){
                if(jokeList.size() < 1){
                    retMap.put("joke", "对不起,网络不给力,趣图加载失败。");
                }else{                  
                    int randomInt = (int)(Math.random() * jokePicList.size());
                    String picurl = jokePicList.get(randomInt);
                    retMap.put("joke", getUrl(picurl));
                }
            }else{
                retMap.put("joke", s.answer);
            }           

        }else if(s.app.equals("news")){
            if(s.modifiers.contains("query")){
                Map<String, List<String>> newsMap = new HashMap<>();
                if(s.slots != null && !s.slots.isEmpty()){                  
                    String slotValue = s.slots.get("type").value;
                    newsMap = getNewsMap(slotValue);
                }else{
                    newsMap = getNewsMap("importnews");                 
                }

                if(newsMap.isEmpty()){
                    retMap.put("news", "对不起,网络不给力,新闻加载失败。");
                }else{
                    retMap.put("news", newsMap);
                }
            }else{
                retMap.put("news", s.answer);
            }

        }else if(s.app.equals("horoname")){
            if(horMap.isEmpty()){
                getHorMap();
            }
            //horMap
            String slotValue = s.slots.get("hname").value;
            List<String> horList = horMap.get(slotValue);
            if(s.modifiers.contains("can")){
                retMap.put("horoname", s.answer);
            }else if(horList.size() < 1){
                retMap.put("horoname", "对不起,网络不给力,运势加载失败。");
            }else if(s.modifiers.contains("lucktoday")){
                retMap.put("horoname", horList.get(0));
            }else if(s.modifiers.contains("lucktomor")){
                retMap.put("horoname", horList.get(1));
            }else if(s.modifiers.contains("luckweek")){
                retMap.put("horoname", horList.get(2));
            }else if(s.modifiers.contains("luckmonth")){
                retMap.put("horoname", horList.get(3));
            }else if(s.modifiers.contains("luckyear")){
                retMap.put("horoname", horList.get(4));
            }

        }else if(s.app.equals("oneiromancy")){
            if(s.modifiers.contains("query")){
                String slotValue = s.slots.get("content").value;
                 Map<String, List<String>> OneirMap = getOneirMap(slotValue);
                 if(OneirMap.isEmpty()){
                    retMap.put("news", "对不起,网络不给力,解梦信息加载失败。");
                }else{                  
                    retMap.put("oneiromancy", OneirMap);
                }
            }else{
                retMap.put("oneiromancy", s.answer);
            }

        }else if(s.app.equals("idioms")){
            Map<String, List<String>> idiomsMap = new HashMap<>();
            if(s.modifiers.contains("query")){
                String slotValue = s.slots.get("iname").value;
                idiomsMap = getIdioms(slotValue);
            }else if(s.modifiers.contains("query_idioms")){
                String slotValue = s.slots.get("ikeyword").value;
                idiomsMap = getIdioms(slotValue);

            }
            if(idiomsMap.isEmpty()){                
                retMap.put("idioms", "对不起,网络不给力,成语加载失败。");
            }else{
                if(idiomsMap.containsKey("desc")){
                    String desc = idiomsMap.get("desc").get(0);
                    retMap.put("idioms", desc);
                }else{                  
                    retMap.put("idioms", idiomsMap);
                }
            }

        }else if(s.app.equals("ds")){
            retMap.put("ds", s.answer);
        }

        return retMap;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值