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("翻译失败");
}