问询处理器处理"?",如果用户发送来"?"表示询问怎么使用,发送回使用指南
/**
* 问询处理器
* @author 熊诗言
*
*/
public class QuestionTextHandler extends DefaultMessageHandler {
@Override
public boolean canDo(Map<String, String> requestMap) {
String content = requestMap.get("Content").trim();
String msgType = requestMap.get("MsgType");
return MessageUtil.REQ_MESSAGE_TYPE_TEXT.equals(msgType) && ("?".equals(content) || "?".equals(content));
}
@Override
public BaseMessage handleByMe(Map<String, String> requestMap) {
return MessageFactory.createTextMessage(fromUserName, toUserName, ContentUtil.getMainTips());
}
}
/**
* 主菜单指南
* @return
*/
public static String getMainTips(){
StringBuffer buffer = new StringBuffer();
buffer.append("您好,我是你的生活小助手,中括号内容即可获取服务").append("\n");
buffer.append("目前能提供的功能包括\n");
buffer.append("⑴[历史上的今天]\n");
buffer.append("⑵测距、导航、周边搜索\n");
buffer.append("⑶[歌曲]搜索\n");
buffer.append("⑷[翻译]\n");
buffer.append("⑸[笑话][讲个笑话]\n");
buffer.append("⑹人脸识别\n");
buffer.append("⑺机器人聊天\n");
buffer.append("⑻天气预报(自己和机器人实现)\n");
buffer.append("⑼[快递]查询\n");
buffer.append("⑽发送来QQ表情返回原来的QQ表情\n\n");
buffer.append("回复“?/?”显示此帮助菜单");
return buffer.toString();
}
翻译功能由百度提供
/**
* 翻译处理器
* @author 熊诗言
*
*/
public class TranslateTextHandler extends DefaultMessageHandler {
@Override
public boolean canDo(Map<String, String> requestMap) {
String content = requestMap.get("Content").trim();
String msgType = requestMap.get("MsgType");
return MessageUtil.REQ_MESSAGE_TYPE_TEXT.equals(msgType) && content.startsWith("翻译");
}
@Override
public BaseMessage handleByMe(Map<String, String> requestMap) {
String content = requestMap.get("Content").trim();
if ("翻译".equals(content)) {
return MessageFactory.createTextMessage(fromUserName, toUserName, ContentUtil.getTranslateUsage());//如果为空就返回提示
}else{
String[] keyWords = content.split("@");//翻译@要翻译的内容
return MessageFactory.createTextMessage(fromUserName, toUserName, BaiduTranslateService.translate(keyWords[1]));
}
}
}
/**
* Q 译通使用指南
*
* @return
*/
public static String getTranslateUsage() {
StringBuffer buffer = new StringBuffer();
buffer.append(emoji(0xe148)).append("Q 译通使用指南").append("\n\n");
buffer.append("Q 译通为用户提供专业的多语言翻译服务,目前支持以下翻译方向:").append("\n");
buffer.append(" 中-> 英").append("\n");
buffer.append(" 英-> 中").append("\n");
buffer.append(" 日-> 中").append("\n\n");
buffer.append("使用示例:").append("\n");
buffer.append(" 翻译我是中国人").append("\n");
buffer.append(" 翻译dream").append("\n");
buffer.append(" 翻译さようなら").append("\n\n");
buffer.append("回复“?/?”显示主菜单");
return buffer.toString();
}
/**
*使用Gson解析返回的数据
* @author 熊诗言
* @date 2015-09-05
*/
public class BaiduTranslateService {
/**
* 发起http 请求获取返回结果
*
* @param requestUrl 请求地址
* @return
*/
private static String httpRequest(String requestUrl) {
StringBuffer buffer = new StringBuffer();
try {
URL url = new URL(requestUrl);
HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();
httpUrlConn.setDoOutput(false);
httpUrlConn.setDoInput(true);
httpUrlConn.setUseCaches(false);
httpUrlConn.setRequestMethod("GET");
httpUrlConn.connect();
// 将返回的输入流转换成字符串
InputStream inputStream = httpUrlConn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String str = null;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
bufferedReader.close();
inputStreamReader.close();
// 释放资源
inputStream.close();
inputStream = null;
httpUrlConn.disconnect();
} catch (Exception e) {
}
return buffer.toString();
}
/**
* 翻译(中->英英->中日->中)
*
* @param source
* @return
*/
public static String translate(String source) {
String dst = null;
// 组装查询地址
String requestUrl = "http://openapi.baidu.com/public/2.0/bmt/translate?client_id=3SRtOd6sN6DMCoeSub3bnnzh&q={keyWord}&from=auto&to=auto";
// 对参数q 的值进行urlEncode utf-8 编码
requestUrl = requestUrl.replace("{keyWord}", ContentUtil.urlEncodeUTF8(source));
// 查询并解析结果
try {
// 查询并获取返回结果
String json = httpRequest(requestUrl);
//System.out.println(json);
// 通过Gson 工具将json 转换成TranslateResult 对象
TranslateResult translateResult = new Gson().fromJson(json, TranslateResult.class);
// 取出translateResult 中的译文
dst = translateResult.getTrans_result().get(0).getDst();
} catch (Exception e) {
e.printStackTrace();
}
if (null == dst)
dst = "翻译系统异常,请稍候尝试!";
return dst;
}
public static void main(String[] args) {
// 翻译结果:The network really powerful
System.out.println(translate("网络真强大"));
}
}
/**
* utf 编码
*
* @param source
* @return
*/
public static String urlEncodeUTF8(String source) {
String result = source;
try {
result = java.net.URLEncoder.encode(source, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
/**
* 调用百度翻译api 查询结果
*这两个类的封装是Gson 类库所要求的,如果读者不是用Gson 解析json 字符串,
而是用JSON-lib,就没有必要封装这两个类。
* @author 熊诗言
* @date 2015-09-05
*/
public class TranslateResult {
// 实际采用的源语言
private String from;
// 实际采用的目标语言
private String to;
// 结果体
private List<ResultPair> trans_result;
。。。。
}
/**
* 结果对
*
* @author 熊诗言
* @date 2015-09-05
*/
public class ResultPair {
// 原文
private String src;
// 译文
private String dst;
。。。。
}
/**
* 问询处理器
* @author 熊诗言
*
*/
public class QuestionTextHandler extends DefaultMessageHandler {
@Override
public boolean canDo(Map<String, String> requestMap) {
String content = requestMap.get("Content").trim();
String msgType = requestMap.get("MsgType");
return MessageUtil.REQ_MESSAGE_TYPE_TEXT.equals(msgType) && ("?".equals(content) || "?".equals(content));
}
@Override
public BaseMessage handleByMe(Map<String, String> requestMap) {
return MessageFactory.createTextMessage(fromUserName, toUserName, ContentUtil.getMainTips());
}
}
/**
* 主菜单指南
* @return
*/
public static String getMainTips(){
StringBuffer buffer = new StringBuffer();
buffer.append("您好,我是你的生活小助手,中括号内容即可获取服务").append("\n");
buffer.append("目前能提供的功能包括\n");
buffer.append("⑴[历史上的今天]\n");
buffer.append("⑵测距、导航、周边搜索\n");
buffer.append("⑶[歌曲]搜索\n");
buffer.append("⑷[翻译]\n");
buffer.append("⑸[笑话][讲个笑话]\n");
buffer.append("⑹人脸识别\n");
buffer.append("⑺机器人聊天\n");
buffer.append("⑻天气预报(自己和机器人实现)\n");
buffer.append("⑼[快递]查询\n");
buffer.append("⑽发送来QQ表情返回原来的QQ表情\n\n");
buffer.append("回复“?/?”显示此帮助菜单");
return buffer.toString();
}
翻译功能由百度提供
/**
* 翻译处理器
* @author 熊诗言
*
*/
public class TranslateTextHandler extends DefaultMessageHandler {
@Override
public boolean canDo(Map<String, String> requestMap) {
String content = requestMap.get("Content").trim();
String msgType = requestMap.get("MsgType");
return MessageUtil.REQ_MESSAGE_TYPE_TEXT.equals(msgType) && content.startsWith("翻译");
}
@Override
public BaseMessage handleByMe(Map<String, String> requestMap) {
String content = requestMap.get("Content").trim();
if ("翻译".equals(content)) {
return MessageFactory.createTextMessage(fromUserName, toUserName, ContentUtil.getTranslateUsage());//如果为空就返回提示
}else{
String[] keyWords = content.split("@");//翻译@要翻译的内容
return MessageFactory.createTextMessage(fromUserName, toUserName, BaiduTranslateService.translate(keyWords[1]));
}
}
}
/**
* Q 译通使用指南
*
* @return
*/
public static String getTranslateUsage() {
StringBuffer buffer = new StringBuffer();
buffer.append(emoji(0xe148)).append("Q 译通使用指南").append("\n\n");
buffer.append("Q 译通为用户提供专业的多语言翻译服务,目前支持以下翻译方向:").append("\n");
buffer.append(" 中-> 英").append("\n");
buffer.append(" 英-> 中").append("\n");
buffer.append(" 日-> 中").append("\n\n");
buffer.append("使用示例:").append("\n");
buffer.append(" 翻译我是中国人").append("\n");
buffer.append(" 翻译dream").append("\n");
buffer.append(" 翻译さようなら").append("\n\n");
buffer.append("回复“?/?”显示主菜单");
return buffer.toString();
}
/**
*使用Gson解析返回的数据
* @author 熊诗言
* @date 2015-09-05
*/
public class BaiduTranslateService {
/**
* 发起http 请求获取返回结果
*
* @param requestUrl 请求地址
* @return
*/
private static String httpRequest(String requestUrl) {
StringBuffer buffer = new StringBuffer();
try {
URL url = new URL(requestUrl);
HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();
httpUrlConn.setDoOutput(false);
httpUrlConn.setDoInput(true);
httpUrlConn.setUseCaches(false);
httpUrlConn.setRequestMethod("GET");
httpUrlConn.connect();
// 将返回的输入流转换成字符串
InputStream inputStream = httpUrlConn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String str = null;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
bufferedReader.close();
inputStreamReader.close();
// 释放资源
inputStream.close();
inputStream = null;
httpUrlConn.disconnect();
} catch (Exception e) {
}
return buffer.toString();
}
/**
* 翻译(中->英英->中日->中)
*
* @param source
* @return
*/
public static String translate(String source) {
String dst = null;
// 组装查询地址
String requestUrl = "http://openapi.baidu.com/public/2.0/bmt/translate?client_id=3SRtOd6sN6DMCoeSub3bnnzh&q={keyWord}&from=auto&to=auto";
// 对参数q 的值进行urlEncode utf-8 编码
requestUrl = requestUrl.replace("{keyWord}", ContentUtil.urlEncodeUTF8(source));
// 查询并解析结果
try {
// 查询并获取返回结果
String json = httpRequest(requestUrl);
//System.out.println(json);
// 通过Gson 工具将json 转换成TranslateResult 对象
TranslateResult translateResult = new Gson().fromJson(json, TranslateResult.class);
// 取出translateResult 中的译文
dst = translateResult.getTrans_result().get(0).getDst();
} catch (Exception e) {
e.printStackTrace();
}
if (null == dst)
dst = "翻译系统异常,请稍候尝试!";
return dst;
}
public static void main(String[] args) {
// 翻译结果:The network really powerful
System.out.println(translate("网络真强大"));
}
}
/**
* utf 编码
*
* @param source
* @return
*/
public static String urlEncodeUTF8(String source) {
String result = source;
try {
result = java.net.URLEncoder.encode(source, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
/**
* 调用百度翻译api 查询结果
*这两个类的封装是Gson 类库所要求的,如果读者不是用Gson 解析json 字符串,
而是用JSON-lib,就没有必要封装这两个类。
* @author 熊诗言
* @date 2015-09-05
*/
public class TranslateResult {
// 实际采用的源语言
private String from;
// 实际采用的目标语言
private String to;
// 结果体
private List<ResultPair> trans_result;
。。。。
}
/**
* 结果对
*
* @author 熊诗言
* @date 2015-09-05
*/
public class ResultPair {
// 原文
private String src;
// 译文
private String dst;
。。。。
}