Go项目&在线词典| 青训营笔记

94 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第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"`
}

之后我们就可以愉快地打印出翻译结果了

QQ图片20230202141522.png

总结

这个项目比较具有实用意义,只有你自己动手去操作了才知道每一步的具体意义在哪里,在做到项目抓包的时候,之前由于选错了翻译api,中途还遇到了反爬。总的而言,这个项目对于go语言进行http请求上手和响应是比较有帮助的。