手机
当前位置:查字典教程网 >编程开发 >Java >使用httpclient实现免费的google翻译api
使用httpclient实现免费的google翻译api
摘要:由於GoogletranslateAPI要收錢,因此想了一個偷機的方法1.用HttpClient發送一個request給http://tra...

由於Google translate API要收錢 ,因此想了一個偷機的方法

1. 用HttpClient發送一個request給http://translate.google.com

2. 再用Jsoup來parse html, 並取出翻譯後的文字

复制代码 代码如下:

/**

* Copyright (c) blackbear, Inc All Rights Reserved.

*/

package org.bb.util.i18n;

import java.io.InputStream;

import java.net.URLEncoder;

import java.text.MessageFormat;

import org.apache.commons.io.IOUtils;

import org.bb.util.net.http.HttpClientUtil;

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

/**

* TranslateUtil

*

* <pre>翻譯工具

* PS: 透過google translate

* </pre>

*

* @author catty

* @version 1.0, Created on 2011/9/2

*/

public class TranslateUtil {

protected static final String URL_TEMPLATE = "http://translate.google.com/?langpair={0}&text={1}";

protected static final String ID_RESULTBOX = "result_box";

protected static final String ENCODING = "UTF-8";

protected static final String AUTO = "auto"; // google自動判斷來源語系

protected static final String TAIWAN = "zh-TW"; // 繁中

protected static final String CHINA = "zh-CN"; // 簡中

protected static final String ENGLISH = "en"; // 英

protected static final String JAPAN = "ja"; // 日

/**

* <pre>Google翻譯

* PS: 交由google自動判斷來源語系

* </pre>

*

* @param text

* @param target_lang 目標語系

* @return

* @throws Exception

*/

public static String translate(final String text, final String target_lang) throws Exception {

return translate(text, AUTO, target_lang);

}

/**

* <pre>Google翻譯</pre>

*

* @param text

* @param src_lang 來源語系

* @param target_lang 目標語系

* @return

* @throws Exception

*/

public static String translate(final String text, final String src_lang, final String target_lang)

throws Exception {

InputStream is = null;

Document doc = null;

Element ele = null;

try {

// create URL string

String url = MessageFormat.format(URL_TEMPLATE,

URLEncoder.encode(src_lang + "|" + target_lang, ENCODING),

URLEncoder.encode(text, ENCODING));

// connect & download html

is = HttpClientUtil.downloadAsStream(url);

// parse html by Jsoup

doc = Jsoup.parse(is, ENCODING, "");

ele = doc.getElementById(ID_RESULTBOX);

String result = ele.text();

return result;

} finally {

IOUtils.closeQuietly(is);

is = null;

doc = null;

ele = null;

}

}

/**

* <pre>Google翻譯: 簡中-->繁中</pre>

*

* @param text

* @return

* @throws Exception

*/

public static String cn2tw(final String text) throws Exception {

return translate(text, CHINA, TAIWAN);

}

/**

* <pre>Google翻譯: 繁中-->簡中</pre>

*

* @param text

* @return

* @throws Exception

*/

public static String tw2cn(final String text) throws Exception {

return translate(text, TAIWAN, CHINA);

}

/**

* <pre>Google翻譯: 英文-->繁中</pre>

*

* @param text

* @return

* @throws Exception

*/

public static String en2tw(final String text) throws Exception {

return translate(text, ENGLISH, TAIWAN);

}

/**

* <pre>Google翻譯: 繁中-->英文</pre>

*

* @param text

* @return

* @throws Exception

*/

public static String tw2en(final String text) throws Exception {

return translate(text, TAIWAN, ENGLISH);

}

/**

* <pre>Google翻譯: 日文-->繁中</pre>

*

* @param text

* @return

* @throws Exception

*/

public static String jp2tw(final String text) throws Exception {

return translate(text, JAPAN, TAIWAN);

}

/**

* <pre>Google翻譯: 繁中-->日</pre>

*

* @param text

* @return

* @throws Exception

*/

public static String tw2jp(final String text) throws Exception {

return translate(text, TAIWAN, JAPAN);

}

}

HttpClientUtil.java

复制代码 代码如下:

/**

* Copyright (c) Blackbear, Inc All Rights Reserved.

*/

package org.bb.util.net.http;

import java.io.BufferedInputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.util.Map;

import org.apache.commons.io.IOUtils;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.client.methods.HttpRequestBase;

import org.apache.http.conn.scheme.PlainSocketFactory;

import org.apache.http.conn.scheme.Scheme;

import org.apache.http.conn.scheme.SchemeRegistry;

import org.apache.http.conn.ssl.SSLSocketFactory;

import org.apache.http.entity.BufferedHttpEntity;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;

import org.apache.http.params.BasicHttpParams;

/**

* PostUtil.java

*

* @author catty

* @version 1.0, Created on 2008/2/20

*/

public class HttpClientUtil {

protected static Log log = LogFactory.getLog(HttpClientUtil.class);

protected static HttpClient httpclient = null;

protected static int maxTotal = 200;

protected static int maxPerRoute = 20;

protected static String userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7";

static {

if (httpclient == null) {

// ~~~~~~~~~~~~~~~~~~~~

// create httpclient

// ~~~~~~~~~~~~~~~~~~~~

SchemeRegistry reg = new SchemeRegistry();

reg.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));

reg.register(new Scheme("https", 443, SSLSocketFactory.getSocketFactory()));

ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(reg);

cm.setMaxTotal(maxTotal);

cm.setDefaultMaxPerRoute(maxPerRoute);

httpclient = new DefaultHttpClient(cm);

}

}

/**

* <pre>下載後回傳Inputstream</pre>

*

* @param url

* @return

* @throws Exception

*/

public static InputStream downloadAsStream(String url) throws Exception {

InputStream is = (InputStream) download(url, null, null, false);

return is;

}

/**

* <pre>下載後儲存到File</pre>

*

* @param url

* @param saveFile

* @throws Exception

*/

public static void download(String url, File saveFile) throws Exception {

download(url, saveFile, null, false);

}

/**

* <pre>下載</pre>

*

* @param url

* @param saveFile

* @param params

* @param isPost

* @return 如果saveFile==null則回傳inputstream, 否則回傳saveFile

* @throws Exception

*/

public static Object download(final String url, final File saveFile, final Map<String, String> params,

final boolean isPost) throws Exception {

boolean saveToFile = saveFile != null;

// check dir exist ??

if (saveToFile && saveFile.getParentFile().exists() == false) {

saveFile.getParentFile().mkdirs();

}

Exception err = null;

HttpRequestBase request = null;

HttpResponse response = null;

HttpEntity entity = null;

FileOutputStream fos = null;

Object result = null;

try {

// create request

if (isPost) {

request = new HttpPost(url);

} else {

request = new HttpGet(url);

}

// add header & params

addHeaderAndParams(request, params);

// connect

response = httpclient.execute(request);

entity = response.getEntity();

entity = new BufferedHttpEntity(entity);

// get result

if (saveToFile) {// save to disk

fos = new FileOutputStream(saveFile);

IOUtils.copy(entity.getContent(), fos);

result = saveFile;

} else { // warp to inpustream

result = new BufferedInputStream(entity.getContent());

}

} catch (Exception e) {

err = e;

} finally {

// close

IOUtils.closeQuietly(fos);

// clear

request = null;

response = null;

entity = null;

if (err != null) {

throw err;

}

return result;

}

}

protected static void addHeaderAndParams(final HttpRequestBase request, final Map<String, String> params) {

// add default header

request.addHeader("User-Agent", userAgent);

// add params

if (params != null) {

// map --> HttpParams

BasicHttpParams myParams = new BasicHttpParams();

for (String key : params.keySet()) {

myParams.setParameter(key, params.get(key));

}

request.setParams(myParams);

}

}

public static HttpClient getHttpclient() {

return httpclient;

}

public static void setHttpclient(HttpClient httpclient) {

HttpClientUtil.httpclient = httpclient;

}

public static int getMaxTotal() {

return maxTotal;

}

public static void setMaxTotal(int maxTotal) {

HttpClientUtil.maxTotal = maxTotal;

}

public static int getMaxPerRoute() {

return maxPerRoute;

}

public static void setMaxPerRoute(int maxPerRoute) {

HttpClientUtil.maxPerRoute = maxPerRoute;

}

public static String getUserAgent() {

return userAgent;

}

public static void setUserAgent(String userAgent) {

HttpClientUtil.userAgent = userAgent;

}

}

【使用httpclient实现免费的google翻译api】相关文章:

探讨:使用httpClient在客户端与服务器端传输对象参数的详解

通过jxl.jar 读取、导出excel的实例代码

java hashtable实现代码

十种JAVA排序算法实例

java中servlet实现登录验证的方法

如何用Java实现啥夫曼编码

hadoop client与datanode的通信协议分析

使用java实现http多线程断点下载文件(二)

基于eclipse.ini内存设置的问题详解

Java调用DOS实现定时关机的实例

精品推荐
分类导航