通过go语言编写百度翻译API实现中越南文翻译功能

前言

随着人们对全球化的需求越来越高,语言翻译变得十分重要。当然网络的普及也大大促进了翻译的需求。百度翻译作为国内最知名的翻译平台之一,自然是备受欢迎的。本文通过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有所帮助。

后端开发标签