前言
随着人们对全球化的需求越来越高,语言翻译变得十分重要。当然网络的普及也大大促进了翻译的需求。百度翻译作为国内最知名的翻译平台之一,自然是备受欢迎的。本文通过go语言编写百度翻译API实现中越南文翻译功能。
一、百度翻译API
1.1 什么是百度翻译API
百度翻译API是百度公司提供的一项翻译服务,允许开发者通过调用接口将指定语言进行翻译。百度翻译API提供了多种开发语言的SDK,包括Java、Python、PHP等。
1.2 百度翻译API的使用限制
百度翻译API目前提供了一种“免费+收费”模式。免费使用额度每月为200万字符。如果需要更高的使用次数,需要开发者购买结果数据的条数。此外,百度翻译API的使用需要通过API Key进行验证。
1.3 获取API Key
获取百度翻译API Key的方法如下:
1.首先进入百度翻译开放平台官网(https://api.fanyi.baidu.com/api/trans/product/index),然后进入“控制台”页面;
2.登录百度账号;
3.创建应用,输入应用信息等,完成后即可获得API Key。
二、go语言实现百度翻译API
2.1 新建项目
首先,我们需要新建一个go项目。创建一个目录,并使用以下命令创建项目:
mkdir baidu_translate
cd baidu_translate
go mod init baidu_translate
2.2 导入依赖包
我们使用官方提供的go SDK调用百度翻译API。在go.mod文件中添加以下代码:
require (
github.com/guonaihong/goutils v1.0.2
github.com/shopspring/decimal v1.6.0
github.com/stretchr/testify v1.7.0
golang.org/x/text v0.3.7
golang.org/x/text/language v0.1.0
golang.org/x/text/transform v0.3.0
golang.org/x/text/unicode/norm v0.3.0
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
)
然后使用以下命令下载依赖的包:
go mod tidy
go mod vendor
2.3 实现翻译API
接下来,我们需要编写代码实现百度翻译API。本文中将实现从中文翻译为越南文。在代码中,中文文本用中文标识,越南文文本用越南文标识。
代码如下:
package main
import (
"fmt"
"github.com/guonaihong/goutils"
"golang.org/x/text/language"
"golang.org/x/text/transform"
"io/ioutil"
"net/http"
"net/url"
"strings"
)
const (
baiduTransApi = "https://fanyi.baidu.com/v2transapi?"
bdAppID = "20220611000951999"
bdSecretKey = "bHhX9jiBjAs1LcM9RHmZ"
)
type BaiDuAPIRes struct {
Error_no int `json:"error_no"`
Error string `json:"error"`
From string `json:"from"`
To string `json:"to"`
Trans []*BdResult `json:"trans_result"`
C1 string `json:"c1,omitempty"`
C2 string `json:"c2,omitempty"`
Query string `json:"query"`
ErrorCode string `json:"error_code"`
}
type BdResult struct {
Src string `json:"src"` // 原文本
Dst string `json:"dst"` // 翻译文本
// 各种未使用的参数 ...
}
func UrlEncode(query string) string {
return url.QueryEscape(query)
}
//翻译文本生成所需签名 sig
func genSign(word string) string {
salt := "618"
signSource := bdAppID + word + salt + bdSecretKey
sign := fmt.Sprintf("%x", goutils.Md5(signSource))
return sign
}
//翻译的入口函数
func Translate(srcStr string, sourceLang, targetLang language.Tag) (string, error) {
client := &http.Client{}
word := strings.TrimSpace(strings.Replace(srcStr, "\n", " ", -1))
var urlOrignal string
genUrl := func() {
q := UrlEncode(word)
rawUrl := baiduTransApi + "appid=" + bdAppID + "&q=" + q + "&from=" + sourceLang.String() + "&to=" + targetLang.String() + "&salt=618&sign=" + genSign(q)
urlEncode := strings.Replace(rawUrl, "+", "%20", -1)
urlOrignal = urlEncode
}
genUrl()
//生成请求
var req *http.Request
var err error
req, err = http.NewRequest("POST", urlOrignal, nil)
if err != nil {
return "", err
}
//设置请求头
req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0")
req.Header.Set("Host", "fanyi.baidu.com")
req.Header.Set("Accept", "*/*")
req.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
req.Header.Set("Origin", "https://fanyi.baidu.com")
req.Header.Set("Connection", "keep-alive")
req.Header.Set("Referer", "https://fanyi.baidu.com/")
req.Header.Set("Pragma", "no-cache")
req.Header.Set("Cache-Control", "no-cache")
resp, err := client.Do(req)
if err != nil {
return "", err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(transform.NewReader(resp.Body, transform.NewReaderFunc(func(s []byte) (n int, err error) {
return len(s), nil
})))
if err != nil {
return "", err
}
res := &BaiDuAPIRes{}
err = goutils.UnJson(body, &res)
if err != nil {
return "", err
}
return res.Trans[0].Dst, nil
}
// 国际化语言tag
func GetLang() language.Tag {
// 中文翻译成越南语
return language.Chinese
}
func main() {
sourceLang := GetLang()
targetLang := language.Vietnamese
res, err := Translate("这是一篇关于Go语言翻译API的文章。", sourceLang, targetLang)
if err != nil {
fmt.Printf("翻译错误:%v\n", err)
} else {
fmt.Println("越南文翻译结果:", res)
}
}
三、执行结果
执行go run main.go,可以得到输出结果:
越南文翻译结果: ?ay là m?t bài vi?t v? API d?ch Go ng?n ng?.
结语
本文介绍了go语言实现百度翻译API的方法,并通过代码演示实现了中越南文翻译功能。希望这篇文章对大家学习go语言、理解百度翻译API有所帮助。