这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
ps:由于最近春节事务较多,走亲访友的,还有实验室布置的任务,所以一直是咕咕鸟,本来打算日更的。本文是对于伴学笔记第一天的案例2的代码实现和介绍。
1. 简介
在我们合理科学上网过程中,经常会出现一些不认识的他国语言的单词,这时候一些翻译软件就有大用了。当然我们也可以选择安装一款拥有多个翻译源的翻译插件。
可能对于不熟悉的同学来说,这样一款插件十分复杂,但实际上这并不复杂。在本文中我们将以终端作为展示,带领读者通过简单的方法实现翻译功能。
2. 终端翻译的迭代以及代码实现
2.1 使用代码生成软件生成查询代码
我们以彩云翻译为例,首先按F12将控制台打开,显示相关代码信息,然后点击查看header头。我们可以用Preview预览相关数据。然后复制所需要的json然后利用代码生成网站(curlconverter.com)生成能发送查询请求的代码。具体操作如下:
具体代码如下:
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
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)
}
可以看见,在本阶段的代码中我们主要做了以下几件事:首先是我们我们进行HTTP client请求的创建,然后我们进行了请求头的设置,即设置一些所需要的请求参数。设置好请求头后,我们就进行请求的发起,等待服务器处理完数据后再读取响应数据。通过本阶段的代码,我们也可以熟悉使用一些代码生成软件以实现简化代码编程的作用。
2.2 生成request body
在上一阶段,我们已经实现了使用json数据进行生成请求,但是目前的json依旧是手工生成。故而在本阶段中,我们需要实现输入相关数据自动生成相对应的json结构体。为了实现json结构体的相关操作,在这里我们可以导入一个新的包——“encoding/json”。而相关代码如下图所示:
2.3 解析resonse body
在上一阶段代码中,我们已经实现了对request body的代码编写,接下来我们需要将服务器返回的response body中的数据解析出来。
具体代码如下图所示:
2.4 打印结果
在以上的阶段里我们已成功实现了翻译功能的大部分,接下来只需要将结果打印出来即可。
如下所示:
3. 课后作业及代码实现
3.1 增加另一种翻译引擎支持
(由于篇幅原因,放于评论区进行代码展示)
3.2 并行请求两种翻译
(由于篇幅原因,放于评论区进行代码展示)