这是我参与「第五届青训营」伴学笔记创作活动的第14天
前言
这几天没有上课学习新知识,今天就决定把之前的项目拿出来再温习一下。
项目介绍
实现输入英文单词进行中文翻译的功能,让用户输入一个英文单词,通过调用程序以及第三方API将释义显式打印到用户界面上。
思路
发送http请求,发送用户输入的英文单词,接受返回的汉语释义以及附加信息,最后通过Println函数展示内容
项目技术点:
- 对第三方网站进行网络抓包
- 相关结构体的构造以及相关请求代码的生成
这里选用的是彩云翻译(fanyi.caiyunapp.com/#/) 作为第三方api。
数据结构生成
通过去网站进行抓包,我们可以在dict的数据中找到返回信息的构造,从而仿照其进行代码构造。这里用专门的网站可以去进行操作,我这里直接展示转换后的效果
type DictResponse struct {
Rc int `json:"rc"`
Wiki struct {
KnownInLaguages int `json:"known_in_laguages"`
Description struct {
Source string `json:"source"`
Target interface{} `json:"target"`
} `json:"description"`
ID string `json:"id"`
Item struct {
Source string `json:"source"`
Target string `json:"target"`
} `json:"item"`
ImageURL string `json:"image_url"`
IsSubject string `json:"is_subject"`
Sitelink string `json:"sitelink"`
} `json:"wiki"`
Dictionary struct {
Prons struct {
EnUs string `json:"en-us"`
En string `json:"en"`
} `json:"prons"`
Explanations []string `json:"explanations"`
Synonym []string `json:"synonym"`
Antonym []string `json:"antonym"`
WqxExample [][]string `json:"wqx_example"`
Entry string `json:"entry"`
Type string `json:"type"`
Related []interface{} `json:"related"`
Source string `json:"source"`
} `json:"dictionary"`
}
http请求
client := &http.Client{}
request := DictRequest{TransType: "en2zh", Source: word}
buf, err := json.Marshal(request)
if err != nil {
log.Fatal(err)
}
var data = bytes.NewReader(buf)
req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)
if err != nil {
log.Fatal(err)
}
通过代码建立起一个客户端,对服务器发送http请求 这里的data变量采用了流读取模式,以防信息过大导致程序产生卡顿。
设置请求头
这里需要一一对应,看好别填错就可以。
请求与响应
通过client.DO(request)的方法发送请求,之后再用
bodyText, err := ioutil.ReadAll(resp.Body)
进行响应。
字典输入的数据结构
这里还需要一个请求载荷构造出来的数据结构,
type DictRequest struct {
TransType string `json:"trans_type"`
Source string `json:"source"`
UserID string `json:"user_id"`
}
之后我们就可以愉快地打印出翻译结果了
总结
这个项目比较具有实用意义,只有你自己动手去操作了才知道每一步的具体意义在哪里,在做到项目抓包的时候,之前由于选错了翻译api,中途还遇到了反爬。总的而言,这个项目对于go语言进行http请求上手和响应是比较有帮助的。