Google翻訳APIは有料なので盗む方法を考えました。
1. HttpClient を使用してリクエスト http://translate.google.com を送信します。
2. 次に、Jsoupparse html を使用して、翻訳されたテキストを抽出します。
次のようにコードをコピーします。
/**
* Copyright (c) blackbear, Inc All Rights Reserved.
*/
パッケージ org.bb.util.i18n;
java.io.InputStreamをインポートします。
java.net.URLEncoderをインポートします。
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>翻訳ツール
※追記:Google翻訳より
* </pre>
*
* @作者キャティ
* @バージョン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 翻訳
*追記: ソース システムの決定は Google に任せてください。
* </pre>
*
* @paramテキスト
* @param target_lang ターゲット システム
* @戻る
* @throwsException
*/
public static String translation(final String text, Final String target_lang) throws Exception {
return translation(text, AUTO, target_lang);
}
/**
* <pre>Google 翻訳</pre>
*
* @paramテキスト
* @param src_lang ソース システム
* @param target_lang ターゲット システム
* @戻る
* @throwsException
*/
public static String translate(最終文字列 text, 最終文字列 src_lang, 最終文字列 target_lang)
例外をスローします {
入力ストリームは = null;
ドキュメント doc = null;
要素要素 = null;
試す {
// URL文字列を作成する
文字列 URL = MessageFormat.format(URL_TEMPLATE,
URLEncoder.encode(src_lang + "|" + target_lang, ENCODING),
URLEncoder.encode(text, ENCODING));
// 接続して HTML をダウンロード
= HttpClientUtil.downloadAsStream(url);
// JsoupでHTMLを解析する
doc = Jsoup.parse(is, ENCODING, "");
ele = doc.getElementById(ID_RESULTBOX);
文字列結果 = ele.text();
結果を返します。
} ついに {
IOUtils.closeQuietly(is);
= null;
ドキュメント = null;
ele = null;
}
}
/**
* <pre>Google 翻訳: 中国語-->繁体字中国語</pre>
*
* @paramテキスト
* @戻る
* @throwsException
*/
public static String cn2tw(final String text) throws Exception {
return translation(テキスト、中国、台湾);
}
/**
* <pre>Google 翻訳: 繁体字中国語-->中文</pre>
*
* @paramテキスト
* @戻る
* @throwsException
*/
public static String tw2cn(final String text) が例外をスローする {
return translation(テキスト、台湾、中国);
}
/**
* <pre>Google 翻訳: 英語-->繁体字中国語</pre>
*
* @paramテキスト
* @戻る
* @throwsException
*/
public static String en2tw(final String text) throws Exception {
return translation(テキスト、英語、台湾);
}
/**
* <pre>Google 翻訳: 繁体字中国語-->英語</pre>
*
* @paramテキスト
* @戻る
* @throwsException
*/
public static String tw2en(final String text) が例外をスローする {
return translation(テキスト、台湾、英語);
}
/**
* <pre>Google 翻訳: 日本語-->繁体字中国語</pre>
*
* @paramテキスト
* @戻る
* @throwsException
*/
public static String jp2tw(final String text) throws Exception {
return 翻訳(テキスト、日本、台湾);
}
/**
* <pre>Google 翻訳: 繁体字中国語-->日本語</pre>
*
* @paramテキスト
* @戻る
* @throwsException
*/
public static String tw2jp(final String text) throws Exception {
return 翻訳(テキスト、台湾、日本);
}
}
HttpClientUtil.java
次のようにコードをコピーします。
/**
* Copyright (c) Blackbear, Inc. All Rights Reserved.
*/
パッケージ org.bb.util.net.http;
インポートjava.io.BufferedInputStream;
java.io.ファイルをインポートします。
java.io.FileOutputStreamをインポートします。
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 をインポートします。
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
*
* @作者キャティ
※@バージョン1.0、2008/2/20作成
*/
パブリック クラス HttpClientUtil {
protected static ログ ログ = 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、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 = 新しい ThreadSafeClientConnManager(reg);
cm.setMaxTotal(maxTotal);
cm.setDefaultMaxPerRoute(maxPerRoute);
httpclient = 新しい DefaultHttpClient(cm);
}
}
/**
* <pre>次回は入力ストリームに戻ります</pre>
*
* @param URL
* @戻る
* @throwsException
*/
public static InputStream downloadAsStream(String url) throws Exception {
InputStream は = (InputStream) download(url, null, null, false);
リターンは;
}
/**
* <pre>ダウンロード後にファイルに保存</pre>
*
* @param URL
* @param保存ファイル
* @throwsException
*/
public static void download(String url, File saveFile) throws Exception {
ダウンロード(url、saveFile、null、false);
}
/**
* <pre>下</pre>
*
* @param URL
* @param保存ファイル
* @param パラメータ
* @param isPost
* @return saveFile==null の場合は inputstream に戻り、それ以外の場合は saveFile に戻ります。
* @throwsException
*/
public static Object download(final String url、final File saveFile、final 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(リクエスト);
エンティティ = 応答.getEntity();
エンティティ = 新しい BufferedHttpEntity(エンティティ);
// 結果を取得する
if (saveToFile) {// ディスクに保存
fos = 新しい FileOutputStream(saveFile);
IOUtils.copy(entity.getContent(), fos);
結果 = ファイルを保存;
} else { // 入力ストリームにワープします
結果 = 新しい BufferedInputStream(entity.getContent());
}
} catch (例外 e) {
エラー = e;
} ついに {
// 近い
IOUtils.closeQuietly(fos);
// クリア
リクエスト = null;
応答 = null;
エンティティ = null;
if (err != null) {
エラーをスローします。
}
結果を返します。
}
}
protected static void addHeaderAndParams(final HttpRequestBase request, Final Map<String, String> params) {
// デフォルトのヘッダーを追加します
request.addHeader("ユーザーエージェント", userAgent);
// パラメータを追加します
if (params != null) {
// マップ --> HttpParams
BasicHttpParams myParams = new BasicHttpParams();
for (文字列キー : params.keySet()) {
myParams.setParameter(key, params.get(key));
}
request.setParams(myParams);
}
}
public static HttpClient getHttpclient() {
httpクライアントを返します。
}
public static void setHttpclient(HttpClient httpclient) {
HttpClientUtil.httpclient = httpclient;
}
public static int getMaxTotal() {
maxTotal を返します。
}
public static void setMaxTotal(int maxTotal) {
HttpClientUtil.maxTotal = maxTotal;
}
public static int getMaxPerRoute() {
maxPerRoute を返します。
}
public static void setMaxPerRoute(int maxPerRoute) {
HttpClientUtil.maxPerRoute = maxPerRoute;
}
public static String getUserAgent() {
ユーザーエージェントを返します。
}
public static void setUserAgent(String userAgent) {
HttpClientUtil.userAgent = ユーザーエージェント;
}
}