Como es necesario cobrar la API de traducción de Google, pensé en una forma de robarla.
1. Utilice HttpClient para enviar una solicitud http://translate.google.com
2. Luego use Jsoupparse html para extraer el texto traducido.
Copie el código de código de la siguiente manera:
/**
* Copyright (c) blackbear, Inc. Todos los derechos reservados.
*/
paquete org.bb.util.i18n;
importar java.io.InputStream;
importar java.net.URLEncoder;
importar java.text.MessageFormat;
importar org.apache.commons.io.IOUtils;
importar org.bb.util.net.http.HttpClientUtil;
importar org.jsoup.Jsoup;
importar org.jsoup.nodes.Document;
importar org.jsoup.nodes.Element;
/**
* TraducirUtil
*
* <pre>Herramienta de traducción
*PD: a través del traductor de google
* </pre>
*
* @autor malicioso
* @versión 1.0, creada el 2/9/2011
*/
clase pública TranslateUtil {
Cadena final estática protegida URL_TEMPLATE = "http://translate.google.com/?langpair={0}&text={1}";
Cadena final estática protegida ID_RESULTBOX = "result_box";
Cadena final estática protegida CODIFICACIÓN = "UTF-8";
protected static final String AUTO = "auto" // Google autodetermina el sistema fuente
cadena final estática protegida TAIWAN = "zh-TW" // chino tradicional
Cadena final estática protegida CHINA = "zh-CN" // medio
protected static final String ENGLISH = "en" // Inglés
cadena final estática protegida JAPÓN = "ja" // día
/**
* <pre>traducido por Google
*PD: deja que Google determine el sistema fuente.
* </pre>
*
* texto @param
* @param target_lang sistema de destino
* @devolver
* @throwsException
*/
traducción de cadena estática pública (texto de cadena final, cadena final target_lang) arroja una excepción {
devolver traducir(texto, AUTO, target_lang);
}
/**
* <pre>traducido por Google</pre>
*
* texto @param
* @param src_lang sistema fuente
* @param target_lang sistema de destino
* @devolver
* @throwsException
*/
traducción de cadena estática pública (texto de cadena final, cadena final src_lang, cadena final target_lang)
lanza una excepción {
InputStream es = nulo;
Documento doc = nulo;
Elemento elemento = nulo;
intentar {
// crear cadena URL
URL de cadena = MessageFormat.format(URL_TEMPLATE,
URLEncoder.encode(src_lang + "|" + target_lang, CODIFICACIÓN),
URLEncoder.encode(texto, CODIFICACIÓN));
// conectar y descargar html
es = HttpClientUtil.downloadAsStream(url);
// analiza html por Jsoup
doc = Jsoup.parse(es, CODIFICACIÓN, "");
ele = doc.getElementById(ID_RESULTBOX);
Resultado de cadena = ele.text();
resultado de devolución;
} finalmente {
IOUtils.closeQuietly(es);
es = nulo;
documento = nulo;
ele = nulo;
}
}
/**
* <pre>Traducción de Google: chino-->chino tradicional</pre>
*
* texto @param
* @devolver
* @throwsException
*/
cadena estática pública cn2tw (texto de cadena final) lanza una excepción {
return traducir(texto, CHINA, TAIWÁN);
}
/**
* <pre>Traducción de Google: chino tradicional-->中文</pre>
*
* texto @param
* @devolver
* @throwsException
*/
La cadena estática pública tw2cn (texto de cadena final) arroja una excepción {
return traducir(texto, TAIWÁN, CHINA);
}
/**
* <pre>Traducción de Google: inglés-->chino tradicional</pre>
*
* texto @param
* @devolver
* @throwsException
*/
cadena estática pública en2tw (texto de cadena final) lanza una excepción {
return traducir(texto, INGLÉS, TAIWÁN);
}
/**
* <pre>Traducción de Google: chino tradicional-->inglés</pre>
*
* texto @param
* @devolver
* @throwsException
*/
cadena estática pública tw2en (texto de cadena final) lanza una excepción {
return traducir(texto, TAIWÁN, INGLÉS);
}
/**
* <pre>Traducción de Google: japonés-->chino tradicional</pre>
*
* texto @param
* @devolver
* @throwsException
*/
cadena estática pública jp2tw (texto de cadena final) lanza una excepción {
return traducir(texto, JAPÓN, TAIWÁN);
}
/**
* <pre>Traducción de Google: chino tradicional-->japonés</pre>
*
* texto @param
* @devolver
* @throwsException
*/
La cadena estática pública tw2jp (texto de cadena final) arroja una excepción {
return traducir(texto, TAIWÁN, JAPÓN);
}
}
HttpClientUtil.java
Copie el código de código de la siguiente manera:
/**
* Copyright (c) Blackbear, Inc. Todos los derechos reservados.
*/
paquete org.bb.util.net.http;
importar java.io.BufferedInputStream;
importar java.io.File;
importar java.io.FileOutputStream;
importar java.io.InputStream;
importar java.util.Map;
importar org.apache.commons.io.IOUtils;
importar org.apache.commons.logging.Log;
importar org.apache.commons.logging.LogFactory;
importar org.apache.http.HttpEntity;
importar org.apache.http.HttpResponse;
importar org.apache.http.client.HttpClient;
importar org.apache.http.client.methods.HttpGet;
importar org.apache.http.client.methods.HttpPost;
importar org.apache.http.client.methods.HttpRequestBase;
importar org.apache.http.conn.scheme.PlainSocketFactory;
importar org.apache.http.conn.scheme.Scheme;
importar org.apache.http.conn.scheme.SchemeRegistry;
importar org.apache.http.conn.ssl.SSLSocketFactory;
importar org.apache.http.entity.BufferedHttpEntity;
importar org.apache.http.impl.client.DefaultHttpClient;
importar org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
importar org.apache.http.params.BasicHttpParams;
/**
*PostUtil.java
*
* @autor malicioso
* @versión 1.0, creada el 20/2/2008
*/
clase pública HttpClientUtil {
Registro estático protegido log = LogFactory.getLog(HttpClientUtil.class);
HttpClient estático protegido httpclient = nulo;
protegido estático int maxTotal = 200;
estático protegido int maxPerRoute = 20;
cadena estática protegida userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, como Gecko) Chrome/16.0.912.77 Safari/535.7";
estático {
si (httpcliente == nulo) {
// ~~~~~~~~~~~~~~~~~~~~
// crear cliente http
// ~~~~~~~~~~~~~~~~~~~~
SchemeRegistry reg = nuevo SchemeRegistry();
reg.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));
reg.register(new Scheme("https", 443, SSLSocketFactory.getSocketFactory()));
ThreadSafeClientConnManager cm = nuevo ThreadSafeClientConnManager(reg);
cm.setMaxTotal(maxTotal);
cm.setDefaultMaxPerRoute(maxPerRoute);
httpclient = nuevo DefaultHttpClient(cm);
}
}
/**
* <pre>Volver a Inputstream la próxima vez</pre>
*
* URL @param
* @devolver
* @throwsException
*/
descarga de flujo de entrada estático públicoAsStream (URL de cadena) lanza una excepción {
InputStream es = (InputStream) descargar (url, nulo, nulo, falso);
el retorno es;
}
/**
* <pre>Guardar en archivo después de descargar</pre>
*
* URL @param
* @param guardararchivo
* @throwsException
*/
La descarga pública estática vacía (URL de cadena, archivo guardado) arroja una excepción {
descargar(url, saveFile, nulo, falso);
}
/**
* <pre>下</pre>
*
* URL @param
* @param guardararchivo
* @param parámetros
* @param es publicación
* @return Si saveFile==null regresa a inputstream, de lo contrario regresa a saveFile
* @throwsException
*/
Descarga pública de objetos estáticos (URL de cadena final, archivo guardado final, parámetros de mapa final <cadena, cadena>,
isPost booleano final) lanza una excepción {
booleano saveToFile = saveFile! = nulo;
// comprobar que el directorio existe ??
si (saveToFile && saveFile.getParentFile().exists() == false) {
saveFile.getParentFile().mkdirs();
}
Error de excepción = nulo;
Solicitud HttpRequestBase = nula;
Respuesta HttpResponse = nula;
entidad HttpEntity = nulo;
FileOutputStream fos = nulo;
Resultado del objeto = nulo;
intentar {
//crear solicitud
si (isPost) {
solicitud = nuevo HttpPost(url);
} demás {
solicitud = nuevo HttpGet(url);
}
// agregar encabezado y parámetros
addHeaderAndParams(solicitud, parámetros);
// conectar
respuesta = httpclient.execute(solicitud);
entidad = respuesta.getEntity();
entidad = nueva BufferedHttpEntity(entidad);
//obtener resultado
if (saveToFile) {// guardar en el disco
fos = nuevo FileOutputStream(saveFile);
IOUtils.copy(entidad.getContent(), fos);
resultado = guardararchivo;
} else { // deformar a inputstream
resultado = nuevo BufferedInputStream(entity.getContent());
}
} captura (Excepción e) {
errar = e;
} finalmente {
// cerca
IOUtils.closeQuietly(fos);
// claro
solicitud = nula;
respuesta = nula;
entidad = nulo;
si (errar! = nulo) {
tirar errar;
}
resultado de devolución;
}
}
addHeaderAndParams vacío estático protegido (solicitud HttpRequestBase final, parámetros finales Map<String, String>) {
// agregar encabezado predeterminado
request.addHeader ("Agente de usuario", agente de usuario);
// agregar parametros
si (parámetros! = nulo) {
// mapa --> HttpParams
BasicHttpParams myParams = nuevo BasicHttpParams();
para (clave de cadena: params.keySet()) {
myParams.setParameter(clave, params.get(clave));
}
request.setParams(misParams);
}
}
público estático HttpClient getHttpclient() {
devolver cliente http;
}
público estático vacío setHttpclient (HttpClient httpclient) {
HttpClientUtil.httpclient = httpclient;
}
público estático int getMaxTotal() {
devolver máximoTotal;
}
público estático vacío setMaxTotal(int maxTotal) {
HttpClientUtil.maxTotal = maxTotal;
}
público estático int getMaxPerRoute() {
devolver maxPerRoute;
}
público estático vacío setMaxPerRoute(int maxPerRoute) {
HttpClientUtil.maxPerRoute = maxPerRoute;
}
Cadena estática pública getUserAgent() {
devolver agente de usuario;
}
público estático vacío setUserAgent (String userAgent) {
HttpClientUtil.userAgent = usuarioAgent;
}
}