码迷,mamicode.com
首页 > 编程语言 > 详细

Go语言使用百度翻译api

时间:2018-11-10 10:48:16      阅读:635      评论:0      收藏:0      [点我收藏+]

标签:lock   fan   http   sign   post   pid   hex   b2c   second   

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转码?这个目前找了一下,还没有找到合适的方法进行转换。

Go语言使用百度翻译api

标签:lock   fan   http   sign   post   pid   hex   b2c   second   

原文地址:https://www.cnblogs.com/zzr-stdio/p/9938289.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!