这是我参与[第五届青训营]伴学笔记创作的第一天
利用Go实现在线查词Demo
实现原理:
- 利用http请求一个在线翻译网页;
- 然后在控制台输入单词,将数据序列化发送给网页;
- 把网页返回过来的结果进行解析。
1 Go 实现简单的在线词典
1.1 chrome浏览器打开火山翻译,右键检查
输入一个单词进行翻译,发起请求,查看Network中的Headers是post请求的,并且Response里有翻译内容的
1.2 获取cURL(bash)
1.3 实现go代码
将复制的URL粘贴到该网站,即可生成对应的go代码。 代码转换
编写结构体如下
type DictRequest struct {
TransType string `json:"trans_type"`
Source string `json:"source"`
UserID string `json:"user_id"`
}
通过代码访问在线翻译网页获取数据
client := &http.Client{}
var data = strings.NewReader(`{"trans_type":"en2zh","source":"good"}`)
req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Connection", "keep-alive")
req.Header.Set("DNT", "1")
req.Header.Set("os-version", "")
req.Header.Set("sec-ch-ua-mobile", "?0")
req.Header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36")
req.Header.Set("app-name", "xy")
req.Header.Set("Content-Type", "application/json;charset=UTF-8")
req.Header.Set("Accept", "application/json, text/plain, */*")
req.Header.Set("device-id", "")
req.Header.Set("os-type", "web")
req.Header.Set("X-Authorization", "token:qgemv4jr1y38jyq6vhvi")
req.Header.Set("Origin", "https://fanyi.caiyunapp.com")
req.Header.Set("Sec-Fetch-Site", "cross-site")
req.Header.Set("Sec-Fetch-Mode", "cors")
req.Header.Set("Sec-Fetch-Dest", "empty")
req.Header.Set("Referer", "https://fanyi.caiyunapp.com/")
req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9")
req.Header.Set("Cookie", "_ym_uid=16456948721020430059; _ym_d=1645694872")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
将返回的结果进行解析,方便操作:JSON转Golang Struct - 在线工具 - OKTools 生成如下结构体:
最后运行程序结果如下: 在控制台输入一个单词,然后返回发音与翻译。
详细代码查询:Go实现在线查词