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

  • 相关阅读:
    java—数组乘积输入: 一个长度为n的整数数组input 输出: 一个长度为n的数组result,满足result[i] = input数组中,除了input[i] 之外的所有数的乘积,不用考虑溢出例如 input {2, 3, 4, 5} output: {60, 40, 30, 24}
    深入理解按位异或运算符
    针对数组的三中排序方式:冒泡排序,选择排序,插入排序
    笔试题目整理
    Android中AIDL通信机制分析
    android消息处理机制之2handler与looper,MessageQueue:的关系
    Android消息处理机制(Handler 与Message)---01
    vim 批处理
    React 组件条件渲染的几种方式
    vim命令行模式
  • 原文地址:https://www.cnblogs.com/zzr-stdio/p/9938289.html
Copyright © 2011-2022 走看看