Java开发使用百度翻译api
1、先注冊一個 百度翻譯api 帳戶,申請官方授權,注冊官網如下:
? ? ??http://api.fanyi.baidu.com/api/trans/product/index
2、申請成功后下載java版demo,其實就是一個工程文件
3、下載好之后將工程文件導入eclipse,導入成功后,在Main類中將變量?APP_ID ,SECURITY_KEY? 設為你申請到的APP ID與密匙,APP ID與密匙在開發者信息里找
4、填入id與密匙就能直接使用了,
???我們要用到的是TransApi 類中的?getTransResult(String A, String B, String C)方法,A是需要翻譯的內容,B是翻譯源語言,C是譯文語言。自動對應的是 "auto",中文對應"zh",英文對應"en",譯文語言不能設為自動,其他語言簡寫可以到官網上自行查找。
????函數返回結果是josn字段,結構如下
????{"from":"zh","to":"en","trans_result":[{"src":"\u9ad8\u5ea6600\u7c73","dst":"Height of 600 meters"}]}
5、解析json,方法有很多種,這里用的是googol的gson來解析,使用gson需要下載gson的jar文件,大家可以自行到網上下載,下載后將jar文件導入項目中即可。
下面直接上源碼:
package com.wangfei.service;import com.google.gson.Gson; import com.wangfei.pojo.TranslateResult; import com.wangfei.util.MD5; import com.wangfei.util.MyX509TrustManager; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory;import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.math.BigInteger; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.security.MessageDigest;/***百度翻譯API工具*/ public class BaiduTranslateService {private static Logger logger = LoggerFactory.getLogger(BaiduTranslateService.class);protected static final int SOCKET_TIMEOUT = 10000; // 10S/*** 發起http請求獲取返回結果** @param requestUrl 請求地址* @return*/public static String httpRequest(String requestUrl) {StringBuffer buffer = new StringBuffer();try {// 設置SSLContextSSLContext sslcontext = SSLContext.getInstance("TLS");sslcontext.init(null, new TrustManager[] { new MyX509TrustManager() }, null);URL url = new URL(requestUrl);HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();if (httpUrlConn instanceof HttpsURLConnection) {((HttpsURLConnection) httpUrlConn).setSSLSocketFactory(sslcontext.getSocketFactory());}httpUrlConn.setConnectTimeout(SOCKET_TIMEOUT); // 設置相應超時httpUrlConn.setRequestMethod("GET");//httpUrlConn.connect();int statusCode = httpUrlConn.getResponseCode();if (statusCode != HttpURLConnection.HTTP_OK) {logger.info("Http錯誤碼:" + statusCode);}// 將返回的輸入流轉換成字符串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();httpUrlConn.disconnect();} catch (Exception e) {e.printStackTrace();}return buffer.toString();}/*** utf編碼** @param source* @return*/public static String urlEncodeUTF8(String source) {String result = source;try {result = URLEncoder.encode(source, "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return result;}/*** 翻譯(中->英 英->中 日->中 )** @param querySource* @return*/public static String translate(String querySource, String from, String to) {String dst = null;// 百度翻譯官方apiString url = "http://api.fanyi.baidu.com/api/trans/vip/translate";// 需要改成自己的APP IDString APPID = "填寫自己的APPID";// 需要改成自己的密鑰String KEY = "填寫自己密鑰";// 隨機數,官方提供的是獲取時間String SALT = Long.toString(System.currentTimeMillis());// 對簽名做md5加密String SIGN = MD5.md5(APPID + querySource + SALT + KEY);// 組裝查詢地址 // 添加參數,并對參數的值進行urlEncode utf-8編碼StringBuffer requestUrl = new StringBuffer(url);requestUrl.append("?");requestUrl.append("q");requestUrl.append("=");requestUrl.append(urlEncodeUTF8(querySource));requestUrl.append("&");requestUrl.append("from");requestUrl.append("=");requestUrl.append(urlEncodeUTF8(from));requestUrl.append("&");requestUrl.append("to");requestUrl.append("=");requestUrl.append(urlEncodeUTF8(to));requestUrl.append("&");requestUrl.append("appid");requestUrl.append("=");requestUrl.append(urlEncodeUTF8(APPID));requestUrl.append("&");requestUrl.append("salt");requestUrl.append("=");requestUrl.append(urlEncodeUTF8(SALT));requestUrl.append("&");requestUrl.append("sign");requestUrl.append("=");requestUrl.append(urlEncodeUTF8(SIGN));// 查詢并解析結果try {// 查詢并獲取返回結果String json = httpRequest(requestUrl.toString());logger.info("調用翻譯Api的結果" + 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 String getMD5String(String str) {try {// 生成一個MD5加密計算摘要MessageDigest md = MessageDigest.getInstance("MD5");// 計算md5函數md.update(str.getBytes());// digest()最后確定返回md5 hash值,返回值為8位字符串。因為md5 hash值是16位的hex值,實際上就是8位的字符// BigInteger函數則將8位的字符串轉換成16位hex值,用字符串來表示;得到字符串形式的hash值//一個byte是八位二進制,也就是2位十六進制字符(2的8次方等于16的2次方)return new BigInteger(1, md.digest()).toString(16);} catch (Exception e) {e.printStackTrace();return null;}}public static void main(String[] args) {// 翻譯結果:網絡非常強大String querySource = "The network really powerful";String from = "auto";String to = "zh";String str = translate(querySource,from,to);System.out.println("翻譯結果====" + str);} }java? ?MD5 加密
package com.wangfei.util;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;/*** MD5編碼相關的類*/ public class MD5 {// 首先初始化一個字符數組,用來存放每個16進制字符private static final char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd','e', 'f' };/*** 獲得一個字符串的MD5值** @param input 輸入的字符串* @return 輸入字符串的MD5值**/public static String md5(String input) {if (input == null)return null;try {// 拿到一個MD5轉換器(如果想要SHA1參數換成”SHA1”)MessageDigest messageDigest = MessageDigest.getInstance("MD5");// 輸入的字符串轉換成字節數組byte[] inputByteArray = input.getBytes("utf-8");// inputByteArray是輸入字符串轉換得到的字節數組messageDigest.update(inputByteArray);// 轉換并返回結果,也是字節數組,包含16個元素byte[] resultByteArray = messageDigest.digest();// 字符數組轉換成字符串返回return byteArrayToHex(resultByteArray);} catch (Exception e) {e.printStackTrace();return null;}}/*** 獲取文件的MD5值** @param file* @return*/public static String md5(File file) {try {if (!file.isFile()) {System.err.println("文件" + file.getAbsolutePath() + "不存在或者不是文件");return null;}FileInputStream in = new FileInputStream(file);String result = md5(in);in.close();return result;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return null;}public static String md5(InputStream in) {try {MessageDigest messagedigest = MessageDigest.getInstance("MD5");byte[] buffer = new byte[1024];int read = 0;while ((read = in.read(buffer)) != -1) {messagedigest.update(buffer, 0, read);}in.close();String result = byteArrayToHex(messagedigest.digest());return result;} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return null;}private static String byteArrayToHex(byte[] byteArray) {// new一個字符數組,這個就是用來組成結果字符串的(解釋一下:一個byte是八位二進制,也就是2位十六進制字符(2的8次方等于16的2次方))char[] resultCharArray = new char[byteArray.length * 2];// 遍歷字節數組,通過位運算(位運算效率高),轉換成字符放到字符數組中去int index = 0;for (byte b : byteArray) {resultCharArray[index++] = hexDigits[b >>> 4 & 0xf];resultCharArray[index++] = hexDigits[b & 0xf];}// 字符數組組合成字符串返回return new String(resultCharArray);}}總結
以上是生活随笔為你收集整理的Java开发使用百度翻译api的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringMVC 刷课笔记
- 下一篇: 基于python实现网络课程秒刷系列二