官方api文档:http://api.fanyi.baidu.com/api/trans/product/apidoc

springboot demo地址:https://github.com/Blankwhiter/translate

第一步:

注册百度账号(自行注册)

第二步

申请百度翻译api ,获得appid以及securityKey

申请教程:https://jingyan.baidu.com/article/3f16e00305bb552591c10304.html

第三步

编写请求工具类(HttpUtil),这里使用Apache Jakarta Common 下的httpclient

Httpclient maven地址:http://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient

以下是请求工具类 HttpUtil code:


import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.util.StringUtils;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;/*** 请求工具类*/
public class HttpUtil {/***  get 请求* @param url* @return* @throws IOException*/public static JSONObject doGetStr(String url) throws IOException {CloseableHttpClient httpClient = HttpClients.createDefault();HttpGet httpGet = new HttpGet(url);CloseableHttpResponse response = httpClient.execute(httpGet);HttpEntity entity = response.getEntity();if (entity != null) {String content = EntityUtils.toString(entity,"UTF-8") ;return JSONObject.parseObject(content);}return null;}/*** post 请求 String装填* @param url* @param reqContent* @return* @throws IOException*/public static JSONObject doPostStr(String url,String reqContent) throws IOException {CloseableHttpClient httpClient = HttpClients.createDefault();HttpPost httpPost = new HttpPost(url);if (!StringUtils.isEmpty(reqContent)) {httpPost.setEntity(new StringEntity(reqContent,"UTF-8"));}CloseableHttpResponse response = httpClient.execute(httpPost);HttpEntity entity = response.getEntity();if (entity != null) {String resContent = EntityUtils.toString(entity,"UTF-8") ;return JSONObject.parseObject(resContent);}return null;}/*** post 请求 map装填* @param url* @param reqContent* @return* @throws IOException*/public static JSONObject doPostStr(String url,Map<String,String> reqContent) throws IOException {CloseableHttpClient httpClient = HttpClients.createDefault();HttpPost httpPost = new HttpPost(url);//装填参数List<NameValuePair> nvps = new ArrayList<NameValuePair>();if (reqContent != null) {for (Map.Entry<String, String> entry : reqContent.entrySet()) {nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));}}//设置参数到请求对象中httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));CloseableHttpResponse response = httpClient.execute(httpPost);HttpEntity entity = response.getEntity();if (entity != null) {String resContent = EntityUtils.toString(entity, "UTF-8");return JSONObject.parseObject(resContent);}return null;}
}

第四步

编写加密工具类(MD5),该工具类直接使用官方文档中给出的java Demo中的MD5

以下是MD5工具类 MD5 code:


import java.io.*;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;/*** MD5加密工具*/
public class MD5 {// 首先初始化一个字符数组,用来存放每个16进制字符private static final char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd','e', 'f' };/*** 获得一个字符串的MD5值** @param input 输入的字符串* @return 输入字符串的MD5值**/public static String md5(String input) throws UnsupportedEncodingException {if (input == null)return null;try {// 拿到一个MD5转换器(如果想要SHA1参数换成”SHA1”)MessageDigest messageDigest = MessageDigest.getInstance("MD5");// 输入的字符串转换成字节数组byte[] inputByteArray = input.getBytes("utf-8");// inputByteArray是输入字符串转换得到的字节数组messageDigest.update(inputByteArray);// 转换并返回结果,也是字节数组,包含16个元素byte[] resultByteArray = messageDigest.digest();// 字符数组转换成字符串返回return byteArrayToHex(resultByteArray);} catch (NoSuchAlgorithmException e) {return null;}}/*** 获取文件的MD5值** @param file* @return*/public static String md5(File file) {try {if (!file.isFile()) {System.err.println("文件" + file.getAbsolutePath() + "不存在或者不是文件");return null;}FileInputStream in = new FileInputStream(file);String result = md5(in);in.close();return result;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return null;}public static String md5(InputStream in) {try {MessageDigest messagedigest = MessageDigest.getInstance("MD5");byte[] buffer = new byte[1024];int read = 0;while ((read = in.read(buffer)) != -1) {messagedigest.update(buffer, 0, read);}in.close();String result = byteArrayToHex(messagedigest.digest());return result;} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return null;}private static String byteArrayToHex(byte[] byteArray) {// new一个字符数组,这个就是用来组成结果字符串的(解释一下:一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方))char[] resultCharArray = new char[byteArray.length * 2];// 遍历字节数组,通过位运算(位运算效率高),转换成字符放到字符数组中去int index = 0;for (byte b : byteArray) {resultCharArray[index++] = hexDigits[b >>> 4 & 0xf];resultCharArray[index++] = hexDigits[b & 0xf];}// 字符数组组合成字符串返回return new String(resultCharArray);}}

第五步

编写百度翻译接收返回结果实体,以及翻译api工具类。1.在请求翻译api时,需传给接口6个参数。如下表格

字段名 类型 必填参数 描述 备注
q TEXT Y 请求翻译query UTF-8编码
from TEXT Y 翻译源语言 语言列表(可设置为auto)
to TEXT Y 译文语言 语言列表(不可设置为auto)
appid INT Y APP ID 可在管理控制台查看
salt INT Y 随机数
sign TEXT Y 签名 appid+q+salt+密钥 的MD5值

这里需要提一下官方文档中的注意事项

注意:

1、请先将需要翻译的文本转换为UTF-8编码

2、在发送HTTP请求之前需要对各字段做URL encode。

3、在生成签名拼接 appid+q+salt+密钥 字符串时,q不需要做URL encode,在生成签名之后,发送HTTP请求之前才需要对要发送的待翻译文本字段q做URL encode。

2.请求成功过后的返回结果。如下表格

字段名 类型 描述
from TEXT 翻译源语言
to TEXT 译文语言
trans_result MIXED LIST 翻译结果
src TEXT 原文
dst TEXT 译文

以下是翻译接收实体类 TransData code:

说明这里使用lombok中@Data注解实体类,用来省略编写setter getter方法,如果阅读者没有Lombok插件,将注解去掉,自行编写setter getter方法:

import lombok.Data;/***  百度翻译结果 data*/
@Data
public class TransData {/*** 原文*/private String src;/*** 译文*/private String dst;
}

以下是翻译接收实体类 code:

import lombok.Data;import java.util.List;/***  翻译结果 实体*/
@Data
public class TransResult {/***翻译源语言*/private String from;/***译文语言*/private String to;/***翻译结果*/private List<TransData> trans_result;
}

以下是翻译api工具类 code:


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.example.demo.vo.TransResult;import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;/*** 百度翻译api*/
public class TranslateUtil {/*** 百度翻译接口地址*/private static final String TRANS_API_HOST = "http://api.fanyi.baidu.com/api/trans/vip/translate";private static String appid="第二步获得appid";private static String securityKey="第二步获得securityKey";/*** 获得翻译结果* @param query* @param from* @param to* @return* @throws IOException*/public static String getTransResult(String query, String from, String to) throws IOException {Map<String, String> params = buildParams(query, from, to);JSONObject jsonObject;//当请求翻译内容过长 用postif (query.length() >= 2000) {//post 请求方式jsonObject = HttpUtil.doPostStr(TRANS_API_HOST, params);} else {//  get请求方式String url = getUrlWithQueryString(TRANS_API_HOST, params);jsonObject = HttpUtil.doGetStr(url);}if (jsonObject.get("error_code")!=null) {return "翻译失败,原因:"+jsonObject.get("error_msg");}else{TransResult transResult = JSON.parseObject(jsonObject.toString(), TransResult.class);return " 翻译结果 "+transResult.getTrans_result().get(0).getDst();}}/*** 构建参数map** @param query* @param from* @param to* @return* @throws UnsupportedEncodingException*/private static Map<String, String> buildParams(String query, String from, String to) throws UnsupportedEncodingException {Map<String, String> params = new HashMap<String, String>();params.put("q", query);params.put("from", from);params.put("to", to);params.put("appid", appid);// 随机数String salt = String.valueOf(System.currentTimeMillis());params.put("salt", salt);// 签名String src = appid + query + salt + securityKey; // 加密前的原文params.put("sign", MD5.md5(src));return params;}/*** 拼接url get方式拼接参数  返回url** @param url* @param params* @return*/public static String getUrlWithQueryString(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();}/*** 对输入的字符串进行URL编码, 即转换为%20这种形式** @param input 原文* @return URL编码. 如果编码失败, 则返回原文*/public static String encode(String input) {if (input == null) {return "";}try {return URLEncoder.encode(input, "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return input;}
}

第五步

测试代码 code如下:

public class Test {public static void main(String[] args) throws IOException {String transResult = TranslateUtil.getTransResult("步骤到这里就结束了", "auto", "en");System.out.println(transResult);}
}

写在最后,本人所写仅供自己学习,如出错,请阅读者有心请指正。

附录:

语言列表

源语言语种不确定时可设置为 auto,目标语言语种不可设置为 auto。

语言简写 名称
auto 自动检测
zh 中文
en 英语
yue 粤语
wyw 文言文
jp 日语
kor 韩语
fra 法语
spa 西班牙语
th 泰语
ara 阿拉伯语
ru 俄语
pt 葡萄牙语
de 德语
it 意大利语
el 希腊语
nl 荷兰语
pl 波兰语
bul 保加利亚语
est 爱沙尼亚语
dan 丹麦语
fin 芬兰语
cs 捷克语
rom 罗马尼亚语
slo 斯洛文尼亚语
swe 瑞典语
hu 匈牙利语
cht 繁体中文
vie 越南语

错误码列表

当翻译结果无法正常返回时,请参考下表处理:

错误码 含义 解决方法
52000 成功
52001 请求超时 重试
52002 系统错误 重试
52003 未授权用户 检查您的 appid 是否正确,或者服务是否开通
54000 必填参数为空 检查是否少传参数
54001 签名错误 请检查您的签名生成方法
54003 访问频率受限 请降低您的调用频率
54004 账户余额不足 请前往管理控制平台为账户充值
54005 长query请求频繁 请降低长query的发送频率,3s后再试
58000 客户端IP非法 检查个人资料里填写的 IP地址 是否正确
可前往管理控制平台修改
IP限制,IP可留空
58001 译文语言方向不支持 检查译文语言是否在语言列表里

注:本文中使用的httpclient为4.5.5版本。
读者可以在Httpclient maven地址:http://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient 进行 maven依赖或者jar包下载。

如下图所示:
一:选中所需的版本,查看具体详情

二:maven依赖或者jar包下载

将maven加入加入pom.xml,或者将jar加入工程的lib中。

百度通用翻译api使用相关推荐

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

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

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

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

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

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

  4. c# 使用百度通用翻译api DEMO 报错

    报错 52003 和 54001 原因出在DEMO默认加上了domain //domainstring domain = "medicine";string sign = Encr ...

  5. Python 调用百度通用翻译接口

    缘起 以为该类型的代码在CSDN上比比皆是,最后还是自己按照百度开发文档自己写了一个 库导入 import httpx from random import randint import hashli ...

  6. html在线翻译,HTML实现调用百度在线翻译API

    最近在帮忙写网站,等有时间之后再仔细的研究后台. Translate Translate $("#Click").click(function (){ var contents = ...

  7. 百度api翻译html,百度在线翻译API (使用实例)

    [实例简介] 在http://api.fanyi.baidu.com/ 注册API使用的ID就可以使用的翻译工具,简化翻译过程,不用每次都打开网页. [实例截图]需要字自己注册APIID才行哦 [核心 ...

  8. HTML实现调用百度在线翻译API

    最近在帮忙写网站,等有时间之后再仔细的研究后台. <!doctype html> <html lang="en"> <head><meta ...

  9. python百度翻译api申请网页版_python3调用百度翻译api接口实现全过程

    现在很都平台的翻译api接口都开始收费了,比如谷歌.微软.yandex等等,注册非常麻烦,而且要钱,目前就百度还剩下一个最基础的翻译api不需要钱,今天我要和大家分享的是怎样使用python3调用百度 ...

最新文章

  1. Ubuntu 16.04重启输入法
  2. macOS安装 cocoapods1.9.1失败Failed to build gem native extension
  3. JavaScript函数大全
  4. 【年终总结】2021年有三AI做了什么,2022年我们要做什么?
  5. golang for 循环中使用协程的问题
  6. Android 12 重磅亮相!阔别 2 年的 Google I/O 开发者大会回来了
  7. 新颖性搜索(Novelty Search,NS)算法详解与实现
  8. 【sklearn第二十三讲】异常检测
  9. Illustrator 教程,如何在 Illustrator 中创建画板?
  10. 5G NR随机接入过程
  11. 用python做透视表_Python Pandas透视表(pivot_table)详解
  12. Windows利用系统自带的Dism命令挂载wim文件
  13. SVN代码迁移到Gitlab(保留SVN的提交记录)
  14. win10计算机出现位置不可用desktop不可用,桌面只有此电脑几个图标,其它桌面图标都没有了
  15. 分支限界解决旅行商tsp问题
  16. 若某非空二叉树的先序序列和后序序列正好相反,或者正好相同,则二叉树形态是怎么样的?
  17. EF Core 执行SQL语句和存储过程
  18. 性与潜能:性能量是一切天才的创造力源泉
  19. ExiD、InD、HighD轨迹数据
  20. Assignment of attribute weights with belief distributions for MADM under uncertainties

热门文章

  1. csdn怎么让代码变得好看_是什么让游戏变得更好
  2. Java调用C++的dll库
  3. dia 导出大分辨率高清png图
  4. 【成为架构师课程系列】高性能系统设计之分布式缓存
  5. 《HTTP/2基础教程》协议、特性、详解
  6. [附源码]java毕业设计房屋租赁系统
  7. 带分数 -- 蓝桥杯
  8. 怎样在手机上压缩pdf文件
  9. 通过 Github Actions 部署 Mkdocs 文档
  10. 2019 CSP-J/S第一轮各省分数线统计与分析(含浙江省)