登录百度翻译开发平台。开通个人服务,现在每月有免费的五万字符
api.fanyi.baidu.com/api/trans/p…
参数配置参考文档 api.fanyi.baidu.com/api/trans/p…
在文档中我们能够找到通用翻译API
通过API我们能够得到翻译的接口为
这个可以是一个 get
请求也可以是一个 post
请求,如果是 post
的话,就需要指定 Content-Type
为:application/x-www-form-urlencoded
具体的参数以及参数的获得方式如下:
-
q
:需要翻译的文本 -
from
:需要翻译的文本的原本语言,不确定可以填 auto -
to
:需要翻译的目标语言,具体可以看文档 。
这里有一个小技巧,文档上的语言列表有点少,可能没有你要的语言,比如说我要翻译成繁体,但是文档没有,你可以直接去百度翻译上随便输入一段话翻译成你要的语言,我的就是繁体。
打开控制台,你能够从请求当中得到这种语言的代码,在这里能够翻译的语言,比起文档上的列表,那多了可不止一点。
appid
:在成功的申请到账号之后,在开发者信息查看
-
salt
:随机数,作用有点不明所以,我尝试过一直传一样的一个数字也能够成功,出于严谨,可以使用random
获取一个。 -
sign
:重点参数,这个参数需要两步得到,第一步:拼接appid+q+salt+密钥
,第二步:将得到的字符串进行md5
加密
得到了所有的参数之后,我们就可以封装一个方法,用于请求译文然后返回。
这里还有两点需要注意
1、待翻译文本 q
需为 UTF-8
编码
2、在生成签名拼接 appid+q+salt+密钥
字符串时,q
不需要做 URL encode
,在生成签名之后,发送 HTTP
请求之前才需要对要发送的待翻译文本字段 q
做 URL encode
。
所以综上,我们需要的参数以及方法就拆分的很明确了,请求方法,md5 加密方法,utf-8 编码方法,这些方法都可以直接引用或者是找到别人已经写好的,最文章的最后面会放上我自己用的。
封装好的函数
const http = require('http');
const { hexMD5 } = require('./md5');
const { EncodeUtf8 } = require('./utf-8');
const { appid, key } = require('./config.js');
/**
* 翻译函数,调用百度api,返回promise。
*
* @export
* @param {string} str 需要翻译的文本。
* @param {string} from 原本语言。
* @param {string} to 目标语言。
* @returns {string} 翻译结果
*/
async function translate (str, from = 'zh', to = 'en') {
if(!str) return ''
return new Promise((resolve,reject)=>{
const salt = Math.floor(Math.random()*10000000000)
const sign = hexMD5(`${appid}${str}${salt}${key}`)
const url = `http://api.fanyi.baidu.com/api/trans/vip/translate?q=${EncodeUtf8(str)}&from=${from}&to=${to}&appid=${appid}&salt=${salt}&sign=${sign}`
http.get(url, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
if(data && typeof data == 'string') {
const translateRes = JSON.parse(data) && JSON.parse(data).trans_result
if(translateRes && translateRes[0] && translateRes[0].dst) {
resolve(translateRes[0].dst)
}
}
});
}).on('error', (err) => {
console.error(`Error: ${err.message}`);
reject(err)
});
})
}