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的更多相关文章

  1. C# 调用百度翻译Api

    这是简单的界面.用的是wpf,winform也可以 具体的操作类 public partial class MainWindow : Window { string url = "" ...

  2. 原生js简单调用百度翻译API实现的翻译工具

    先来个在线demo: js翻译工具 或者百度搜索js简单调用百度翻译API工具(不过有个小小的界面显示bug,我想细心的人应该会发现) 或者直接前往该网址:js翻译工具 或者前往我的github:gi ...

  3. 百度翻译API(C#)

    百度翻译开放平台:点击打开链接 1. 定义类用于保存解析json得到的结果 public class Translation { public string Src { get; set; } pub ...

  4. 百度翻译api 实现简易微信翻译小程序

    介绍 口袋翻译 口袋翻译 微信小程序 翻译功能 含7类语言的相互翻译 包含最近10条的翻译历史回溯功能 微信搜索:简e翻译 功能展示   使用百度翻译api需要申请 appid 与 key 并在 ap ...

  5. 百度翻译api初使用(很久没写python了,写几行玩玩)

    调用free api做做简易的翻译 这个是百度翻译api文档 http://api.fanyi.baidu.com/api/trans/product/apidoc 照着百度api给的文档向web服务 ...

  6. 申请百度翻译API

    申请百度翻译API 0x00 前期准备 百度账号 md5的相关知识 0x01 进入百度开放平台,登录你的百度账号 找到 产品服务 -> 通用翻译API 0x02 点击下面的立即使用按钮,注册成为 ...

  7. 基于百度翻译API开发属于自己的翻译工具

    你是否每天使用着网页翻译工具?你是否遇到过这种情况,上网过程中遇到一个很长的单词但是又不能复制,要开两个浏览器,一个打开百度翻译,照着另一个网页输入单词?你安装了各种翻译软件后,又删除,只因忍受不了那 ...

  8. Python 调用百度翻译API

    由于实习公司这边做的是日文app,有时要看看用户反馈,对于我这种五十音图都没记住的人,表示百度翻译确实还可以.但不想每次都复制粘贴啊,google被墙也是挺蛋疼的事,所以用python结合baidu ...

  9. WP8.1小梦词典开发2:百度翻译API使用

    原文出自:http://www.bcmeng.com/api2/ 小梦昨天和大家分享了WP8.1金山词霸API使用方法,今天继续分享windows phone 8.1中百度翻译API的使用方法.和昨天 ...

随机推荐

  1. oracle_great_integration_译文

    website:https://www.oracle.com/corporate/features/great-integrations.html Great Integrations(伟大的整合) ...

  2. March 5 2017 Week 10 Sunday

    If you do what you love, you will never work a day in your life. 做你所爱的事情,你就不会觉得是在工作. Today, one mach ...

  3. ZJOI2019Day1镇海中学游记(3.24~3.27)

    前言 第一次正式参加省选!不管怎么说,虽然明知自己很弱,但还是要尽力去尝试吧! 最好能进前\(100\),不然就没法去\(Day2\)了. \(Mar\ 24th\):出发 今天,我们正式从二中向宁波 ...

  4. redux创建store,处理更新数据

    如果我们想使用redux,第一步需要通过 yarn add redux 来安装redux 安装成功后就需要去创建一个store,怎么创建呢,非常的简单,在src下面创建一个文件夹,这个文件夹名字就叫做 ...

  5. asp.net 在repeater控件中加按钮

    在repeater中加入方法有两种方法: 第一种:是对repeater控件的行添加OnItemCommand事件,添加方法也是有两种 1.在设计页面中,选中repeater控件右击==>属性== ...

  6. Android学习笔记_78_ Android开发中使用软引用和弱引用防止内存溢出

    在<Effective Java 2nd Edition>中,第6条“消除过期的对象引用”提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象 ...

  7. Oracle 数据导出注意事项

    1.数据导出exp.expbd和imp.impbd 区别: exp,imp:既可以在客户端执行也可以在服务端执行,效率慢于expbd.impbd expbd.impbd:只能够在服务端执行,impbd ...

  8. C#添加二维码带加密带logo

    #region 生成QR码,加密与logo在此处修改 public static void CreateQr(string strQrContent, DataTable myTable) { Qr ...

  9. rest_framework--序列化组件

    #####序列化组件##### 一.什么是序列化 在python中一切皆对象,把对象从内存中变成可存储或传输的过程称之为序列化. 你写一个django项目肯定是有前后端交互的吧,虽然django也可以 ...

  10. swap, 不用临时变量如何做到交换a与b

    固定思维通常是需要一个临时变量temp,如果没有这个临时变量呢,其实也不复杂,:) inline void swap(int &a, int &b) /*C用指针吧*/ { a = a ...