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转码?这个目前找了一下,还没有找到合适的方法进行转换。
Go语言使用百度翻译api的更多相关文章
- C# 调用百度翻译Api
这是简单的界面.用的是wpf,winform也可以 具体的操作类 public partial class MainWindow : Window { string url = "" ...
- 原生js简单调用百度翻译API实现的翻译工具
先来个在线demo: js翻译工具 或者百度搜索js简单调用百度翻译API工具(不过有个小小的界面显示bug,我想细心的人应该会发现) 或者直接前往该网址:js翻译工具 或者前往我的github:gi ...
- 百度翻译API(C#)
百度翻译开放平台:点击打开链接 1. 定义类用于保存解析json得到的结果 public class Translation { public string Src { get; set; } pub ...
- 百度翻译api 实现简易微信翻译小程序
介绍 口袋翻译 口袋翻译 微信小程序 翻译功能 含7类语言的相互翻译 包含最近10条的翻译历史回溯功能 微信搜索:简e翻译 功能展示 使用百度翻译api需要申请 appid 与 key 并在 ap ...
- 百度翻译api初使用(很久没写python了,写几行玩玩)
调用free api做做简易的翻译 这个是百度翻译api文档 http://api.fanyi.baidu.com/api/trans/product/apidoc 照着百度api给的文档向web服务 ...
- 申请百度翻译API
申请百度翻译API 0x00 前期准备 百度账号 md5的相关知识 0x01 进入百度开放平台,登录你的百度账号 找到 产品服务 -> 通用翻译API 0x02 点击下面的立即使用按钮,注册成为 ...
- 基于百度翻译API开发属于自己的翻译工具
你是否每天使用着网页翻译工具?你是否遇到过这种情况,上网过程中遇到一个很长的单词但是又不能复制,要开两个浏览器,一个打开百度翻译,照着另一个网页输入单词?你安装了各种翻译软件后,又删除,只因忍受不了那 ...
- Python 调用百度翻译API
由于实习公司这边做的是日文app,有时要看看用户反馈,对于我这种五十音图都没记住的人,表示百度翻译确实还可以.但不想每次都复制粘贴啊,google被墙也是挺蛋疼的事,所以用python结合baidu ...
- WP8.1小梦词典开发2:百度翻译API使用
原文出自:http://www.bcmeng.com/api2/ 小梦昨天和大家分享了WP8.1金山词霸API使用方法,今天继续分享windows phone 8.1中百度翻译API的使用方法.和昨天 ...
随机推荐
- TP5.0:跳转链接到某控制器下的某方法
语法:{:url('控制器名/方法名')} 例如: 结果: 以上 END
- 保存Google、Bing翻译的语音
以Chrome浏览器+google翻译为例,bing的下载步骤也类似 1.打开google翻译页面(translate.google.com),输入一段文本,如下图 2.可以看到,右侧已经翻译好了,这 ...
- 第一次在stack overflow回答问题
越发感觉英语的重要性,尝试阅读英文与写作英文.于是选择了stack overflow来进行实践.作为萌新小白,只学习过C语言,就在c标签下乱逛.尝试看懂一些问题且试着回答. 发现一个问题: I nee ...
- 为什么ssh一关闭,程序就不再运行了?
问题描述 当SSH远程连接到服务器上,然后运行一个程序,eg: ./test.sh, 然后把终端开闭(切断SSH连接)之后,发现该程序中断. 原因 主要元凶: 挂断信号(SIGHUP) 信号 概念介绍 ...
- IOS MapKit框架的使用(专门用于地图显示)
● MapKit框架使用前提 ● 导入框架 ● 导入主头文件#import <MapKit/MapKit.h> ● MapKit框架使用须知 ● MapKit框架中所有数据类型的前 ...
- sql 两表查询后 更新某表中部分字段
这是上一个sql更新某表字段的一个延伸,在更新表数据时,实际上会有多表数据查询场景,查询后,只需要更新某一个表中的数据,以下提供两个方法, 第一种使用update 两表查询 update api_ma ...
- UESTC 574 High-level ancients
分析: 无论父节点增加了多少,子节点的增量总比父节点多1. 这种差分的关系是保存不变的,我们可以一遍dfs根据结点深度得到在根结点的每个点的系数. 估且把一开始的结点深度称做c0吧,对于子树的修改就只 ...
- java线程池系列(1)-ThreadPoolExecutor实现原理
前言 做java开发的,一般都避免不了要面对java线程池技术,像tomcat之类的容器天然就支持多线程. 即使是做偏后端技术,如处理一些消息,执行一些计算任务,也经常需要用到线程池技术. 鉴于线程池 ...
- PAT (Basic Level) Practise (中文)-1040. 有几个PAT(25)
1040. 有几个PAT(25) http://www.patest.cn/contests/pat-b-practise/1040 字符串APPAPT中包含了两个单词“PAT”,其中第一个P ...
- [luoguP1090][Noip2004]合并果子
合并果子 首先来看一下题目: (OI2004合并果子) [题目描述] 果园里,多多已经将所有的果子打了下来,而且按果子的 ...