近日,闲来做了款基于图灵机器人api的升级版机器人java web Demo。
效果如下:
涉及如下:
①:ajax动态更新页面
function auto(question){
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var span = document.createElement("span");
var li = document.createElement("li");
li.style.float = "left";
span.style.float = "left";
span.className = 'span1';
span.innerHTML = xmlhttp.responseText;
//是否播放
if(isPlay){
doTTS(span.innerHTML);
}
li.appendChild(span);
cont.appendChild(li);
cont.scrollTop=cont.scrollHeight;
}
}
xmlhttp.open("POST","smartTalk?question="+question,true);
xmlhttp.send();
}
② 调用SpeechSynthesisUtterance对象实现语音合成
function doTTS(mess) {
//测试是可以设置语音文字数组
var msg = new SpeechSynthesisUtterance(mess);
//音量
msg.volume = 100;
//音速
msg.rate = 1;
//音高(音调)
msg.pitch = 1.5;
console.log(msg);
window.speechSynthesis.speak(msg);
};
③ 词汇过滤(并非所有的话都会让其调用图灵API)
public class JudgeModel {
String models[]= {
"每日一句",
"爱推理"
};
public int isModelKey(String question) {
int k = -1;
for(int i=0;i<models.length;i++) {
if(question.equals(models[i])) {
k = i;
}
}
return k;
}
public String getModelAnswer(int k) {
String answer = "";
if(k==0) {
answer = new EverydaySayings().getAnswer();
}else if(k==1) {
answer = new TuiliQuestions().getAnswer();
}
return answer;
}
}
④ 调用图灵API并用json提取出所需内容
public class TulingAPIUtil {
//自己的apikey,注意不是密钥 如"d3a63c004e614549a26beaa7fb9c53f5"
private static final String key = "输入你的apikey,可以去图灵官网申请免费版";
public static String getResult( String content ) {
//图灵api接口
String apiUrl = "http://www.tuling123.com/openapi/api?key="+key+"&info=";
try {
//内容需要utf-8编码(官方文档中有说明)
content = URLEncoder.encode(content, "utf-8");
//拼接url
apiUrl = apiUrl + content;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//封装请求头
HttpGet request = new HttpGet(apiUrl);
String result = "";
try {
//发送http请求
HttpResponse response = HttpClients.createDefault().execute(request);
//获取响应码
int code = response.getStatusLine().getStatusCode();
if (code == 200) {
//获取返回的结果
result = EntityUtils.toString(response.getEntity());
} else {
System.out.println("code=" + code);
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//返回结果
return result;
}
}
最后,由于本人才疏学浅,不足之地,还恳请大家不吝赐教。