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

  • 相关阅读:
    Anaconda的安装和更新
    Python数据分析学习目录
    国标28181sip开源库介绍(陆续补充完备)
    开源sip server & sip client 和开发库 一览
    几种开源SIP协议栈对比
    用TCP穿透NAT(TCP打洞)的实现
    使用TCP协议的NAT穿透技术
    TCP点对点穿透探索--失败
    snmp++开发实例一
    socket跟TCP/IP 的关系,单台服务器上的并发TCP连接数可以有多少
  • 原文地址:https://www.cnblogs.com/zzr-stdio/p/9938289.html
Copyright © 2020-2023  润新知