1. 程式人生 > >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; // 10S
    protected static final String GET = "GET";

    public static String get(String host, Map<String, String> params) {
        try {
            // 設定SSLContext
            SSLContext 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) { // 過濾空的key
                continue;
            }

            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() {

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        @Override
        public 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, [email protected] 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=developer
    private 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, [email protected] 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=";                        //百度搜索URL
	    private 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
	        // 開啟URL
	        HttpURLConnection 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使用翻譯介面實現前後翻譯功能

java 百度翻譯工具類 分別有前端和後端的 例子及工具 使用百度翻譯介面需要網上申請key,程式碼裡面有URL。 package cn.secure.util; import java.io.BufferedReader; import java.io.Closeabl

JS呼叫api介面——實現簡單的頁面

描述: JS呼叫百度api介面——實現簡單的百度頁面 效果: 實現: css檔案: @charset "utf-8"; /* CSS Document */ *{ margin: 0; padding: 0; list-style: none;

利用地圖,實現移動附近門店功能

2、建立應用 3、檢視建立應用的AK 4、進入 資料管理 建立資料表,並記錄表編號,欄位裡可增加自己想要的欄位,資料裡可標註自己需要的地址,並錄入資訊。 是否釋出到檢索項,是決定介面能不能搜尋到資料的總開關!!! 其中,資料標註項中,標籤欄,為分組檢索的依據,可以把

基於API,實現圖片文字識別功能Java版)

1、登入百度AI開放平臺     (1)在頂部導航欄中,找到控制檯選項,並選擇文字識別功能,進入管理中心頁面        (2)在管理中心頁面中,找到建立應用按鈕並點選   (3)填寫應用名名稱和應用描述,選擇相應的應用型別,勾選自己需要的介面服

利用介面實現車牌識別·python

一個小需求---實現車牌識別。 目前有兩個想法 1. 調雲線上的介面或者使用SDK做開發(配置環境和編譯第三方庫很麻煩,當然使用python可以避免這些問題) 2. 自己實現車牌識別演算法(複雜)  一開始準備使用百度雲文字識別C++ SDK來做,發現需要準備curl、jsoncpp和O

React+dva.js+typescript實現貼吧移動web

個人練習作品,有bug歡迎在github上提:) github地址:https://github.com/axel10/react-tieba 整個專案中實現起來最麻煩的應該算是滾動位置記憶和路由動畫。由於目前網上沒有路由滑動動畫的現成例項,只能自己實現。路由左右滑動動畫這個需求對history的知識考察

利用java呼叫API介面,解析返回的json資料,突破API介面呼叫結果的限制

近一段時間的專案的核心是百度API的POI(興趣點)資料,所以需要呼叫百度API資料,下面就來講一下整個流程和遇到的問題及解決辦法。 首先要檢視百度API文件,連結如下:http://lbsyun.baidu.com/index.php?title=webapi 專案中主要用到的是Plac

Android 地圖開發(一)如何呼叫地圖介面和在專案中顯示地圖以及實現定位

二、下載百度地圖API庫 然後新增到專案中即可。   三、在專案清單AndroidMainifest.xml配置百度地圖API key和新增相關許可權                         四、在專案呼叫百度地圖專案功能,這篇文章就首先講講顯示地圖和定位的功能 首先

java後臺介面獲取經緯度

首先,我需要從文字文件裡獲取地址資訊 package com.tongdatech.lgyj; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOExceptio

WebAPI 實現前後分離

工程 密碼 困難 跨域問題 內容 細節 -a errcode json 隨著Web技術的發展,現在各種框架,前端的,後端的,數不勝數。全棧工程師的壓力越來越大。 現在的前端的框架,既可以做各種Web,又可以做各種APP,前端框架更新換代越來越快,越來越多。 傳統的模式 前端

借助OCR,實現一鍵識別圖片中文字,就是這麽酷!

mage src 百度 文字 身份證 公眾 分享圖片 目前 增加 轉眼已是淩晨兩點,還好通過java根據百度提供的OCR接口,實現了一個有趣的小應用:一鍵識別圖片中文字 經過一個小時的反復測試,沒想到識別確實很高,而且,居然還可以識別稍微復雜的驗證碼 比如: 主要為了

axios + mock.js模擬數據實現前後分離開發的實例代碼

log image 圖片 mage npm 新建 clas 就是 sta 首先就是必須安裝axios和mock.js npm install axios npm install mockjs 1. 然後在文檔src中新建一個mock.js文件,如圖 2. 在main.j

.net core實現前後徹底分離

方法 red app rtu runtime query exception get header 問題的關鍵在跨域 1.我們在services裏面 添加跨域內容如下: public void ConfigureServices(IServiceCollection se

SSM:Spring+SpringMVC+MyBatis(實現前後分離)

背景介紹 前段時間開發涉及到了前後端分離思想,本人涉及到開發後端以及資料庫連線處理部分,測試使用postman進行請求,之後對前端請求瞭解了一部分後完成了一個小的頁面,現在分享並記錄下來。 分享 話不多說,maven建立工程在之前的文章中已經存在:maven專案建立。建立好的專案

vue signal實現前後實時訊息同步

##前言 最近接了一個專案,要求用websocket連線,結果來了一個.Net的signal,我負責處理前端,拿到後端給的樣例js後,開始著手寫vue這端的連線。 主要目的是實現伺服器向用戶傳送訊息,使用者向伺服器傳送訊息完全可以post請求即可。 如何入手,請先看這個連結<<

java呼叫AI識別圖片上的文字功能

1、登入百度AI開放平臺     網站連結:http://ai.baidu.com/     新手接入指南:http://ai.baidu.com/docs#/Begin/top   &n

webuploader如何實現秒傳與斷點續傳

因為這是小眾需求,所以預設沒有做在webuploader裡面,而只是提供hook介面,讓使用者很簡單的擴充套件此功能。 那麼,都有哪些重要的hook介面呢? before-send-file 此hook在檔案傳送之前執行 before-file 此hook在檔案分片(如果沒有

iOS·採用第三方(地圖SDK)實現定位等功能開發

 陳滿iOS  關注 2017.05.01 01:06* 字數 2212 閱讀 6818評論 7喜歡 133 1.申請金鑰 首先,申請一個baidu賬號,接著進入新建金鑰入口申請成為baidu地圖開發者,填寫相關開發者資訊和簡訊驗證碼。接

Node+Express+Vue+Element+MySQL簡易實現前後分離

原始碼 1、安裝node環境 具體安裝教程請參考http://nodejs.cn/ 2、塔建Vue前端專案 使用Vue官網提供的vue-cli腳手架vue-cli命令列工具 # 全域性安裝 vue-cli $ npm install --global vue-cli # 建立一個

nginx反向代理html,實現前後分離部署

前後端分離開發、部署,融到一個專案中部署,修改程式碼部署較為頻繁,前端改動一小點也都需要後端一起打包部署。固想了nginx部署一個代理即可。  下載好nginx後在nginx.conf中增加如下程式碼: server { listen 8082;