Go语言使用百度翻译api

Posted 这种人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言使用百度翻译api相关的知识,希望对你有一定的参考价值。

Go语言使用百度翻译api

之前做过一个使用百度翻译api的工具,这个工具用于用户的自动翻译功能,是使用C#调用百度翻译api接口,既然在学习Go语言,那必然也是要使用Go来玩耍一番。这里我是这么安排的,使用go做一个web服务,界面就用H5,然后使用用批处理写个脚本,打开go程序,然后打开浏览器(谷歌浏览器)访问。用户可以在浏览器网页中操作,好吧这里的用户估计就只有我会用吧。其中百度翻译api中的sign需要计算md5,那么Go中是如何计算md5的呢?参考如下:

package main

import(
    "fmt"
    "crypto/md5"
    "encoding/hex"
)
//计算文本的md5值
func SumString(content string) string{
    md5Ctx := md5.New()
    md5Ctx.Write([]byte(content))
    bys := md5Ctx.Sum(nil)
    //bys := md5.Sum([]byte(content))//这个md5.Sum返回的是数组,不是切片哦
    value := hex.EncodeToString(bys)
    return value
}
func main(){
    value := SumString("hello")
    fmt.Println(value)
}

以下是完整调用百度翻译API的代码:

package main

import(
    "fmt"
    "crypto/md5"
    "encoding/hex"
    "net/http"
    "time"
    "net/url"
    "io/ioutil"
    "strconv"
)
//申请的信息
var appID = 你的appid
var password = 你的密钥
//百度翻译api接口
var Url = "http://api.fanyi.baidu.com/api/trans/vip/translate"
type TranslateModel struct{
    Q string
    From string
    To string
    Appid int
    Salt int
    Sign string
}
func NewTranslateModeler(q, from, to string) TranslateModel{
    tran := TranslateModel{
        Q: q,
        From: from,
        To: to,
    }
    tran.Appid = appID
    tran.Salt = time.Now().Second()
    content := strconv.Itoa(appID) + q + strconv.Itoa(tran.Salt) + password
    sign := SumString(content)//计算sign值
    tran.Sign = sign
    return tran
}
func (tran TranslateModel) ToValues() url.Values{
    values := url.Values{
        "q": {tran.Q},
        "from": {tran.From},
        "to": {tran.To},
        "appid":{strconv.Itoa(tran.Appid)},
        "salt": {strconv.Itoa(tran.Salt)},
        "sign": {tran.Sign},
    }
    return values
}
//计算文本的md5值
func SumString(content string) string{
    md5Ctx := md5.New()
    md5Ctx.Write([]byte(content))
    bys := md5Ctx.Sum(nil)
    //bys := md5.Sum([]byte(content))//这个md5.Sum返回的是数组,不是切片哦
    value := hex.EncodeToString(bys)
    return value
}
func main(){
    tran := NewTranslateModeler("世界第一223", "zh", "cht")
    values := tran.ToValues()
    resp, err := http.PostForm(Url, values)
    if err != nil{
        fmt.Println(err)
        return
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil{
        fmt.Println(err)
        return
    }
    txt := string(body)
    fmt.Println(txt)
}

这是输出信息:

{"from":"zh","to":"cht","trans_result":[{"src":"u4e16u754cu7b2cu4e00223","dst":"u4e16u754cu7b2cu4e00223"}]}

这里得到的是Unicode编码的字符,如何将这里的Unicode转码?这个目前找了一下,还没有找到合适的方法进行转换。

以上是关于Go语言使用百度翻译api的主要内容,如果未能解决你的问题,请参考以下文章

调用百度翻译API接口功能

使用百度翻译的API接口

使用 Go 从 Gmail API 解码消息正文

python 百度翻译API的示例代码

使用百度翻译api支持中转英,中简转中繁等等

带头大哥777:Java调用百度API实现翻译