不以物喜,不以己悲

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

posted @ 2018-11-10 08:22  这种人  阅读(1157)  评论(0编辑  收藏  举报