SpringBoot,+毕业项目引入有道词典api接口,记录

1.有道智云注册账号,获取资格 有免费体验, http://ai.youdao.com/

2.复制官方的Demo,修改一下,作为一个工具类

  注意:import 别引错

      

package com.example.demo.Util;

import org.apache.http.HttpEntity;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;

/**
 * Created with IDEA
 *
 * @author xp
 * @date 2018/10/9 11:17
 */
public class YouDaoUtil {
  private   static  final   String    appKey ="xxxxxxxxxxxxxxxxxxxxxxxxx"; //xxxx应用 ID
  private  static  final    String    form="zh-CHS"; //  源语言 中文
  private  static  final    String    to="EN"; // 目标语言  英文
    public YouDaoUtil() {

    }
    public   String  main(String query){
        // 返回结果
       String  result="";
      String salt = String.valueOf(System.currentTimeMillis());
      String sign = md5(appKey + query + salt+ "xxxxxxxxxxxxxxxxxxxxxxxxx");//xxxx授权密钥
      Map params = new HashMap();
      params.put("q", query);  //要翻译的文本
      params.put("from", form); // 源语言
      params.put("to", to); //目标语言
      params.put("sign", sign); 
      params.put("salt", salt);
      params.put("appKey", appKey);
      try {
          result=requestForHttp("http://openapi.youdao.com/api", params);
          return result;
      } catch (Exception e) {
          e.printStackTrace();
      }
      return result;
  }

    public static String requestForHttp(String url,Map requestParams) throws Exception{
        String result = null;
        CloseableHttpClient httpClient = HttpClients.createDefault();
        /**HttpPost*/
        HttpPost httpPost = new HttpPost(url);
        System.out.println(new JSONObject(requestParams).toString());
        List params = new ArrayList();
        Iterator it = requestParams.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry en = (Map.Entry) it.next();
            String key = (String) en.getKey();
            String value = (String) en.getValue();
            if (value != null) {
                params.add(new BasicNameValuePair(key, value));
            }
        }
        httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));
        /**HttpResponse*/
        CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
        try{
            HttpEntity httpEntity = httpResponse.getEntity();
            result = EntityUtils.toString(httpEntity, "utf-8");
            EntityUtils.consume(httpEntity);
        }finally{
            try{
                if(httpResponse!=null){
                    httpResponse.close();
                }
            }catch(IOException e){
                e.printStackTrace();
            }
        }
        return result;
    }

    /**
     * 生成32位MD5摘要
     * @param string
     * @return
     */
    public static String md5(String string) {
        if(string == null){
            return null;
        }
        char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                'A', 'B', 'C', 'D', 'E', 'F'};

        byte[] btInput = new byte[0];
        try {
            btInput = string.getBytes("utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        /** 获得MD5摘要算法的 MessageDigest 对象 */
        MessageDigest mdInst = null;
        try {
            mdInst = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        /** 使用指定的字节更新摘要 */
        mdInst.update(btInput);
        /** 获得密文 */
        byte[] md = mdInst.digest();
        /** 把密文转换成十六进制的字符串形式 */
        int j = md.length;
        char str[] = new char[j * 2];
        int k = 0;
        for (byte byte0 : md) {
            str[k++] = hexDigits[byte0 >>> 4 & 0xf];
            str[k++] = hexDigits[byte0 & 0xf];
        }
        return new String(str);
    }

    /**
     * 根据api地址和参数生成请求URL
     * @param url
     * @param params
     * @return
     */
    public static String getUrlWithQueryString(String url, Map params) {
        if (params == null) {
            return url;
        }

        StringBuilder builder = new StringBuilder(url);
        if (url.contains("?")) {
            builder.append("&");
        } else {
            builder.append("?");
        }

        int i = 0;
        for (Object key : params.keySet()) {
            String value = (String) params.get(key);
            if (value == null) { // 过滤空的key
                continue;
            }

            if (i != 0) {
                builder.append('&');
            }

            builder.append(key);
            builder.append('=');
            builder.append(encode(value));

            i++;
        }

        return builder.toString();
    }
    /**
     * 进行URL编码
     * @param input
     * @return
     */
    public static String encode(String input) {
        if (input == null) {
            return "";
        }
        try {
            return URLEncoder.encode(input, "utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        return input;
    }

}

官方文档

 https://ai.youdao.com/docs/doc-trans-api.s#p02

3. 对有道词典返回的json字符串,进行修改,提取出自己需要的内容(我的是文本翻译,需要翻译的内容)

  注意:每个人的需要的内容不一样, 大都是用Gson 处理然后返回

    /**
     * 有道第三方翻译
     * @param word 需要翻译的单词
     * @return
     */
    @RequestMapping("/questWord")
    @ResponseBody
    public AjaxResult addWord(String word) {
        word="good morning";
        YouDaoUtil youDaoUtil=new YouDaoUtil();
        //获得有道翻译过来的json字符串
         String result =youDaoUtil.main(word);
        try {
            // json 转jsonobject
            JSONObject jsonObject  = new JSONObject (result);
            // 提取jsonobject中的使用信息    web下为"网络解释"
            String  a=jsonObject.get("web").toString();
            // Gson
            Gson gson = new GsonBuilder().create();
            // Gson 把jsonObject 转为list集合
            List<YouDaoBean> list = gson.fromJson(a,new TypeToken<ArrayList<YouDaoBean>>(){}.getType());
            //  basic--explains 下为词典解释
            String  b=jsonObject.get("basic").toString();
            b.replace("uk-phonetic", "ukphonetic");
            // GSON 把json 转为bean
             YouDaoBean_2 youDaoBean_2 = gson.fromJson(b, YouDaoBean_2.class);
            System.out.println("成功"+youDaoBean_2);
            System.out.println("成功"+list);
            List<Object> listobject=new ArrayList<>();
            listobject.add(youDaoBean_2);
            listobject.add(list);
            return  AjaxResult.success(listobject,"200");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return  AjaxResult.success("翻译失败");
    }

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值