笔者近期开发eclipse插件时,需要用到中译英的功能,所以就研究了一下百度翻译. 百度翻译开放平台为广大开发者提供了开发服务的平台,但是并不是免费的.百度翻译是按字符计费的,每个月200万字符内是免费的, 超过200万字符之后,以单价49元/百万字符收费.

1. 注册开发者账号

使用百度翻译API之前,需要自助注册百度-翻译开放平台的API, 注册只需要使用手机号注册即可.笔者注册的是个人开发者, 注册完之后可以在开发者信息页面查看百度翻译平台为你分配的个人账号及秘钥.

  • 注册地址: http://api.fanyi.baidu.com/api/trans/product/apiapply
  • 开发者信息: http://api.fanyi.baidu.com/api/trans/product/desktop?req=developer
  • 通用API文档: http://api.fanyi.baidu.com/api/trans/product/apidoc#joinFile

2. API 简介

2.1 API 地址

百度翻译API 提供了Http 或Https 地址, 可以通过GET 或 POST 方式进行访问, 其中https 使用的是非强制证书方式.

  • http地址: http://api.fanyi.baidu.com/api/trans/vip/translate
  • https地址: https://fanyi-api.baidu.com/api/trans/vip/translate

2.2 请求参数

百度翻译请求参数拼接方式为普通get请求参数拼接方式.但是需要注意的是,参数q必须是UTF8编码,否则翻译会报错.而且发送http请求之前需要做URL 编码.

字段 描述
q 请求翻译原文,必须是UTF-8编码,否则报错
from 翻译原文语种
to 翻译目标语种
appid 开发平台注册APPID
salt 随机数
sign 数字签名, md5(appid+q+salt+秘钥)

2.3 响应参数

当翻译报错时,会返回error_code 和 error_msg 字段; 当翻译正确时,返回正确的翻译内容.

字段 描述
error_code 错误编码,当翻译报错时有值
error_msg 错误原因, 当翻译报错时有值
from 翻译原文语种
to 翻译目标语种
trans_result 翻译列表, 数组类型
src 原文
dst 译文

3. Java Demo

笔者使用Java 创建的Maven 项目, 项目源码地址: https://download.csdn.net/download/zongf0504/10835043

3.1 核心工具类

核心类为BDTransApiUtil, 其中依赖的HttpUtil 可以自定义实现.

import java.util.List;
import org.apache.commons.codec.digest.DigestUtils;
import org.zongf.learn.baidu.translate.vo.BDTransRequest;
import org.zongf.learn.baidu.translate.vo.BDTransResponse;
import org.zongf.learn.baidu.translate.vo.BDTransResult;
import com.alibaba.fastjson.JSONObject;/*** 百度翻译工具类* @ClassName: BDTransApiUtil.java* @author zongf* @date 2018年12月7日-上午11:42:26*/
public class BDTransApiUtil {// 百度翻译地址private static final String TRANS_API_HOST = "https://api.fanyi.baidu.com/api/trans/vip/translate";// 百度翻译注册应用idprivate static final String APPID = "xxxxx";// 百度翻译注册秘钥private static final String SECURITYKEY = "xxxxx";/*** @Description 中文翻译成中文* @param chineseQuery 中文* @return 英文* @author zongf* @date 2018年12月7日-下午1:35:31*/public static String chinese2English(String chineseQuery){// 随机数long salt = System.currentTimeMillis();// 签名String src = APPID + chineseQuery + salt + SECURITYKEY; // 加密前的原文String sign = DigestUtils.md5Hex(src);// 构造请求参数BDTransRequest request = new BDTransRequest();request.setFrom("zh");request.setTo("en");request.setAppid(APPID);request.setQ(chineseQuery);request.setSalt("" + salt);request.setSign(sign);// 调用翻译APIString result = HttpUtil.get(TRANS_API_HOST, request.toMap());// 解析响应结果BDTransResponse response = JSONObject.parseObject(result, BDTransResponse.class);// 判断错误码if(response.getError_code() != null){return "翻译报错-错误码:" + response.getError_code() + ",错误原因:" + response.getError_msg();}// 返回结果List<BDTransResult> transResults = response.getTrans_result();if(null != transResults && transResults.size() > 0){return transResults.get(0).getDst();}return null;}}

3.2 请求响应类

笔者将百度翻译的请求响应都封装成java 对象, 使用JSONObject 进行解析, 这样便于操作.

public class BDTransRequest {// 翻译源语种, 默认为中文private String from = "zh";// 目标语种, 默认为英文private String to = "en";// 百度翻译平台注册idprivate String appid;// 随机数private String salt;// 翻译原文, UTF-8编码private String q;// 数字签名=md5(appid+q+salt+密钥)private String sign;public Map<String, String> toMap(){Map<String, String> map = new HashMap<String, String>();map.put("q", this.q);map.put("sign", this.sign);map.put("appid", this.appid);map.put("from", this.from);map.put("to", this.to);map.put("salt", this.salt);return map;}// 省略 setter/getter 方法
}
public class BDTransResponse {// 原文语种private String from;// 目标语种private String to;// 翻译结果private List<BDTransResult> trans_result;// 错误编码, 当报错时才有值private String error_code;// 错误信息, 当报错时才有值private String error_msg;// 省略setter/getter...
}
public class BDTransResult {// 原文private String src;// 翻译private String dst;// 省略setter/getter...
}

3.3 http 工具类

http 工具类主要是为了发送http get 请求, 可以替换为自己的http 工具类.

import java.io.BufferedReader;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Map;import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;/*** http 工具类* @ClassName: HttpUtil.java* @author zongf* @date 2018年12月7日-下午1:37:03*/
public class HttpUtil {// 网络代理ipprivate static final String PROXY_HOST = "xxx.xxx.xxx.xxx";// 网络代理端口号private static final Integer PROXY_PORT = 8080;// 网络超时时间protected static final int SOCKET_TIMEOUT = 10000; // 10S// http 请求方式protected static final String HTTP_METHOD = "GET";// x509 证书private static TrustManager myX509TrustManager = new X509TrustManager() {public X509Certificate[] getAcceptedIssuers() {return null;}public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}};/*** @Description http 发送get 请求* @param host 请求地址* @param params 请求参数* @return 响应结果* @author zongf* @date 2018年12月7日-下午1:42:26*/public static String get(String host, Map<String, String> params) {try {// 设置SSLContextSSLContext sslcontext = SSLContext.getInstance("TLS");sslcontext.init(null, new TrustManager[] { myX509TrustManager }, null);String uri = connectUrlAndParams(host, params);HttpURLConnection conn = (HttpURLConnection) openConnection(uri);if (conn instanceof HttpsURLConnection) {((HttpsURLConnection) conn).setSSLSocketFactory(sslcontext.getSocketFactory());}conn.setConnectTimeout(SOCKET_TIMEOUT); // 设置相应超时conn.setRequestMethod("GET"); // 设置请求方式int statusCode = conn.getResponseCode();if (statusCode != HttpURLConnection.HTTP_OK) {System.out.println("Http错误码:" + statusCode);}// 读取服务器的数据InputStream is = conn.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));StringBuilder builder = new StringBuilder();String line = null;while ((line = br.readLine()) != null) {builder.append(line);}String text = builder.toString();close(br); // 关闭数据流close(is); // 关闭数据流conn.disconnect(); // 断开连接return text;} catch ( Exception e) {e.printStackTrace();}return null;}/*** @Description 获取* @param url* @return* @throws IOException* @author zongf* @date 2018年12月7日-下午1:33:27*/private static URLConnection openConnection(String uri) throws IOException {URLConnection connection;URL url = new URL(uri); // 创建URL对象if (PROXY_HOST != null && PROXY_PORT != null) {Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(PROXY_HOST, PROXY_PORT));connection = url.openConnection(proxy);} else {connection = url.openConnection();}return connection;}/*** @Description 拼接url和请求参数* @param url 请求地址* @param params 请求参数* @return String* @author zongf* @date 2018年12月7日-下午1:43:12*/public static String connectUrlAndParams(String url, Map<String, String> params) {if (params == null) {return url;}StringBuilder builder = new StringBuilder(url);if (url.contains("?")) {builder.append("&");} else {builder.append("?");}int i = 0;for (String key : params.keySet()) {String value = params.get(key);if (value == null) { // 过滤空的keycontinue;}if (i != 0) {builder.append('&');}builder.append(key);builder.append('=');builder.append(encode(value));i++;}return builder.toString();}/*** @Description 对输入的字符串进行URL编码, 即转换为%20这种形式* @param input 原文* @return URL编码. 如果编码失败, 则返回原文* @author zongf* @date 2018年12月7日-下午1:28:28*/public static String encode(String input) {if (input == null) {return "";}try {return URLEncoder.encode(input, "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return input;}/*** @Description 关闭流* @param closeable* @author zongf* @date 2018年12月7日-下午1:28:08*/private static void close(Closeable closeable) {if (closeable != null) {try {closeable.close();} catch (IOException e) {e.printStackTrace();}}}
}

3.4 pom 核心依赖

demo 主要依赖于apache 的加解密工具包, 和阿里巴巴的json 工具包.

<dependencies><!-- 提供单元测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- 提供json 解析工具 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.54</version></dependency><!-- 提供md5 加密工具 --><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.11</version></dependency></dependencies>

4. 测试

写成静态工具类之后,直接通过类名.方法名调用即可.

public class BDTransUtilTest {@Testpublic void test() {String result = BDTransApiUtil.chinese2English("你好");System.out.println(result); // 输出: hello}}

由于笔者是在开发eclipse插件时用到了百度翻译, 在windows平台下,eclipse启动时默认jvm 编码为GBK ,也就是说eclipse中表单中输入的字符串都是GBK编码的,而GBK编码又不能转化为UTF8编码,因此需要修改eclipse的启动参数. 编辑eclipse.ini 文件, 添加如下配置:

-Dfile.encoding=UTF-8

Java 使用百度翻译-通用翻译API相关推荐

  1. Java调用百度OCR文字识别API实现图片文字识别软件

    java_baidu_ocr Java调用百度OCR文字识别API实现图片文字识别软件 这是一款小巧方便,强大的文字识别软件,由Java编写,配上了窗口界面 调用了百度ocr文字识别API 识别精度高 ...

  2. Java调用百度AI开放平台API

    百度AI开放平台 百度AI开放平台是全球领先的人工智能服务平台,面向开发者及企业开放120多项全球领先的AI能力和软硬一体组件,并提供 EasyDL定制化训练平台.对话系统开发平台UNIT.自定义模板 ...

  3. java ocr api_Java调用百度OCR文字识别API实现图片文字识别软件

    Java调用百度OCR文字识别API实现图片文字识别软件 原创isinple 发布于2019-01-06 13:35:59 阅读数 1296 收藏 展开 java_baidu_ocr Java调用百度 ...

  4. 百度翻译 API 的申请 与 百度通用翻译 API 的接入

    百度翻译 API 的申请 与 百度通用翻译 API 的接入 申请 进入百度翻译开放平台,选择 立刻使用. 选择我的服务,开通 通用翻译,填信息后秒过. 建议 实名认证,提高免费额度. 通过后,可以在开 ...

  5. java调用百度翻译_Java调用百度API实现翻译-Go语言中文社区

    下面是Java调用百度API实现翻译的具体步骤: 一.在写代码之前先在在百度翻译平台中,申请APP_ID 申请地址申请的详见点击打开链接 申请之后,会得到APP_ID和SECURITY_KEY 二.j ...

  6. 百度通用翻译api在微信小程序中的使用

    关于百度通用翻译api,详细的信息可以参考通用翻译API技术文档 var q = 'count' var from = 'en'var to = 'zh'//注册获得appid和密匙var appid ...

  7. Python调用百度通用翻译api

    Python调用百度通用翻译api 首先 首先 首先需要先去百度翻译api官网注册成为开发者,然后申领一下通用翻译的appid和密钥. 附上代码,默认为源语言自动识别,效果感觉不是太好,目标语言默认为 ...

  8. python 翻译模块 翻译API使用(百度、有道、谷歌)

    1.翻译模块.api使用分析 1.translate库:使用简单,但是有次数限制,翻译的准确性中等: 2.百度api(推荐使用): 代码简单,有模块,但是需要注册,获取key值,翻译的准确性中下: 3 ...

  9. java使用百度翻译sdk制作pdf翻译程序

    演示地址java使用百度翻译sdk制作pdf翻译程序 目录结构如下 需要自己注册百度翻译api jar包下载pdfbox fanbean.java package c;import java.util ...

  10. java调用百度翻译

    目录 一.注册 二.测试 1.参考文档 2.下载代码 3.参考代码 一.注册 打开百度翻译开放平台 http://api.fanyi.baidu.com/ 注册账号 开通通用翻译免费版服务,获取APP ...

最新文章

  1. 《当程序员的那些狗日日子》(三十三)昙花一现
  2. Dockerfile里的VOLUMES关键字
  3. Spring的@Scheduled注解实现定时任务
  4. leapmotion手势交互引擎
  5. Android学习路线(适合学生)
  6. 计算机桌面变小了是怎么回事啊,电脑桌面整体变小了要怎么调回来的
  7. lzg_ad:XPE系统管理工具组件
  8. 保龄球计分程序java_保龄球计分程序
  9. 写一函数,将两个字符串中的元音字母复制到另一个字符串,然后输出。
  10. 编写.bat执行jar包
  11. Python 安装theano tensorflow keras 教程与pip安装失败解决方法
  12. 微信小程序渐变色按钮,好看的小程序按钮样式
  13. Hexo图片外链生成专用文章
  14. 将qlv类型的视频转换mp4格式的最新做法
  15. 【Opencv】Python+openCV实现全景图拼接(左右两张图片拼接成一张全景图)
  16. js将页面转成PDF文档
  17. https网站打不开如何解决
  18. 用矩阵表示图形旋转缩放变换
  19. 拉起Docker容器初始化数据源时,报:org.postgresql.util.PSQLException: The connection attempt failed. 的解决办法
  20. mac使用迅雷下载资源

热门文章

  1. 软件开发版本号命名规则
  2. 适合程序员的简历模板
  3. VS2015安装教程
  4. 5G~ SON和MDT
  5. 近世代数--陪集--拉格朗日定理|G|=|H|·[G:H],传递性[G:H][H:K]=[G:K]
  6. 10个Python爬虫入门实例
  7. 查看计算机桌面隐藏文件夹,电脑怎么查看隐藏文件(隐藏文件夹显示方法)
  8. 移动手机组态软件UI设计思路探讨
  9. Java基础练习题——查找整数
  10. Cisco思科交换机路由器命令快速入门