구글 번역 API는 과금을 해야 하기 때문에 이를 훔칠 수 있는 방법을 생각해 냈습니다.
1. HttpClient를 사용하여 http://translate.google.com 요청을 보냅니다.
2. 그런 다음 Jsoupparse html을 사용하여 번역된 텍스트를 추출합니다.
다음과 같이 코드 코드를 복사합니다.
/**
* 저작권 (c) blackbear, Inc All Rights Reserved.
*/
패키지 org.bb.util.i18n;
import java.io.InputStream;
java.net.URLEncoder 가져오기;
import java.text.MessageFormat;
org.apache.commons.io.IOUtils 가져오기;
org.bb.util.net.http.HttpClientUtil 가져오기;
org.jsoup.Jsoup 가져오기;
org.jsoup.nodes.Document 가져오기;
org.jsoup.nodes.Element 가져오기;
/**
* 번역유틸
*
* <pre>번역 도구
*PS: Google 번역을 통해
* </pre>
*
* @author 캐티
* @version 1.0, 생성일: 2011/9/2
*/
공개 클래스 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 텍스트
* @param target_lang 타겟 시스템
* @반품
* @throwsException
*/
공개 정적 문자열 번역(최종 문자열 텍스트, 최종 문자열 target_lang)에서 예외가 발생합니다.
return 번역(텍스트, AUTO, target_lang);
}
/**
* <pre>Google 번역</pre>
*
* @param 텍스트
* @param src_lang 소스 시스템
* @param target_lang 타겟 시스템
* @반품
* @throwsException
*/
공개 정적 문자열 변환(최종 문자열 텍스트, 최종 문자열 src_lang, 최종 문자열 target_lang)
예외가 발생합니다. {
InputStream은 = null입니다.
문서 문서 = null;
요소 요소 = null;
노력하다 {
// URL 문자열 생성
문자열 url = MessageFormat.format(URL_TEMPLATE,
URLEncoder.encode(src_lang + "|" + target_lang, ENCODING),
URLEncoder.encode(텍스트, ENCODING));
// html 연결 및 다운로드
is = HttpClientUtil.downloadAsStream(url);
// Jsoup로 html을 구문 분석합니다.
doc = Jsoup.parse(is, ENCODING, "");
ele = doc.getElementById(ID_RESULTBOX);
문자열 결과 = ele.text();
결과 반환;
} 마지막으로 {
IOUtils.closeQuietly(is);
= null;
문서 = null;
엘레 = null;
}
}
/**
* <pre>Google 번역: 중국어-->중국어 번체</pre>
*
* @param 텍스트
* @반품
* @throwsException
*/
public static String cn2tw(최종 문자열 텍스트)에서 예외가 발생합니다.
return 번역(텍스트, 중국, 대만);
}
/**
* <pre>Google 번역: 중국어 번체-->中文</pre>
*
* @param 텍스트
* @반품
* @throwsException
*/
공개 정적 문자열 tw2cn(최종 문자열 텍스트)에서 예외 발생 {
return 번역(텍스트, 대만, 중국);
}
/**
* <pre>Google 번역: 영어-->중국어 번체</pre>
*
* @param 텍스트
* @반품
* @throwsException
*/
public static String en2tw(최종 문자열 텍스트)에서 예외가 발생합니다.
return 번역(텍스트, 영어, 대만);
}
/**
* <pre>Google 번역: 중국어 번체-->영어</pre>
*
* @param 텍스트
* @반품
* @throwsException
*/
public static String tw2en(최종 문자열 텍스트)에서 예외가 발생합니다.
return 번역(텍스트, 대만, 영어);
}
/**
* <pre>Google 번역: 일본어-->중국어 번체</pre>
*
* @param 텍스트
* @반품
* @throwsException
*/
public static String jp2tw(최종 문자열 텍스트)에서 예외가 발생합니다.
return 번역(텍스트, 일본, 대만);
}
/**
* <pre>Google 번역: 중국어 번체-->일본어</pre>
*
* @param 텍스트
* @반품
* @throwsException
*/
public static String tw2jp(최종 문자열 텍스트)에서 예외가 발생합니다.
return 번역(텍스트, 대만, 일본);
}
}
HttpClientUtil.java
다음과 같이 코드 코드를 복사합니다.
/**
* 저작권 (c) Blackbear, Inc All Rights Reserved.
*/
패키지 org.bb.util.net.http;
import java.io.BufferedInputStream;
java.io.파일 가져오기;
import java.io.FileOutputStream;
import java.io.InputStream;
java.util.Map 가져오기;
org.apache.commons.io.IOUtils 가져오기;
org.apache.commons.logging.Log 가져오기;
org.apache.commons.logging.LogFactory 가져오기;
org.apache.http.HttpEntity 가져오기;
org.apache.http.HttpResponse 가져오기;
org.apache.http.client.HttpClient 가져오기;
org.apache.http.client.methods.HttpGet 가져오기;
org.apache.http.client.methods.HttpPost 가져오기;
org.apache.http.client.methods.HttpRequestBase 가져오기;
import org.apache.http.conn.scheme.PlainSocketFactory;
org.apache.http.conn.scheme.Scheme 가져오기;
org.apache.http.conn.scheme.SchemeRegistry 가져오기;
org.apache.http.conn.ssl.SSLSocketFactory 가져오기;
org.apache.http.entity.BufferedHttpEntity 가져오기;
org.apache.http.impl.client.DefaultHttpClient 가져오기;
org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager 가져오기;
org.apache.http.params.BasicHttpParams 가져오기;
/**
*PostUtil.java
*
* @author 캐티
* @version 1.0, 2008년 2월 20일 작성
*/
공개 클래스 HttpClientUtil {
protected static Log log = LogFactory.getLog(HttpClientUtil.class);
보호된 정적 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";
정적 {
if (httpclient == null) {
// ~~~~~~~~~~~~~~~~~~~~~
// http클라이언트 생성
// ~~~~~~~~~~~~~~~~~~~~~
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>다음에 입력스트림으로 돌아갑니다</pre>
*
* @param URL
* @반품
* @throwsException
*/
공개 정적 InputStream downloadAsStream(String url)에서 예외가 발생합니다.
InputStream은 = (InputStream) download(url, null, null, false)입니다.
반품은;
}
/**
* <pre>다운로드 후 파일에 저장</pre>
*
* @param URL
* @param saveFile
* @throwsException
*/
public static void download(String url, File saveFile)에서 예외가 발생합니다.
다운로드(url, saveFile, null, false);
}
/**
* <pre>아래</pre>
*
* @param URL
* @param saveFile
* @param 매개변수
* @param isPost
* @return saveFile==null이 입력 스트림으로 반환되면, 그렇지 않으면 saveFile로 반환됩니다.
* @throwsException
*/
공개 정적 객체 다운로드(최종 문자열 URL, 최종 파일 saveFile, 최종 Map<String, String> 매개변수,
최종 부울 isPost) 예외가 발생합니다.
부울 saveToFile = saveFile != null;
// 디렉토리가 있는지 확인 ??
if (saveToFile && saveFile.getParentFile().exists() == false) {
saveFile.getParentFile().mkdirs();
}
예외 오류 = null;
HttpRequestBase 요청 = null;
HttpResponse 응답 = null;
HttpEntity 엔터티 = null;
FileOutputStream fos = null;
개체 결과 = null;
노력하다 {
//요청 생성
if (isPost) {
요청 = 새로운 HttpPost(url);
} 또 다른 {
요청 = 새로운 HttpGet(url);
}
// 헤더와 매개변수 추가
addHeaderAndParams(요청, 매개변수);
// 연결하다
응답 = httpclient.execute(요청);
엔터티 = response.getEntity();
엔터티 = 새로운 BufferedHttpEntity(엔티티);
// 결과 얻기
if (saveToFile) {// 디스크에 저장
fos = new FileOutputStream(saveFile);
IOUtils.copy(entity.getContent(), fos);
결과=저장파일;
} else { // 입력스트림으로 워프
결과 = new BufferedInputStream(entity.getContent());
}
} 잡기(예외 e) {
오류 = e;
} 마지막으로 {
// 닫다
IOUtils.closeQuietly(fos);
// 분명한
요청 = null;
응답 = null;
엔터티 = null;
if (err != null) {
실수를 던져;
}
결과 반환;
}
}
protected static void addHeaderAndParams(최종 HttpRequestBase 요청, 최종 Map<String, String> params) {
// 기본 헤더 추가
request.addHeader("User-Agent", userAgent);
// 매개변수 추가
if (params != null) {
// 지도 --> HttpParams
BasicHttpParams myParams = new BasicHttpParams();
for (문자열 키 : params.keySet()) {
myParams.setParameter(key, params.get(key));
}
request.setParams(myParams);
}
}
공개 정적 HttpClient getHttpclient() {
http클라이언트를 반환합니다.
}
공개 정적 무효 setHttpclient(HttpClient httpclient) {
HttpClientUtil.httpclient = http클라이언트;
}
공개 정적 int getMaxTotal() {
maxTotal을 반환합니다.
}
공개 정적 무효 setMaxTotal(int maxTotal) {
HttpClientUtil.maxTotal = maxTotal;
}
공개 정적 int getMaxPerRoute() {
maxPerRoute를 반환합니다.
}
공개 정적 무효 setMaxPerRoute(int maxPerRoute) {
HttpClientUtil.maxPerRoute = maxPerRoute;
}
공개 정적 문자열 getUserAgent() {
userAgent를 반환합니다.
}
공개 정적 무효 setUserAgent(String userAgent) {
HttpClientUtil.userAgent = userAgent;
}
}