Java調用有道翻譯API包括APPID/密鑰地址註冊

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, 煩請告知 謝謝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章