项目中接入百度翻译API,实现自动翻译

登录百度翻译开发平台。开通个人服务,现在每月有免费的五万字符

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

具体的参数以及参数的获得方式如下:

  1. q :需要翻译的文本

  2. from:需要翻译的文本的原本语言,不确定可以填 auto

  3. to:需要翻译的目标语言,具体可以看文档 。

作者:14332223
链接:https://juejin.cn/post/7280008213671100431
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这里有一个小技巧,文档上的语言列表有点少,可能没有你要的语言,比如说我要翻译成繁体,但是文档没有,你可以直接去百度翻译上随便输入一段话翻译成你要的语言,我的就是繁体。

打开控制台,你能够从请求当中得到这种语言的代码,在这里能够翻译的语言,比起文档上的列表,那多了可不止一点。

  1. appid:在成功的申请到账号之后,在开发者信息查看

image-20230918172430894.png

  1. salt:随机数,作用有点不明所以,我尝试过一直传一样的一个数字也能够成功,出于严谨,可以使用 random 获取一个。

  2. sign:重点参数,这个参数需要两步得到,第一步:拼接 appid+q+salt+密钥,第二步:将得到的字符串进行 md5 加密

得到了所有的参数之后,我们就可以封装一个方法,用于请求译文然后返回。

这里还有两点需要注意

1、待翻译文本 q 需为 UTF-8 编码

2、在生成签名拼接 appid+q+salt+密钥 字符串时,q 不需要做 URL encode,在生成签名之后,发送 HTTP 请求之前才需要对要发送的待翻译文本字段 qURL 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)
    });
  })
}

来源:https://juejin.cn/post/7280008213671100431

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值