百度翻译 API 的申请 与 百度通用翻译 API 的接入
百度翻译 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 的接入相关推荐
- 百度通用翻译api使用
官方api文档:http://api.fanyi.baidu.com/api/trans/product/apidoc springboot demo地址:https://github.com/Bla ...
- 百度通用翻译api在微信小程序中的使用
关于百度通用翻译api,详细的信息可以参考通用翻译API技术文档 var q = 'count' var from = 'en'var to = 'zh'//注册获得appid和密匙var appid ...
- Python调用百度通用翻译api
Python调用百度通用翻译api 首先 首先 首先需要先去百度翻译api官网注册成为开发者,然后申领一下通用翻译的appid和密钥. 附上代码,默认为源语言自动识别,效果感觉不是太好,目标语言默认为 ...
- 如何实现百度翻译接口——不用申请API接口密钥
import tkinter as tk import urllib.request import urllib.parse import json from tkinter import *# 定义 ...
- Zotero翻译插件Zotero PDF Translate无法正常翻译,百度、彩云、腾讯翻译api接入
文章目录 1 存在问题 2 解决办法 2.1 百度API 2.1.1 注册[百度翻译开发平台](https://fanyi-api.baidu.com/) 2.1.2 登录并申请通用翻译API和垂直领 ...
- 调用百度API(二)——百度翻译
python 调用百度翻译API 序 一.预备知识 二.操作实例 三.应用 1.设计目标 2.简述 3.程序分析 4.完整代码 四.最后 序 继昨天发的--申请调用百度翻译API(一),今天给大家分享 ...
- 百度翻译api设置 java_Java调用百度API实现翻译
下面是Java调用百度API实现翻译的具体步骤: 一.在写代码之前先在在百度翻译平台中,申请APP_ID 申请地址申请的详见点击打开链接 申请之后,会得到APP_ID和SECURITY_KEY 二.j ...
- 基于百度翻译API和python的批量地名翻译的实现
这次接到一个需求,需要把postgresql数据库中批量的地名进行翻译,大约200多个,自己翻译也非常的慢.于是想到用百度翻译的API对数据库的数据逐条进行翻译.正好也在学习Python语言,正好可以 ...
- 百度地图AK申请注意+百度地图API生成热力图+调用百度地图API自动获取经纬度和地址
文章目录 一.百度地图AK密钥申请 二.调用百度地图API生成热力图 三.调用百度地图API自动获取经纬度和地址 一.百度地图AK密钥申请 点击百度地图API控制台,输入登录账户,即可进入,若账户未完 ...
最新文章
- angular select设置默认选中_改进 Angular + Jest 项目中组件测试的调试
- 获取手机idfa_七麦线上公开课:后IDFA时代,链接用户的新生态解决方案
- java关于泛型的实验代码_[ Java学习 ] 泛型类的应用实验
- 吃豆人(luogu 7472/NOI Online 2021 普及组 T2)
- 通过telnet连接查看memcache服务器
- 文件被后台程序占用无法删除_群晖NAS教程第十五节:查询群晖NAS硬盘空间占用情况,解决删除文件空间不增加问题...
- DatabaseMetaData的用法(转)
- C语言找素数的几种方法
- VUM升级esxi主机6.0至6.7U3失败-无法再主机上执行升级脚本
- 华为设备配置MSDP实现PIM-SM域间组播
- C语言:将3*4矩阵中找出行最大,列最小的那个元素。-将低于平均值的人数作为函数返回值,将低于平均分的分数放入below数组中。...
- mig是指_mignt是什么意思
- android学习笔记----手机号码查询归属地
- matlab中rand函数
- 解决:keeps stopping(停止运行)
- Spring MVC拦截器(一)---定义,配置及单个拦截器执行流程
- 清楚易懂的讲解”UV和PV“的含义,以及之间的区别。
- 计算机快捷键知识点,电脑常用快捷键复习知识点.pdf
- echarts之toolbox-x,y
- *p++、(*p)++、*(p++)
热门文章
- Unity assetstore资源商店 地址
- Nginx学习部署环境(六)-Nginx原理
- 仓储+调度,YOGO智能配送站能否改变外卖配送格局?
- 三相永磁同步电机(PMSM) 单矢量、占空比、双矢量电流预测控制 MATLA b仿真算法
- 少说话多写代码之Python学习010——字典的简单使用
- JS toFixed的使用误差,银行家算法(四舍六入五取偶)实现
- 创新密码532,YonSuite打造“SaaS+PaaS+生态”新模式
- 电影《天空之城》观后感
- ps3服务器还在运行吗,老主机下岗了!R星宣布12月16日关闭《GTA5》PS3、Xbox 360服务器...
- php获取中文字符拼音首字母