java使用百度翻译接口实现前后端翻译功能
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                java使用百度翻译接口实现前后端翻译功能
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                java?百度翻譯工具類?分別有前端和后端的?例子及工具
使用百度翻譯接口需要網上申請key,代碼里面有URL。
package cn.secure.util; import java.io.BufferedReader; import java.io.Closeable; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.Map;import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; /*** @Description 百度翻譯HTTP* @ClassName HttpGet* @author ygc* @date 2018年6月26日 下午1:58:56* @version V1.0* @since JDK 1.8*/ class HttpGet {protected static final int SOCKET_TIMEOUT = 10000; // 10Sprotected static final String GET = "GET";public static String get(String host, Map<String, String> params) {try {// 設置SSLContextSSLContext sslcontext = SSLContext.getInstance("TLS");sslcontext.init(null, new TrustManager[] { myX509TrustManager }, null);String sendUrl = getUrlWithQueryString(host, params);// System.out.println("URL:" + sendUrl);URL uri = new URL(sendUrl); // 創建URL對象HttpURLConnection conn = (HttpURLConnection) uri.openConnection();if (conn instanceof HttpsURLConnection) {((HttpsURLConnection) conn).setSSLSocketFactory(sslcontext.getSocketFactory());}conn.setConnectTimeout(SOCKET_TIMEOUT); // 設置相應超時conn.setRequestMethod(GET);int statusCode = conn.getResponseCode();if (statusCode != HttpURLConnection.HTTP_OK) {System.out.println("Http錯誤碼:" + statusCode);}// 讀取服務器的數據InputStream is = conn.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));StringBuilder builder = new StringBuilder();String line = null;while ((line = br.readLine()) != null) {builder.append(line);}String text = builder.toString();close(br); // 關閉數據流close(is); // 關閉數據流conn.disconnect(); // 斷開連接return text;} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (KeyManagementException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return null;}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) { // 過濾空的keycontinue;}if (i != 0) {builder.append('&');}builder.append(key);builder.append('=');builder.append(encode(value));i++;}return builder.toString();}protected static void close(Closeable closeable) {if (closeable != null) {try {closeable.close();} catch (IOException e) {e.printStackTrace();}}}/*** 對輸入的字符串進行URL編碼, 即轉換為%20這種形式* * @param input 原文* @return URL編碼. 如果編碼失敗, 則返回原文*/public static String encode(String input) {if (input == null) {return "";}try {return URLEncoder.encode(input, "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return input;}private static TrustManager myX509TrustManager = new X509TrustManager() {@Overridepublic X509Certificate[] getAcceptedIssuers() {return null;}@Overridepublic void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}@Overridepublic void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}};}//api類
package cn.secure.util;import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Map; /*** @Description 轉化API* @ClassName TransApi* @author ygc* @date 2018年6月26日 下午1:58:41* @version V1.0* @since JDK 1.8*/ public class TransApi {private static final String TRANS_API_HOST = "http://api.fanyi.baidu.com/api/trans/vip/translate";private String appid;private String securityKey;public TransApi(String appid, String securityKey) {this.appid = appid;this.securityKey = securityKey;}public String getTransResult(String query, String from, String to) throws UnsupportedEncodingException {Map<String, String> params = buildParams(query, from, to);return HttpGet.get(TRANS_API_HOST, params);}private Map<String, String> buildParams(String query, String from, String to) throws UnsupportedEncodingException {Map<String, String> params = new HashMap<String, String>();params.put("q", query);params.put("from", from);params.put("to", to);params.put("appid", appid);// 隨機數String salt = String.valueOf(System.currentTimeMillis());params.put("salt", salt);// 簽名String src = appid + query + salt + securityKey; // 加密前的原文params.put("sign", MD5.md5(src));return params;}}Test類
/** * Project Name D3 * File Name TestBaiduUtil.java * Package Name cn.secure.util * Date 2018年6月26日下午12:14:29 * Copyright (c) 2018, cert@cnic.cn All Rights Reserved. * */ package cn.secure.util;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.net.URLDecoder;import com.alibaba.fastjson.JSON;import net.sf.json.JSONArray; import net.sf.json.JSONObject;/**@Description TODO** @ClassName EnglishTranslateBaiduUtil * @author ygc* @date 2018年6月26日 下午12:14:29* @version V1.0 * @since JDK 1.8*/ public class EnglishTranslateBaiduUtil {// 在平臺申請的APP_ID 詳見 http://api.fanyi.baidu.com/api/trans/product/desktop?req=developerprivate static final String APP_ID = "20180626000180267";private static final String SECURITY_KEY = "SwHMdwzocdsLMYPJ4M08";/*** EnglistTranslateChinese (解析百度服務器平臺返回的相關數據信息 )<br/>* @param query 填寫查詢的英文進行翻譯* @return* @throws UnsupportedEncodingException* @author ygc * @since JDK 1.8*/public static String EnglistTranslateChinese(String query) throws UnsupportedEncodingException{ TransApi api = new TransApi(APP_ID, SECURITY_KEY);//英語為 en auto 自動檢測String result=api.getTransResult(query, "anto", "zh");String date=""; com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(result);com.alibaba.fastjson.JSONArray array = jsonObject.getJSONArray("trans_result");int length=array.size(); for(int i=0;i<length;i++){ com.alibaba.fastjson.JSONObject params=JSON.parseObject(array.getString(i));String str=params.getString("dst"); try { str=URLDecoder.decode(str,"utf-8"); date=str; } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return date; } public static String ChineseTranslateEnglist(String query) throws UnsupportedEncodingException{ TransApi api = new TransApi(APP_ID, SECURITY_KEY);//英語為 en auto 自動檢測String result=api.getTransResult(query, "anto", "en");String date=""; com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(result);com.alibaba.fastjson.JSONArray array = jsonObject.getJSONArray("trans_result");int length=array.size(); for(int i=0;i<length;i++){ com.alibaba.fastjson.JSONObject params=JSON.parseObject(array.getString(i));String str=params.getString("dst"); try { str=URLDecoder.decode(str,"utf-8"); date=str; } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return date; } public static void main(String[] args) throws UnsupportedEncodingException {//測試翻譯String msg=EnglishTranslateBaiduUtil.EnglistTranslateChinese("bouygues telecom division mobile ");System.out.println(msg);} }前端翻譯 js info要查詢的信息 result拿到的結果
var query=info;var appid = '20180626000180267';var key = 'SwHMdwzocdsLMYPJ4M08';var salt = (new Date).getTime();var temp;// 多個query可以用\n連接 如 query='apple\norange\nbanana\npear'var from = 'auto';var to = 'zh';var str1 = appid + query + salt +key;var sign = MD5(str1);$.ajax({url: 'http://api.fanyi.baidu.com/api/trans/vip/translate',type: 'get',dataType: 'jsonp',data: {q: query,appid: appid,salt: salt,from: from,to: to,sign: sign},success: function (data) {result= data.trans_result[0].dst;} });}//破解版。。拿到百度搜索到的標簽中的text
/** * Project Name D3 * File Name GetHtmlContentUtils.java * Package Name cn.secure.util * Date 2018年6月26日上午11:06:20 * Copyright (c) 2018, cert@cnic.cn All Rights Reserved. * */ package cn.secure.util;import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL;/**@Description TODO** @ClassName GetHtmlContentUtils* @author ygc破解百度翻譯* @date 2018年6月26日 上午11:06:20* @version V1.0 * @since JDK 1.8*/public class GetHtmlContentUtils {private final static String PreUrl="http://www.baidu.com/s?wd="; //百度搜索URLprivate final static String TransResultStartFlag="<span class=\"op_dict_text2\">"; //翻譯開始標簽private final static String TransResultEndFlag="</span>"; //翻譯結束標簽public static String getTranslateResult(String urlString) throws Exception { //傳入要搜索的單詞URL url = new URL(PreUrl+urlString); //生成完整的URL// 打開URLHttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();// 得到輸入流,即獲得了網頁的內容BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));String preLine="";String line;int flag=1;// 讀取輸入流的數據,并顯示String content=""; //翻譯結果while ((line = reader.readLine()) != null) { //獲取翻譯結果的算法if(preLine.indexOf(TransResultStartFlag)!=-1&&line.indexOf(TransResultEndFlag)==-1){content+=line.replaceAll(" | ", "")+"\n"; //去電源代碼上面的半角以及全角字符flag=0;}if(line.indexOf(TransResultEndFlag)!=-1){flag=1;}if(flag==1){preLine=line;}}return content;//返回翻譯結果}public static void main(String[] args) {String str="fish";try {String msg=GetHtmlContentUtils.getTranslateResult(str);System.out.println(msg);} catch (Exception e) {// TODO Auto-generated catch block e.printStackTrace(); }} }?
總結
以上是生活随笔為你收集整理的java使用百度翻译接口实现前后端翻译功能的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: NV16 转 NV12
 - 下一篇: 【Mendeley】自定义文献引用格式(