【nodejs】百度翻译api接入使用

前言

  • 由于我需要使用翻译服务把文档翻译成英语,每次更新可以自动翻译,省去复制粘贴的操作,就想弄个这玩意。

百度翻译

  • 先注册开发者:https://api.fanyi.baidu.com/api/trans/product/apiapply
  • 开通翻译api服务
  • 百度翻译文档:https://api.fanyi.baidu.com/api/trans/product/apidoc
  • 百度有个坑,虽然他文档上写免费版的200w字免费,qps是1,但是发现每天调用一定次数后直接就gg 54003,所以开发的人最好升级成高级版。
  • 另外还有个坑,翻译的字数不能太长,否则无法返回。
  • 查看后发现调用还是比较简单的,先制作个demo:
require('dotenv').config();
const https = require('https');
const md5 = require('md5');
const axios = require('axios');
const apiUrl = 'http://api.fanyi.baidu.com/api/trans/vip/translate';
const appid = process.env.APPID;
const secret = process.env.SECRET;

const qs = `你好撒旦撒旦撒撒旦撒旦,十大撒的撒sadsad萨达
吃饭吧GV克劳福德的撒
萨达按时,萨达
`;

const requestTranslate = (q) => {
    
    
	const salt = Math.random();
	const sign = md5(appid + q + salt + secret);
	const params = {
    
    
		q,
		from: 'zh',
		to: 'en',
		salt,
		appid,
		sign,
	};
	return axios.get(apiUrl, {
    
    
		params,
	});
};
requestTranslate(qs).then((v) => {
    
    
	console.log(v.data.trans_result);
});

  • 输出:
[
  {
    
    
    src: '你好撒旦撒旦撒撒旦撒旦,十大撒的撒sadsad萨达',
    dst: 'Hello, Satan, Satan, Satan, sadsad, sada of the ten great Satans'
  },
  {
    
     src: '吃饭吧GV克劳福德的撒', dst: "Eat, GV Crawford's SA" },
  {
    
     src: '萨达按时,萨达', dst: 'Sada, sada' }
]
  • 下面需要将文档进行翻译。
  • 我使用dooringx的changelog进行翻译,md前面有个元信息字符串,也需要翻译下,但是问题就是翻译的api对空行和空格全部删掉了,所以没有格式信息。
  • 我试了每行替换或者其他方式,效果都不太理想,因为api有同时请求次数限制,所以最好的方式还是翻译完之后处理特殊的地方。我使用下面方法判断头并且特殊地方进行修改。
const concatResult = (result) => {
    
    
	let line = 0;
	let navstart = 0;
	if (result[0].src === '---') {
    
    
		//查找末尾的---
		const len = result.length;
		for (let i = 1; i < len; i++) {
    
    
			//查找nav起始
			let cur = result[i].src;
			if (cur === 'nav:') {
    
    
				navstart = i;
			}
			if (cur === '---') {
    
    
				line = i;
				break;
			}
		}
	}
	result.forEach((v, i) => {
    
    
		if (i === 0) {
    
    
			finalResult = i < line ? v.src : v.dst;
		} else {
    
    
			//替换Title:
			if (v.src.startsWith('title:') && v.dst.startsWith('Title:')) {
    
    
				v.dst = v.dst.replace('Title:', 'title:');
			}
			if (i > navstart && i < line) {
    
    
				finalResult = finalResult + `\r\n  ` + v.dst;
			} else {
    
    
				finalResult = finalResult + '\r\n' + v.dst;
			}
		}
	});
	return finalResult;
};

猜你喜欢

转载自blog.csdn.net/yehuozhili/article/details/121516760