微信公众号开发(五):文本处理器之主菜单、百度翻译

来源:互联网 发布:mysql数据库入门教程 编辑:程序博客网 时间:2024/05/16 05:36
问询处理器处理"?",如果用户发送来"?"表示询问怎么使用,发送回使用指南
/**
 * 问询处理器
 * @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;
    。。。。
}
0 0
原创粉丝点击