Java調用有道翻譯API
因爲上次發的資源用的我的APPID 導致我的服務已經停用了……
現在把地址也一併奉上 希望都可以自己註冊。
APPID/密鑰 註冊地址:http://ai.youdao.com/login.html
public class Demo {
public static void main(String[] args) {
String appKey ="APPID";
String query = "good";
String salt = String.valueOf(System.currentTimeMillis());
String from = "en";
String to = "zh_CHS";
String sign = md5(appKey + query + salt+ "密鑰");
Map<String, String> params = new HashMap<String, String>();
params.put("q", query);
params.put("from", from);
params.put("to", to);
params.put("sign", sign);
params.put("salt", salt);
params.put("appKey", appKey);
//這裏打印出來的是翻譯的地址 下面會講解
System.out.println(getUrlWithQueryString("https://openapi.youdao.com/api", params));
}
/**
* 生成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 = string.getBytes();
try{
/** 獲得MD5摘要算法的 MessageDigest 對象 */
MessageDigest mdInst = MessageDigest.getInstance("MD5");
/** 使用指定的字節更新摘要 */
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);
}catch(NoSuchAlgorithmException e){
return null;
}
}
/**
* 根據api地址和參數生成請求URL
* @param url
* @param params
* @return
*/
public static String getUrlWithQueryString(String url, Map<String, String> params) {
if (params == null) {
return url;
}
StringBuilder builder = new StringBuilder(url);
if (url.contains("?")) {
builder.append("&");
} else {
builder.append("?");
}
int i = 0;
for (String key : params.keySet()) {
String value = 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;
}
}
官方API 只給出的生成了調用的地址生成的類似:
https://openapi.youdao.com/api?sign=5F8D54B7302A3989E49D3FB7E9E821E4&to=zh_CHS&q=good&from=en&appKey=6916ca241e90c93a&salt=1498449405086
- sign:簽名,通過md5(appKey+q+salt+密鑰)生成
- to和form:是語種方向
- q:翻譯的內容
- appkey:應用 ID
- salt:一個隨機值
複製這個地址到瀏覽器就可以使用 返回的是一串JSON 我的服務停了…你們註冊之後可以試一下 看一下返回的結果
然後可以通過JsonObject 來讀取這段內容
/**
*
* @author S. Yichen
* @param query 查詢的詞 多詞用\n
* @param from 原文語種可以爲auto
* @param to 必填
*/
public static String readJsonFromUrl(String query,String from, String to ) throws IOException, JSONException {
//生成查詢地址
String url = creatUrl(query, from, to);
System.out.println(url);
InputStream is = new URL(url).openStream();
String str = null;
StringBuilder result = new StringBuilder();
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
while ((str = reader.readLine()) != null) {
result.append(str).append("\n");
}
JSONObject json = new JSONObject(result.toString());
//開發者自行處理錯誤
//停用返回401
String error_code = json.getString("errorCode");
if (!"0".equals(error_code)) {
System.out.println("出錯代碼:" + error_code);
System.out.println("出錯信息:" + json.getString("errorCode"));
return null;
}
//獲取返回翻譯結果
JSONArray array = (JSONArray) json.get("translation");
StringBuffer text = new StringBuffer();
int i = 0;
//考慮到批量查詢 查詢的詞中間用\n分隔 爲了返回的是個字符串 此處是拼起來了 用的時候分割也可以 你也可以直接用集合接收 隨你高興
for (; i < array.length(); i++) {
text.append(array.get(i)+"\n");
}
return text.toString();
} finally {
is.close();
}
}
下面這段是一個測試:
public static void main(String[] args) {
String str1 = "wo+ni";
//考慮到翻譯詞語可能會有特殊符號 必須經過處理 不然會錯誤
String regEx = "[ _`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]|\n|\r|\t";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str1);
String str = "中國\n老師";
String[] split2 = str.split("\n");
System.out.println(split2.length);
try {
String result = readJsonFromUrl(str,"zh-CHS","en");
System.out.println(result);
String[] split = result.split("\n");
List<String> list = Arrays.asList(split);
for (String string : list) {
System.out.println(string);
}
System.out.println(list.size());
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
}
大概有道翻譯的就這麼多,必應翻譯如果哪位大神知道怎麼註冊APPID, 煩請告知 謝謝