列举几个免费的翻译接口。
官方文档:https://fanyi-api.baidu.com/doc/21
免费版有请求频次限制。
请求的参数:
字段名 | 类型 | 是否必填 | 描述 | 备注 |
---|---|---|---|---|
q | string | 是 | 请求翻译query | UTF-8编码 |
from | string | 是 | 翻译源语言 | 可设置为auto |
to | string | 是 | 翻译目标语言 | 不可设置为auto |
appid | string | 是 | APP ID | 可在管理控制台查看 |
salt | string | 是 | 随机数 | 可为字母或数字的字符串 |
sign | string | 是 | 签名 | appid+q+salt+密钥的MD5值 |
常见语种列表(from/to):
名称 | 代码 | 名称 | 代码 | 名称 | 代码 |
---|---|---|---|---|---|
自动检测 | 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 |
简单示例
onst md5 = require("md5");
async cidian_query(word) {
if (!word) {
return "";
}
let q = word;
let from = "zh";
let to = "en";
if (this.tozh) {
from = "en";
to = "zh";
} else {
from = "zh";
to = "en";
}
let appid = "xxx";
let key = "xxxx";
let salt = "10086";
let sign = md5("" + appid + q + salt + key);
let data = await this.mpost2(
"https://fanyi-api.baidu.com/api/trans/vip/translate",
{
q,
from,
to,
appid,
salt,
sign
}
);
if (data.error_code) {
this.$Message.error(data.error_msg);
return "";
} else {
let trans_result = data.trans_result;
let str_arr = [];
if (trans_result && trans_result.length > 0) {
for (let i = 0; i < trans_result.length; i++) {
let item = trans_result[i];
str_arr.push(item.dst);
}
}
console.info("转换:", str_arr.join("\n"));
return str_arr.join("\n");
}
}
mpost(url, para) {
let bodystr = "";
for (let item in para) {
if (item === "q") {
bodystr += "&" + item + "=" + encodeURIComponent(para[item]);
} else {
bodystr += "&" + item + "=" + para[item];
}
}
bodystr = bodystr.slice(1, bodystr.length);
return new Promise(function(resolve, reject) {
request(
{
url: url,
method: "POST",
json: true,
headers: {
"content-type": "application/x-www-form-urlencoded; charset=UTF-8"
},
body: bodystr
},
function(error, response, body) {
if (!error && response.statusCode === 200) {
resolve(body);
} else {
reject("请求接口失败");
}
}
);
});
}
但是注意免费的有调用频次限制,1秒内只能调用1次,否则会报错:
{"error_code":"54003","error_msg":"Invalid Access Limit"}
建议请求后延迟1秒再次调用
否则会报错
window.sleep = function(time) {
return new Promise(resolve => {
setTimeout(resolve, time);
});
};
word = await this.cidian_query(word);
await window.sleep(1000);
示例
http://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i=计算 http://fanyi.youdao.com/translate?&doctype=json&type=ZH_CN2EN&i=计算 http://fanyi.youdao.com/translate?&doctype=json&type=ZH_CN2KR&i=计算
返回的数据
{"type":"ZH_CN2EN","errorCode":0,"elapsedTime":0,"translateResult":[[{"src":"计算","tgt":"To calculate"}]]}
注意返回的数据中有空格,注意处理。
type的类型有:
ZH_CN2EN 中文 » 英语
ZH_CN2JA 中文 » 日语
ZH_CN2KR 中文 » 韩语
ZH_CN2FR 中文 » 法语
ZH_CN2RU 中文 » 俄语
ZH_CN2SP 中文 » 西语
EN2ZH_CN 英语 » 中文
JA2ZH_CN 日语 » 中文
KR2ZH_CN 韩语 » 中文
FR2ZH_CN 法语 » 中文
RU2ZH_CN 俄语 » 中文
SP2ZH_CN 西语 » 中文
文字中有特殊符号时有时请求报错。
添加引用
npm install md5 --save
示例
const md5 = require("md5");
async cidian_query(word) {
if (!word) {
return "";
}
try {
let u = {
client: 6,
key: 1000006,
timestamp: new Date().valueOf(),
word: word
};
let i = "http://dict.iciba.com/dictionary/word/query/web";
let l = "";
for (let c in u) {
l += String(u[c]);
}
u.signature = md5(
i.replace("http://dict.iciba.com", "") +
l +
"7ece94d9f9c202b0d2ec557dg4r9bc"
);
let data = await this.mget(i, u);
if (data.status === 1) {
console.info(data);
if (
data.message &&
data.message.baesInfo &&
data.message.baesInfo.translate_result
) {
return data.message.baesInfo.translate_result;
} else {
this.$Message.error("转换失败!");
return "";
}
} else {
this.$Message.error(data.message);
return "";
}
} catch (e) {
console.info(e);
}
}
mget(url, para) {
let parastr = "";
for (let key in para) {
parastr += "&" + key + "=" + para[key];
}
parastr = parastr.slice(1, parastr.length);
// parastr = encodeURIComponent(parastr);
url = url + "?" + parastr;
return new Promise(function(resolve, reject) {
request(
{
url: url,
method: "get",
json: true,
headers: {
"content-type": "application/json"
}
},
function(error, response, body) {
if (!error && response.statusCode === 200) {
resolve(body);
} else {
reject("请求接口失败");
}
}
);
});
}