本文介绍集成百度翻译,实现自有功能的步骤
一、开发准备
首先需要去百度翻译开发平台官网注册账号,获取访问api需要的应用id和密钥。
官网地址:http://api.fanyi.baidu.com/api/trans/product/index
选择自己需要集成的服务,我这里需要集成的服务是简单的文本翻译,选择文本翻译服务创建一个应用,即可获得请求需要的应用id和密钥,我这里已经创建完了。
官方给出了详细的集成文档,可以下载需要用大的卡法语言demo,进行测试调试
二、javaScript集成方式
我这里介绍前端的集成方式,准备好官方要求的参数,请求即可
代码示例:
export const baiduTranslate = async (config, params) => {
const query = params.query.join('\n')
const apiUrl = config.apiUrl
const appId = config.appId
const appSecret = config.appSecret
const salt = new Date().getTime()
const from = 'auto'
const to = params.to
const str = appId + query + salt + appSecret
const sign = MD5(str)
const details = {
appid: appId,
salt: salt,
from: from,
to: to,
sign: sign,
q: query
}
const formBody = []
for (const property in details) {
const encodedKey = encodeURIComponent(property)
const encodedValue = encodeURIComponent(details[property])
formBody.push(encodedKey + '=' + encodedValue)
}
const requestOptions = {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' },
body: formBody.join('&')
}
try {
const resp = await fetch(apiUrl, requestOptions)
// 处理可能出现的错误
if (!resp.ok) {
console.log(resp)
return []
}
const result = await resp.json()
if (result['trans_result']) {
return result['trans_result']
} else {
console.log('调取百度翻译错误:' + result['error_msg'])
return []
}
} catch (error) {
console.error('translate', error)
}
}
需要注意以下几点:
请求可以使用GET或POST,如果是POST请求Content-Type一定是application/x-www-form-urlencoded;charset=UTF-8
POST请求时,由于参数体是x-www-form-urlencoded,所以参数是&分隔拼接在url上的
参数q既是需要翻译的文本,如果想要批量翻译,则多个需要翻译的文本用代码可识别的【\n】分隔。
参数进行URL encode,但要注意拼接签名用到的q不需要进行URL encode,请求参数结构体中的q必须进行URL encode
请求的q控制在6000字节以内,约中文2000个字符,如果翻译的文本较多,这里需要分段去做请求,但是百度翻译对于标准版服务,QPS(每秒请求量)=1,如需更大频率,请先进行身份认证,认证通过后可切换为高级版(适用于个人,QPS=10)或尊享版(适用于企业,QPS=100)。
三、查看效果
我是集成在浏览器上,右键翻译页面这个功能,遍历页面上所有的节点,取出需要翻译的文字,切片请求结果,将结果再回填到页面上。
官方给出详细的错误码列表,如遇返回错误,可以对照错误码列表查找问题
翻译超额是付费的,根据享受的版本不同,每日免费的字符数不同,超过免费的额度,需要付费才可翻译,详细的流水记录可以在控制台上查看。
简单示例,欢迎大家查阅指正!