= "apple" # 翻译内容
q = "en" # 输入语种
from = "zh" # 输出语种
to = "2015063000000001" # 用户APP ID
appid = "1435660288" # 随机码
salt = "12345678" # 用户密钥 key
API接口文档
百度翻译API的url http://api.fanyi.baidu.com/api/trans/vip/translate 接口文档:https://fanyi-api.baidu.com/product/113
接入方式 通用翻译API通过 HTTP 接口对外提供多语种互译服务。您只需要通过调用通用翻译API,传入待翻译的内容,并指定要翻译的源语言(支持源语言语种自动检测)和目标语言种类,就可以得到相应的翻译结果。
通用翻译API HTTPS 地址: https://fanyi-api.baidu.com/api/trans/vip/translate
签名生成方法
签名是为了保证调用安全,使用 MD5 算法生成的一段字符串,生成的签名长度为 32 位,签名中的英文字符均为小写格式。
生成方法:
- Step1. 将请求参数中的APPID(appid),翻译query(q,注意为UTF-8编码),随机数(salt),以及平台分配的密钥(可在管理控制台查看)按照 appid+q+salt+密钥的顺序拼接得到字符串 1。 Step2. 对字符串 1 做 MD5,得到 32 位小写的 sign。 注: 1. 待翻译文本(q)需为 UTF-8 编码;
- 2.在生成签名拼接 appid+q+salt+密钥字符串时,q不需要做URLencode,在生成签名之后,发送 HTTP 请求之前才需要对要发送的待翻译文本字段q 做 URL encode;
- 3.如遇到报 54001签名错误,请检查您的签名生成方法是否正确,在对sign进行拼接和加密时,q不需要做 URL encode,很多开发者遇到签名报错均是由于拼接 sign 前就做了URL encode; - 4.在生成签名后,发送 HTTP 请求时,如果将 query拼接在URL上,需要对 query 做 URL encode。
输入参数
请求方式: 可使用 GET 或 POST 方式,如使用POST方式,Content-Type请指定为:application/x-www-form-urlencoded字符编码:统一采用UTF-8编码格式
query长度:为保证翻译质量,请将单次请求长度控制在 6000bytes以内(汉字约为输入参数 2000 个)
输出参数
返回的结果是json格式,包含以下字段:
字段名 | 类型 | 描述 | 备注 |
---|---|---|---|
from | string | 源语言 | 返回用户指定的语言,或者自动检测出语种 |
to | string | 目标语言 | 返回用户指定的目标语言 |
trans_result | array | 翻译结果 | 包括src和dst字段 |
R语言代码
创建URL
下面使用R语言代码实现说明文档中的接入举例,即创建URL。 首先需要准备以下字段(变量):
# URL的通用地址:
= "https://fanyi-api.baidu.com/api/trans/vip/translate"
url1
# 生成签名sign。说明文档中介绍这个过程需要进行MD5加密,在R语言中可以使用openssl工具包中的md5()函数:
= paste0(appid, q, salt, key)
sign library(openssl)
= md5(sign)
sign
sign
[1] "ac5d3d18797ba7462a02122cbbb5c17f"
# URL的查询地址
<- paste0("q=",q, "&from=", from, "&to=", to,
url2 "&appid=", appid, "&salt=", salt,
"&sign=", sign)
url2
[1] "q=apple&from=en&to=zh&appid=20191211000365104&salt=143566022288&sign=ac5d3d18797ba7462a02122cbbb5c17f"
# 拼接形成完整的URL
= paste0(url1, "?", url2)
url
url
[1] "https://fanyi-api.baidu.com/api/trans/vip/translate?q=apple&from=en&to=zh&appid=20191211000365104&salt=143566022288&sign=ac5d3d18797ba7462a02122cbbb5c17f"
modify_url函数
上节拼接URL的查询地址的过程显得非常繁琐,我们可以使用httr工具包中的modify_url()函数简化这一过程:
library(httr)
= modify_url("http://api.fanyi.baidu.com/api/trans/vip/translate",
url query = list(q = q, from = from, to = to,
appid = appid,
salt = salt,
sign = sign))
url
[1] "http://api.fanyi.baidu.com/api/trans/vip/translate?q=apple&from=en&to=zh&appid=20191211000365104&salt=143566022288&sign=ac5d3d18797ba7462a02122cbbb5c17f"
get函数
使用上面创建的url作为GET()函数的参数:
GET(url)
Response [http://api.fanyi.baidu.com/api/trans/vip/translate?q=apple&from=en&to=zh&appid=20191211000365104&salt=143566022288&sign=ac5d3d18797ba7462a02122cbbb5c17f]
Date: 2022-10-31 08:43
Status: 200
Content-Type: application/json
Size: 77 B
输出结果中,Status为200,表示请求成功;此外,404表示请求文件不存在(file not found),403表示请求被拒绝(permission denied)。 Content-Type为application/json表示响应数据为json类型,可以使用jsonlite工具包中的fromJSON()函数抓取数据。 另外,GET()函数继承了modify_url()函数的参数,因此3.2节和本节的代码可以合并成如下形式:
= GET("http://api.fanyi.baidu.com/api/trans/vip/translate",
result query = list(q = q, from = from, to = to,
appid = appid,
salt = salt,
sign = sign))
content(result)
$from
[1] "en"
$to
[1] "zh"
$trans_result
$trans_result[[1]]
$trans_result[[1]]$src
[1] "apple"
$trans_result[[1]]$dst
[1] "苹果"
可以看出翻译结果提取方式如下(没用到fromJSON函数):
content(result)$trans_result[[1]]$dst
[1] "苹果"
上述代码封装成函数
<- function(q = "apple",
trans from = "auto",
to = "zh",
appid = "",
salt = "1435660288",
key = ""
) { require(httr)
require(jsonlite)
require(openssl)
= paste0(appid, q, salt, key)
sign = md5(sign)
sign = GET("http://api.fanyi.baidu.com/api/trans/vip/translate",
url query = list(q = q, from = from, to = to,
appid = appid,
salt = salt,
sign = sign))
}
测试下函数功能
trans()
[1] "苹果"
trans("Amplified networking debugging features")
[1] "增强的网络调试功能"
# 转英语
trans("R语言学堂", from = "auto", to = "en")
[1] "R Language School"