前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >百度翻译 API 的申请 与 百度通用翻译 API 的接入

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

作者头像
廿四
发布2023-02-21 18:43:12
3.1K0
发布2023-02-21 18:43:12
举报
文章被收录于专栏:通用通用

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

申请

  • 进入百度翻译开放平台,选择 立刻使用
    在这里插入图片描述
    在这里插入图片描述
  • 选择我的服务,开通 通用翻译,填信息后秒过。
    在这里插入图片描述
    在这里插入图片描述
  • 建议 实名认证,提高免费额度。
    在这里插入图片描述
    在这里插入图片描述
  • 通过后,可以在开发者信息中查看所有信息,如:APPID、密钥 等等。
    在这里插入图片描述
    在这里插入图片描述

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

  • 文件(File) -> 设置(Settings) -> 工具(Tools) -> 翻译(Translate) 进入翻译设置界面。
    在这里插入图片描述
    在这里插入图片描述
  • 设置翻译引擎为百度翻译。
  • 输入应用程序 ID 和 密钥
    在这里插入图片描述
    在这里插入图片描述
    码方式接入 百度通用翻译 API
  • API 的信息建议看官方文档,更全面。百度通用翻译 API 接入文档
  • 主要查找到 API url输入参数输出参数

API URL

代码语言:text
复制
// 为了方便观看,直接用 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 值

  • 注意:字段名 是规定好的。
  • 例子:我要将 '苹果' 翻译成 英文
代码语言:txt
复制
- ``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 五个字段。
代码语言:json
复制
{
  "from": "en",
  "to": "zh",
  "trans_result": [
    {
      "src": "apple",
      "dst": "苹果"
    }
  ]
}
  • 如果是错误的情况,返回的 JSON 字符串应该只有 error_code、error_msg 两个字段。
代码语言:json
复制
{
  "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 代码
  • 代码中,是自行创建了一个 GET 请求类来创建 GET 请求访问 API。
代码语言:text
复制
HttpGet.get(TRANS_API_HOST, params)
  • 同样创建了一个 MD5 工具类来加密 签名。
代码语言:text
复制
MD5.md5(src)
自行编写
  • 引入 hutool-all(一个 Java 工具类库)创建 HTTP请求 和 MD5 加密 签名
代码语言:html
复制
<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 都一样
代码语言:java
复制
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 ID
		params.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
代码语言:html
复制
<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
代码语言:java
复制
public class BaiduTranslationUtils {
	
	/**
	 * JSON 字符串工具类
	 */
	private static final Gson GSON = new Gson();
  	
	public static TranslateResults toTranslateResults(String json) {
		return GSON.fromJson(json, TranslateResults.class);
	}
}
  • TranslateResults 是自定义的 输出参数类对象
代码语言:java
复制
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;
	
	@Override
	public 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());
	}

}
代码语言:java
复制
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;
	
	@Override
	public String toString() {
		return "TransResult{" +
				"src='" + src + '\'' +
				", dst='" + dst + '\'' +
				'}';
	}
	
	/**
	 * 输出指点的内容
	 */
	public String outputDisplay() {
		return "{" +
				"原文 = '" + src + '\'' +
				", 译文 = '" + dst + '\'' +
				'}';
	}

}
  • 查询成功的结果是这样的。其中:中文用 URL 编码来表示
代码语言:json
复制
{
  "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() 函数同时支持 正确 和 错误信息的输出

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 百度翻译 API 的申请 与 百度通用翻译 API 的接入
    • 申请
      • IDEA 翻译插件 translate 换成 百度翻译引擎
        • API URL
        • 输入参数
        • 输出参数
        • 代码实现
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档