公司项目中需要用到在线翻译的功能,在网上找了个Google自己发布的API,不过这个API是使用Get提交实现的,所以继承了Get提交的2K容量的限制。公司要翻译的文章很多超过这个长度,所以不能够满足需求。于是,我又到网上找,怎么找也再没找到有合适的API,有的都是介绍Google的Get提交的API。
找了很久就是没找到Post提交的API或者介绍这种实现方式的例子。最后只好决定自己做一个。于是不断地找Google的翻译的应用,用抓包工具分析数据包,找Post提交应用。终于,功夫不负有心人,找到Google在线翻译是允许post提交的。好的,接下来就去实现了,根据已掌握的http知识把公司的需求实现了。先把它分享供有需要的Java人一起交流学习,如有不足请指正,有改善意见也尽可提出来,小弟会怀着感激之情虚心学习、改正。
现将我实现的在线翻译的例子列出,需要引入HttpClient4包,代码如下,附件里有HttpClient4包和源代码,有需要的可直接下载,只有577K。
/**
* http://ahomeeye.iteye.com/blog/841298
* @author ahomeeye
*/
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
public class GoogleTranslate {
private static HttpPost httppost;
private static HttpResponse response;
private static final DefaultHttpClient httpclient = new DefaultHttpClient();
/*
* @param text 翻译原文
* @param lanFrom 源语言
* @param lanTo 目标语言
* @return 翻译后的字符串
*/
public static String translate(String text, String lanFrom, String lanTo) {
List<NameValuePair> qparams = new ArrayList<NameValuePair>();
qparams.add(new BasicNameValuePair("hl", "en"));
qparams.add(new BasicNameValuePair("ie", "UTF-8"));
qparams.add(new BasicNameValuePair("sl", lanFrom));
qparams.add(new BasicNameValuePair("text", text));
qparams.add(new BasicNameValuePair("tl", lanTo));
//HttpClient提交post请求
httppost = new HttpPost("http://translate.google.com/translate_t#");
String responseBody = "";
String content = "";
try {
//将参数封装到post数据包中,
httppost.setEntity(new UrlEncodedFormEntity(qparams, HTTP.UTF_8));
response = httpclient.execute(httppost);
responseBody = EntityUtils.toString(response.getEntity());
//过滤出所需翻译后的内容
int tmp1 = responseBody.indexOf("result_box");
int tmp2 = responseBody.indexOf(">", tmp1);
int tmp3 = responseBody.indexOf("</div>", tmp2);
content = responseBody.substring(tmp2 + 1, tmp3).replaceAll("<br>", "\n").replaceAll("<[^>]*>", "");//替换换行符和其他网页标签
} catch (Exception e) {
return content;
} finally {
httppost.abort();
}
return content;
}
/*
* 重载上面的translate()方法,实现文本数组的翻译
*/
public static String[] translate(String[] text, String lanFrom, String lanTo) {
if (text == null || text.length < 1) {
return null;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < text.length; i++) {
if (i < text.length - 1) {
sb.append(text[i]).append("BBaaBB");
} else {
sb.append(text[i]);
}
}
return translate(sb.toString(), lanFrom, lanTo).split("BBaaBB");
}
public static void main(String[] args) {
String text = "我是一个中国人。";
String[] arrayText = {"我来自广东梅州。", "我爱你,梅州!"};
//这里实现多国语言间的翻译,大约支持59种语言,语言代码这里不再列出,有需要可到网上搜索
//语言字符串为国家或地区语言代码,一般为两位,繁体中文为:zh-TW 法语为:fr
String tranText = GoogleTranslate.translate(text, "zh-CN", "en");
String[] tranArray = GoogleTranslate.translate(arrayText, "zh-CN", "en");
System.out.println("tranText=" + tranText);
for (int i = 0; i < tranArray.length; i++) {
System.out.println("tranArray[" + i + "]=" + tranArray[i]);
}
}
}
运行结果:
tranText=I am a Chinese.
tranArray[0]=I come from Meizhou, Guangdong Province.
tranArray[1]=I love you, Meizhou!
代码很简单,干净简洁,很清晰,很容易懂的,重要的地方做了必要注释了,这里就不多说了。大家试运行一下,然后稍微看一下代码就能看懂的。如有不懂,给我留言。
今天做了修改,主要是过滤翻译内容那里发现有点错,还有就是改进了数组翻译的函数,减少了网络访问量,可以明显提高翻译速度。昨天在百度输入“google翻译 文章长度”一不小心把自己的这篇文章给搜出来了,一看竟然上了主题帖,而且排在第一位,感到欣慰。今天在google用同样的关键字试搜一下,排在前两位的都是我的这篇文章,第一条是我的原文地址,第二条是主题帖地址,看来google还是比较尊重个人的。令我感到欣慰又感慨的是,javaeye在把我的文章列为主题帖的同时却忘了把我的这篇文章加入主题帖列表。2010-12-27
分享到:
相关推荐
google翻译API Get/Post 调用无翻译内容长度限制 google翻译API Get/Post 调用无翻译内容长度限制 google翻译API Get/Post 调用无翻译内容长度限制
易语言post提交网页数据,易语言post提交网页数据
post提交工具增强版 post提交工具增强版 post提交工具增强版 post提交工具增强版
查了很多资料都说,get方法的参数是有限制的,post方法的参数的长度是无限制,这也是post相比get的优势一直。 在ajax中使用post方法,用常规的参数格式:param1=a1¶m2=a2 ,当参数长度过长时,依然提交不成功。...
google翻译(post版)java源码
易语言post提交示例,易语言post提交示例易语言post提交示例易语言post提交示例易语言post提交示例
C#用POST方式发送数据到云服务器的时候,传输的文件大小会受到限制,文档给出了解决方法。亲测可行
之前寻找post工具,没有找到特别符合要求的(测试Restful的WCF服务需要提交Json或者Xml),索性自己写一个,好的工具大家分享。 自己写的Post提交工具,用于编写接受post参数的页面调试使用。工具需要.net环境,共...
C# post方式提交Form表单。 C# post方式提交Form表单,可以支持带参数传入,供大家学习参考。 C# post提交表单。
输入相关的英语单词可以进行post网络请求在线进行翻译,支持英-汉发言和汉-英翻译等喜欢的可以下载体验一下,有问题请联系我谢谢
http post 提交工具,可以查看返回结果
google翻译(post版)PHP源码(Zend plugin) 采用POST方式,不限字节大小 采用工厂模式,效率高 TranslateAPI.php
C# 以Post方式提交数据 C# 以Post方式提交数据
POST提交数据加密使用HttpWatch获取的数据是加密后的 用户名user1 密码:123456
post提交测试工具
c# Post提交图片
接口开发:中httppost 提交方式的详细描述
以前在面试的时候经常遇到问关于跨域的事儿,所以自己对跨域有一定的概念性了解,知道什么是跨域以及解决跨域的方法,但是具体实际从来没有操作过,直到最近在公司项目中,遇到了一个需要使iframe跨域进行POST提交的...
asp.net网页post提交的详细介绍。 asp.net网页post提交的详细介绍。