当前位置:   article > 正文

java智能聊天软件_Java使用青云客智能聊天接口做一个小助手

java引用对话助手

API介绍

演示

6bae48840a46d26aae4fe9c3f91ec88d.png

有点傻。。。。。。。。。。

代码

我把项目分为main、model、service、utils四个包。

main:项目的入口,main()方法所在包。

model:存放响应对象,接收API返回数据。

service:相关业务接口和实现类。

utils:工具类。

utils

1d89e089eca00ad80605534080b4339a.png

HttpUtils类:

网络请求工具类,里面有一个静态方法request(String api),传入API地址,进行网络请求,并返回API返回的数据(json格式)。

package utils;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;

public class HttpUtils {

/**

* @param api:API的URL地址

* @return 请求API所返回的json串

*/

public static String request(String api) {

HttpURLConnection httpURLConnection = null;

int code = 0;//获取HTTP请求状态码

try {//连接API(需要有网络)

URL url = new URL(api);

httpURLConnection = (HttpURLConnection) url.openConnection();

code = httpURLConnection.getResponseCode();

} catch (Exception e) {

return "##出现错误,网络连接异常,请检查网络##";

}

if (code >= 200 && code < 300) {//状态码2开头代表成功。

//建立输入流,获取API返回数据

try (InputStreamReader inputStreamReader = new InputStreamReader(httpURLConnection.getInputStream());

BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) {

StringBuilder stringBuilder = new StringBuilder();

String line;

while ((line = bufferedReader.readLine()) != null) {

stringBuilder.append(line);

}

return stringBuilder.toString();

} catch (Exception e) {

e.printStackTrace();

}

}

return "##出现错误,错误编码##:" + code;

}

}

model

861db5ff787325ace7910bdcfe5a06b9.png

Response类:用于存放API的返回数据。

青云客API返回数据示例:{“result”:0,“content”:“你好,我就开心了”}

result返回状态码,0表示成功,1表示失败。

content返回数据,来自机器人的回答。

package model;

public class Response {

private String result;//API返回码

private String content;//API返回数据

public Response(){}

public String getResult() {

return result;

}

public void setResult(String result) {

this.result = result;

}

public String getContent() {

return content;

}

public void setContent(String content) {

this.content = content;

}

}

service

dd0096fe5b35c000666c0ae68df9a034.pngRobotService接口:里面有一个方法:Response answer(String question);如果想调用其他平台的问答机器人接口,可以实现此接口。

package service;

import model.Response;

public interface RobotService {

Response answer(String question);

}

QingYunkeRobotServiceImpl类:青云客平台API的RobotService实现类,里面有一个public Response answer(String question)方法,传入使用者输入的对话,返回Response对象。

package service;

import com.google.gson.Gson;

import model.Response;

import utils.HttpUtils;

import java.net.URLEncoder;

public class QingYunkeRobotServiceImpl implements RobotService {

//青云客平台的API地址

private String uri = "https://api.qingyunke.com/api.php?key=free&appid=0&msg=%s";

private String api;

Gson gson = new Gson();//用于解析json串

/**

* @param question:使用者输入的对话

* @return Response对象,保存来自机器人的对话

*/

@Override

public Response answer(String question) {

try {

//需要对输入的对话进行编码,青云客平台使用utf-8编码

api = String.format(uri, URLEncoder.encode(question, "UTF-8"));

} catch (Exception e) {

e.printStackTrace();

}

String ans = HttpUtils.request(api);//获得json串,用字符串储存

if (!ans.contains("##出现错误,"))

return gson.fromJson(ans, Response.class);//使用Gson对json串解析,存入Response中

else {

Response response = new Response();

response.setContent(ans);

return response;

}

}

}

main

cabd98e6c2b53a0c55f56e7fc4434b8c.png

Main类:程序的入口。

package main;

import model.Response;

import service.QingYunkeRobotServiceImpl;

import java.io.UnsupportedEncodingException;

import java.util.Scanner;

public class Main {

public static void main(String[] args) throws UnsupportedEncodingException {

//创建青云客的机器人实现类

QingYunkeRobotServiceImpl qingyunkeRobotService = new QingYunkeRobotServiceImpl();

Scanner scanner = new Scanner(System.in);

System.out.println("快给你的小助手取个名字吧,按回车键确定!!!!");

String name = scanner.nextLine();

System.out.println("hi,我是您的小助手 " + name + ", 直接对我下达指令");

while (true) {

String input = scanner.nextLine();

//退出条件:用户输入886

if ("886".equalsIgnoreCase(input)) {

System.out.println("欢迎下次使用,拜拜");

scanner.close();

return;

}

Response response = qingyunkeRobotService.answer(input);

System.out.println(name + ":" + new String(response.getContent().getBytes(), "UTF-8").replace("{br}", "\n"));

}

}

}

扩展

可根据不同平台扩充service层的内容,service层主要是调用HttpUtils,传入API的url地址,获取json字符串并解析,得到想要的数据返回。

也可以调用文字转语音接口,让小助手会说话。

BUG

目前有两个bug,一个是+号,转成utf-8后变成了空格,建议使用汉字加。

71ebf5adc848f81464c1476093d1d39b.png

第二个bug也是转码问题,在打成jar包后运行有部分文字不能正确识别。

7ff91024eeb2e518c5b18b6b783728be.png

本文地址:https://blog.csdn.net/tjk12345/article/details/110132597

希望与广大网友互动??

点此进行留言吧!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/536165
推荐阅读
相关标签
  

闽ICP备14008679号