笔者近期开发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";
// 百度翻译注册应用id
private 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);
// 调用翻译API
String 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();
}