最近要做一个智能音箱的项目,可是声卡一直配置不好。。。所以,还做个啥啊。没办法,智能退而求其次,做一个文本交互的聊天机器人管家,并给它写个界面。
用java写,然后在linux装个jdk就行了。
下面说一下怎么实现
一.图灵api接口
public String chart(String message){
StringBuffer sb=new StringBuffer();
Random rand = new Random();
ArrayList<String> KEYLIST=new ArrayList<String>();
KEYLIST.add("8d64b5ff5a57435fa63fd0e111f821fc");//注册图灵机器人的账号,每创建一个机器人会给一个key,通过这个key来调用api
KEYLIST.add("d085ed36e2604506968a3c18c5733116");//因为由每个key都有调用次数限制,这里存了多个key
KEYLIST.add("4cdce663b3a44b5bb94cf62ca52de590");
try{
String APIKEY =KEYLIST.get(rand.nextInt(3));//随机选择用哪个key
String INFO = URLEncoder.encode(message, "utf-8");//转换格式
String getURL = "http://www.tuling123.com/openapi/api?key=" + APIKEY + "&info=" + INFO;//拼接请求url
URL getUrl = new URL(getURL);
HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection();
connection.connect();//连接
// 取得输入流,并使用Reader读取
BufferedReader reader = new BufferedReader(new InputStreamReader( connection.getInputStream(), "utf-8"));
sb.setLength(0);//每次把Stingbuffer清空
String line = "";
while ((line = reader.readLine()) != null) {//读取结果
sb.append(line);
}
reader.close();
// 断开连接
connection.disconnect();
}
catch ( Exception e){
e.printStackTrace();
}
String split[]=sb.toString().split(":");
String answer=split[split.length-1];
answer=answer.substring(1,answer.length()-2);//获取到回应
return answer;
}
二.界面
package com.test;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class myframe extends JFrame {
private JTextArea jTextAreaofShow;
private JTextArea jTextAreaofSend;
private JScrollPane scrollPaneofShow;//滚动框
private JScrollPane scrollPaneofSend;
private JPanel panel;
private JButton jButton;
private robot robot;
public myframe(String title,int x,int y,int w,int h) {
super(title);
robot=new robot();//初始化机器人
//为send部分设置面板
panel=new JPanel();
panel.setLayout(new FlowLayout());
jButton=new JButton("发送");
jButton.addActionListener(new buttonlistener());//为button设置监听器
jTextAreaofSend=new JTextArea();
//设置send文本框的大小 2行20列
jTextAreaofSend.setRows(2);
jTextAreaofSend.setColumns(50);
jTextAreaofShow=new JTextArea();
jTextAreaofShow.setRows(10);
jTextAreaofShow.setColumns(50);
jTextAreaofShow.setEditable(false);//设置show文本框不可编辑
//为两个文本框设置滚轮
scrollPaneofSend=new JScrollPane(jTextAreaofSend);
scrollPaneofShow=new JScrollPane(jTextAreaofShow);
//send文本框和按钮添加到面板
panel.add(scrollPaneofSend);
panel.add(jButton);
add(scrollPaneofShow,BorderLayout.CENTER);
add(panel,BorderLayout.SOUTH);
setBounds(x,y,w,h);//设置边界大小
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置关闭事件
}
public class buttonlistener implements ActionListener{//监听器
@Override
public void actionPerformed(ActionEvent e) {
String message=jTextAreaofSend.getText();
if(message!=null){
String result=robot.chart(message);
String show=jTextAreaofShow.getText();
StringBuilder showbuider=new StringBuilder(show);
showbuider.append("我说:"+message+"\n");
showbuider.append("小管家:"+result+"\n");
jTextAreaofShow.setText(showbuider.toString());
jTextAreaofSend.setText("");
}
}
}
}
三.主函数
package com.test;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
myframe myframe=new myframe("机器人管家",100,100,800,500);
myframe.setVisible(true);
robot robot=new robot();
Scanner sc = new Scanner(System.in);
ArrayList<String> ability=new ArrayList<>();
while(true){
System.out.println("你说:");
String message=sc.nextLine();
if(message.equals("提醒")){
}
String result=robot.chart(message);
System.out.println("机器人:"+result);
}
}
}
四.结果展示