使用httpclient实现免费的google翻译api_java

由於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;
 }
}

时间: 2024-11-28 23:28:12

使用httpclient实现免费的google翻译api_java的相关文章

万网英文网站挑战GOOGLE翻译

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 随着国际经济一体化,中国奥运会的即将举办,不仅仅让国外更加了解了中国的国情,更是中国的企业走向国际的大好时机,大的企业可以通过到国外考查,在国外建分厂来发展海外的市场,而那些具有中国特色的中小型企业要想快速发展也只能是"与狼共舞",走国际化的道路,那应该怎么办呢?这时候您肯定想到了利用无国界的网络世界---自己的门户网站来

Google翻译接口(PHP API)

/* Google翻译PHP接口  * 官成文 2009-03-28  * http://blog.csdn.net/aprin/  * 注意:如果翻译文本为UTF-8编码,则要删去mb_convert_encoding函数  */ class Google_API_translator {  public $url = "http://translate.google.com/translate_t"; public $text = "";//翻译文本 publi

Google翻译API(B/S调用和C/S调用)

浏览器调用: <html> <head> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript"> <!-- google.load("language", "1"); function

D1net阅闻:Google搜索没回来,Google翻译App正式在中国上线了

Google搜索没回来,Google翻译App正式在中国上线了 3月29日,Google公司宣布旗下Google翻译App正式面向中国用户发布,这意味着,国内用户可以直接在手机上使用这项服务了. Dropbox获6亿美元贷款额度,或年底IPO 云存储服务提供商Dropbox日前获得了6家银行提供的6亿美元信贷额度.知情人士称,以摩根大通为首的6家银行已经承诺为Dropbox提供6亿美元的贷款额度,预计于下周一正式签署协议.分析人士称,由于Dropbox即将于今年进行IPO(首次公开招股),此次获

Google翻译野心大 欲将世界信息汇于一处

近年来,谷歌翻译的出现给人们带来了无数的便利和希望,让不同种族和国家的人沟通起来变得简单,我们也有理由相信,在未来的日子里,谷歌翻译一定会带给我们新的惊喜. "生鱼片带着它的愿望,用Google搜索绿洋葱!"这语句不通的话是Google创始人之一Sergey Brin使用市面上的网络翻译服务翻译一封韩国粉丝邮件中的一句话,时间是2004年.这让Sergey认为Google在这方面可以做得更好,由此Google也开始酝酿Google翻译项目. 截止到今年4月,已满6岁的Google翻译已

Google 翻译API Demo

接上篇 Google翻译API(B/S调用和C/S调用)      上篇里提到的接口调用方法是get方式,这样有个问题,每次请求翻译的内容不能超过url允许的长度.需要改成post方式才行,但是google没有提供post方式的API请求,怎么办呢?在通过网上一番资料的查找,在一位哥们的博客里看到了解决方案,不过他用的是java版的,对应post地址和参数,写出了.net版的.加上朗读的功能,程序界面如下: /// <summary> /// Post方式获取翻译 /// </summa

ruby TK版本的google翻译机

  过去写的那个调用google翻译的翻译脚本,一直在用.那个版本只能处理单个单词,如果要翻译一行或者一段语句,尽管稍微修改下就可以,但失去了我想要的便利性.今天看了看TK,顺手写了个GUI版本的,采用一次请求一个线程,倒是便捷不少.在windows上,你需要到这里下载安装ActiveTcl才可以运行. 代码如下: require 'net/http' require 'tk' require 'logger'#设置代理$proxy_addr='x.x.x.x' $proxy_port='80'

Google翻译助手 帮你无障碍网上冲浪

     上网的人一般都会使用搜索引擎来辅助自己浏览网页,查询信息等.而强大的搜索引擎也同样会给大家的上网冲浪带来极大的便利.使用搜索引擎时,语言的作用不言而喻!由于各类原因,很多权威的资讯为国外的网站,而且自己的外语水平又不是很高该怎么办?一款好的翻译辅助软件会是您的得力助手.向您推荐: Google翻译助手.Google的搜索页面 (图1)      作为目前比较主流的两大搜索引擎的google,虽然已经提供了细化语言的分类搜索查询,效果又如何呢?关键字为NBA的Google的搜索页面 (图

Google翻译惹上“台独” 将台湾与中国并立

有用户爆料称Google翻译工具"汉译英"将一普通成语翻译成(Taiwanindependence),而去年网上就曾流传Google翻译涉嫌辱华消息. 在Google网站的自动翻译工具中,选择中译英时,输入"物极必反"出现翻译结果为:(Taiwanindependence):输入"中国台湾"时,出现翻译结果:中国和台湾(ChinaandTaiwan):而输入"中国香港"时候,翻译结果则为正常结果HongKong,China.