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

申请

  • 进入百度翻译开放平台,选择 立刻使用

  • 选择我的服务,开通 通用翻译,填信息后秒过。

  • 建议 实名认证,提高免费额度。

  • 通过后,可以在开发者信息中查看所有信息,如:APPID、密钥 等等。

IDEA 翻译插件 translate 换成 百度翻译引擎

  • 文件(File) -> 设置(Settings) -> 工具(Tools) -> 翻译(Translate) 进入翻译设置界面。

  • 设置翻译引擎为百度翻译。

  • 输入应用程序 ID 和 密钥

用 Java 的代码方式接入 百度通用翻译 API

  • API 的信息建议看官方文档,更全面。百度通用翻译 API 接入文档

  • 主要查找到 API url输入参数输出参数

API URL

  • 通用翻译的对外 API 接口

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

  • https 版:http://api.fanyi.baidu.com/api/trans/vip/translate

  • 完整的、拼接好的 URL 是怎样的呢?

// 为了方便观看,直接用 get 请求的 URL 来展示
// [] 表示要用实际的值进行填充
http://api.fanyi.baidu.com/api/trans/vip/translate?q=[]&from=[]&to=[]&appid=[]&salt=[]&sign=[]https://fanyi-api.baidu.com/api/trans/vip/translate?q=[]&from=[]&to=[]&appid=[]&salt=[]&sign=[]
  • post 请求需要将 Content-Type 请指定为:application/x-www-form-urlencoded,同时以类的形式上传参数

输入参数

字段名 类型 是否必填 描述 备注
q String 查询的、需要翻译的字段 UTF-8 编码
from String 字段 q 的语言代码名称,源语言代码名称 可设置为 auto(根据字段 q 自动输出)
to String 目标语言代码名称 不可设置为 auto
appid String APP ID 个人信息处查看
salt String 随机数 可为字母或数字的字符串
sign String 签名 (appid + q + salt + 密钥)的 MD5 值
  • 注意:字段名 是规定好的。

  • 例子:我要将 '苹果' 翻译成 英文

    • q = "苹果",from = "auto"或"zh",to = "en",appid = [APP ID],salt = [随机数],sign = [签名]

下表是 常见的语种 的代码名称

名称 代码名称 名称 代码名称 名称 代码名称
自动检测 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

输出参数

  • 返回的结果是 JSON 格式,包含以下字段
字段名 类型 描述 备注
from String 源语言代码名称 实际的代码名称(auto 也会解析)
to String 目标语言代码名称 实际的代码名称
trans_result String 翻译结果数组 包括 src 和 dst 字段
src String 翻译原文 中文字段会以
dst String 翻译译文 实际的代码名称
error_code Integer 错误码 仅出现错误时显示
error_msg String 错误含义、信息 仅出现错误时显示
  • 如果是正确的情况,返回的 JSON 字符串应该只有 from、to、trans_result、src、dst 五个字段。
{"from": "en","to": "zh","trans_result": [{"src": "apple","dst": "苹果"}]
}
  • 如果是错误的情况,返回的 JSON 字符串应该只有 error_code、error_msg 两个字段。
{"error_code": "54001","error_msg": "Invalid Sign"
}

错误码列表

错误码 含义 解决方案
52000 成功
52001 请求超时 请重试
52002 系统错误 请重试
52003 未授权用户 请检查appid是否正确或者服务是否开通
54000 必填参数为空 请检查是否少传参数
54001 签名错误 请检查您的签名生成方法
54003 访问频率受限 请降低您的调用频率,或进行身份认证后切换为高级版/尊享版
54004 账户余额不足 请前往管理控制台为账户充值
54005 长 query 请求频繁 请降低长 query 的发送频率,3s后再试
58000 客户端 IP 非法 检查个人资料里填写的 IP 地址是否正确,可前往开发者信息-基本信息修改
58001 译文语言方向不支持 检查译文语言是否在语言列表里
58002 服务当前已关闭 请前往管理控制台开启服务
90107 认证未通过或未生效 请前往我的认证查看认证进度

代码实现

下载百度通用翻译 API 接入文档中的 demo 代码

HttpGet.get(TRANS_API_HOST, params)
MD5.md5(src)

自行编写

  • 引入 hutool-all(一个 Java 工具类库)创建 HTTP请求 和 MD5 加密 签名

<dependencies><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.5</version></dependency>
</dependencies>
  • 创建 GET 请求:HttpUtil.get(TRANS_API_HOST_HTTP, map);

  • 创建 POST 请求:HttpUtil.post(TRANS_API_HOST_HTTP, map);

  • API URL 是 HTTP 还是 HTTPS 都一样

package com.example.demo.service;import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.HttpUtil;
import com.example.demo.entity.TranslateResults;
import com.google.gson.Gson;import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;/*** 百度通用翻译 工具类* <p>* 接入 百度翻译 API**/
public class BaiduTranslationUtils {/*** 对接 百度通用翻译 API(https)*/private static final String TRANS_API_HOST_HTTPS = "https://fanyi-api.baidu.com/api/trans/vip/translate";/*** 对接 百度通用翻译 API(http)*/private static final String TRANS_API_HOST_HTTP = "http://api.fanyi.baidu.com/api/trans/vip/translate";/*** 百度翻译 APP ID*/private static final String APP_ID = "20220930001363960";/*** 百度翻译 APP 密钥*/private static final String SECURITY_KEY = "ZWgAN0_8hngJPzuZbCRt";/*** JSON 字符串工具类*/private static final Gson GSON = new Gson();public static void main(String[] args) {String result = BaiduTranslationUtils.getUniversalTranslation("苹果", "auto", "en");
//      System.out.println(result);TranslateResults translateResults = toTranslateResults(result);translateResults.outputDisplay();String result1 = BaiduTranslationUtils.getUniversalTranslations("Apple", "auto", "zh");TranslateResults translateResults1 = toTranslateResults(result1);translateResults1.outputDisplay();String result2 = BaiduTranslationUtils.postUniversalTranslation("苹果", "auto", "en");TranslateResults translateResults2 = toTranslateResults(result2);translateResults2.outputDisplay();String result3 = BaiduTranslationUtils.postUniversalTranslations("Apple", "auto", "zh");TranslateResults translateResults3 = toTranslateResults(result3);translateResults3.outputDisplay();}/*** 用 GET 请求访问 通用翻译 http API** @param query 查询的字段* @param from  源语言代码名称* @param to    目标语言代码名称** @return JSON*/public static String getUniversalTranslation(String query, String from, String to) {return getHttpUniversalTranslation(query, from, to);}/*** 用 GET 请求访问 通用翻译 https API** @param query 查询的字段* @param from  源语言代码名称* @param to    目标语言代码名称** @return JSON*/public static String getUniversalTranslations(String query, String from, String to) {return getHttpsUniversalTranslation(query, from, to);}/*** 用 POST 请求访问 通用翻译 http API** @param query 查询的字段* @param from  源语言代码名称* @param to    目标语言代码名称** @return JSON*/public static String postUniversalTranslation(String query, String from, String to) {return postHttpUniversalTranslation(query, from, to);}/*** 用 POST 请求访问 通用翻译 https API** @param query 查询的字段* @param from  源语言代码名称* @param to    目标语言代码名称** @return JSON*/public static String postUniversalTranslations(String query, String from, String to) {return postHttpsUniversalTranslation(query, from, to);}/*** 用 GET 请求访问 通用翻译 http API** @param query 查询的字段* @param from  源语言代码名称* @param to    目标语言代码名称** @return JSON*/private static String getHttpUniversalTranslation(String query, String from, String to) {Map<String, Object> map = assemble(query, from, to);return HttpUtil.get(TRANS_API_HOST_HTTP, map);}/*** 用 GET 请求访问 通用翻译 https API** @param query 查询的字段* @param from  源语言代码名称* @param to    目标语言代码名称** @return JSON*/private static String getHttpsUniversalTranslation(String query, String from, String to) {Map<String, Object> map = assemble(query, from, to);return HttpUtil.get(TRANS_API_HOST_HTTPS, map);}/*** 用 POST 请求访问 通用翻译 http API** @param query 查询的字段* @param from  源语言代码名称* @param to    目标语言代码名称** @return JSON*/private static String postHttpUniversalTranslation(String query, String from, String to) {Map<String, Object> map = assemble(query, from, to);return HttpUtil.post(TRANS_API_HOST_HTTP, map);}/*** 用 POST 请求访问 通用翻译 https API** @param query 查询的字段* @param from  源语言代码名称* @param to    目标语言代码名称** @return JSON*/private static String postHttpsUniversalTranslation(String query, String from, String to) {Map<String, Object> map = assemble(query, from, to);return HttpUtil.post(TRANS_API_HOST_HTTPS, map);}/*** 将 输入参数 组装到 Map 中** @param query 查询的字段* @param from  源语言代码名称* @param to    目标语言代码名称** @return Map<String, Object>*/private static Map<String, Object> assemble(String query, String from, String to) {if(query == null || query.isEmpty()) {query = "中国";}if(from == null || from.isEmpty()) {from = "auto";}if(to == null || to.isEmpty()) {to = "en";}Map<String, Object> params = new HashMap<>(5);// 查询的字段params.put("q", new String(query.getBytes(StandardCharsets.UTF_8)));// 源语言代码名称params.put("from", from);// 目标语言代码名称params.put("to", to);// APP IDparams.put("appid", APP_ID);// 随机数String salt = String.valueOf(System.currentTimeMillis());params.put("salt", salt);// 加密前的原文String src = APP_ID + query + salt + SECURITY_KEY;// 签名params.put("sign", SecureUtil.md5(src));return params;}/*** 将 JSON 字符串 转换成 类对象** @param json JSON 字符串** @return 类对象*/public static TranslateResults toTranslateResults(String json) {return GSON.fromJson(json, TranslateResults.class);}}
  • 在 实例中,没有为输入参数配置相应的类对象。添加上类对象后可能更好
解析输出的 JSON 字符串
  • 我使用的类库是:com.google.code.gson

<dependencies><!-- Gson JSON 工具类库 --><!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.9</version></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version><optional>true</optional></dependency>
</dependencies>
  • 使用 gson.fromJson(json, class) 的形式解析 JSON
public class BaiduTranslationUtils {/*** JSON 字符串工具类*/private static final Gson GSON = new Gson();public static TranslateResults toTranslateResults(String json) {return GSON.fromJson(json, TranslateResults.class);}
}
  • TranslateResults 是自定义的 输出参数类对象
package com.example.demo.entity;import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;import java.util.Arrays;/*** 翻译结果 类*/
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class TranslateResults {/*** 源语言代码名称*/private String from;/*** 目标语言代码名称*/private String to;/*** 翻译结果数组*/private TransResult[] trans_result;/*** 错误码*/private Integer error_code;/*** 错误含义、信息*/private String error_msg;@Overridepublic String toString() {return "TranslateResults{" +"from='" + from + '\'' +", to='" + to + '\'' +", trans_result=" + Arrays.toString(trans_result) +", error_code=" + error_code +", error_msg='" + error_msg + '\'' +'}';}/*** 输出指点的内容*/public void outputDisplay() {StringBuilder builder = new StringBuilder();if(error_code == null && error_msg == null) {builder.append("[");for(TransResult transResult : trans_result) {builder.append(transResult.outputDisplay()).append(",");}builder.append("]");} else if(trans_result == null) {builder.append("{").append("错误码 = ").append(error_code).append(" , ").append("错误信息提示 = ").append(error_msg).append("}");} else {builder.append("返回值异常请检查!").append(this.toString());}System.out.println(builder.toString());}}
package com.example.demo.entity;import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;import java.net.URLEncoder;/*** 翻译原文译文 类*/
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class TransResult {/*** 翻译原文*/private String src;/*** 翻译译文*/private String dst;@Overridepublic String toString() {return "TransResult{" +"src='" + src + '\'' +", dst='" + dst + '\'' +'}';}/*** 输出指点的内容*/public String outputDisplay() {return "{" +"原文 = '" + src + '\'' +", 译文 = '" + dst + '\'' +'}';}}
  • 查询成功的结果是这样的。其中:中文用 URL 编码来表示
{"from": "zh","to": "en","trans_result": [{"src": "\u82f9\u679c","dst": "Apple"}]
}
  • 添加了类对象及其方法 可以更便捷的输出目标信息。

  • 因为,查询成功时,error_code 和 error_msg 一定为 null,其它字段均有值查询失败时,error_code 和 error_msg 不为 null,而其它字段均为 null

  • 故,public void outputDisplay() 函数同时支持 正确 和 错误信息的输出

百度翻译 API 的申请 与 百度通用翻译 API 的接入相关推荐

  1. 百度通用翻译api使用

    官方api文档:http://api.fanyi.baidu.com/api/trans/product/apidoc springboot demo地址:https://github.com/Bla ...

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

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

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

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

  4. 如何实现百度翻译接口——不用申请API接口密钥

    import tkinter as tk import urllib.request import urllib.parse import json from tkinter import *# 定义 ...

  5. Zotero翻译插件Zotero PDF Translate无法正常翻译,百度、彩云、腾讯翻译api接入

    文章目录 1 存在问题 2 解决办法 2.1 百度API 2.1.1 注册[百度翻译开发平台](https://fanyi-api.baidu.com/) 2.1.2 登录并申请通用翻译API和垂直领 ...

  6. 调用百度API(二)——百度翻译

    python 调用百度翻译API 序 一.预备知识 二.操作实例 三.应用 1.设计目标 2.简述 3.程序分析 4.完整代码 四.最后 序 继昨天发的--申请调用百度翻译API(一),今天给大家分享 ...

  7. 百度翻译api设置 java_Java调用百度API实现翻译

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

  8. 基于百度翻译API和python的批量地名翻译的实现

    这次接到一个需求,需要把postgresql数据库中批量的地名进行翻译,大约200多个,自己翻译也非常的慢.于是想到用百度翻译的API对数据库的数据逐条进行翻译.正好也在学习Python语言,正好可以 ...

  9. 百度地图AK申请注意+百度地图API生成热力图+调用百度地图API自动获取经纬度和地址

    文章目录 一.百度地图AK密钥申请 二.调用百度地图API生成热力图 三.调用百度地图API自动获取经纬度和地址 一.百度地图AK密钥申请 点击百度地图API控制台,输入登录账户,即可进入,若账户未完 ...

最新文章

  1. angular select设置默认选中_改进 Angular + Jest 项目中组件测试的调试
  2. 获取手机idfa_七麦线上公开课:后IDFA时代,链接用户的新生态解决方案
  3. java关于泛型的实验代码_[ Java学习 ] 泛型类的应用实验
  4. 吃豆人(luogu 7472/NOI Online 2021 普及组 T2)
  5. 通过telnet连接查看memcache服务器
  6. 文件被后台程序占用无法删除_群晖NAS教程第十五节:查询群晖NAS硬盘空间占用情况,解决删除文件空间不增加问题...
  7. DatabaseMetaData的用法(转)
  8. C语言找素数的几种方法
  9. VUM升级esxi主机6.0至6.7U3失败-无法再主机上执行升级脚本
  10. 华为设备配置MSDP实现PIM-SM域间组播
  11. C语言:将3*4矩阵中找出行最大,列最小的那个元素。-将低于平均值的人数作为函数返回值,将低于平均分的分数放入below数组中。...
  12. mig是指_mignt是什么意思
  13. android学习笔记----手机号码查询归属地
  14. matlab中rand函数
  15. 解决:keeps stopping(停止运行)
  16. Spring MVC拦截器(一)---定义,配置及单个拦截器执行流程
  17. 清楚易懂的讲解”UV和PV“的含义,以及之间的区别。
  18. 计算机快捷键知识点,电脑常用快捷键复习知识点.pdf
  19. echarts之toolbox-x,y
  20. *p++、(*p)++、*(p++)

热门文章

  1. Unity assetstore资源商店 地址
  2. Nginx学习部署环境(六)-Nginx原理
  3. 仓储+调度,YOGO智能配送站能否改变外卖配送格局?
  4. 三相永磁同步电机(PMSM) 单矢量、占空比、双矢量电流预测控制 MATLA b仿真算法
  5. 少说话多写代码之Python学习010——字典的简单使用
  6. JS toFixed的使用误差,银行家算法(四舍六入五取偶)实现
  7. 创新密码532,YonSuite打造“SaaS+PaaS+生态”新模式
  8. 电影《天空之城》观后感
  9. ps3服务器还在运行吗,老主机下岗了!R星宣布12月16日关闭《GTA5》PS3、Xbox 360服务器...
  10. php获取中文字符拼音首字母