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":"\u4e16\u754c\u7b2c\u4e00223","dst":"\u4e16\u754c\u7b2c\u4e00223"}]}

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