填坑篇——新手小白也能学会的翻译功能终端展示实现| 青训营笔记

69 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天

 ps:由于最近春节事务较多,走亲访友的,还有实验室布置的任务,所以一直是咕咕鸟,本来打算日更的。本文是对于伴学笔记第一天的案例2的代码实现和介绍。

1. 简介

 在我们合理科学上网过程中,经常会出现一些不认识的他国语言的单词,这时候一些翻译软件就有大用了。当然我们也可以选择安装一款拥有多个翻译源的翻译插件。

 可能对于不熟悉的同学来说,这样一款插件十分复杂,但实际上这并不复杂。在本文中我们将以终端作为展示,带领读者通过简单的方法实现翻译功能。

2. 终端翻译的迭代以及代码实现

2.1 使用代码生成软件生成查询代码

 我们以彩云翻译为例,首先按F12将控制台打开,显示相关代码信息,然后点击查看header头。我们可以用Preview预览相关数据。然后复制所需要的json然后利用代码生成网站(curlconverter.com)生成能发送查询请求的代码。具体操作如下:

GY6T~__QB_H{(H)_DWJBIMI.png

具体代码如下:

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”。而相关代码如下图所示:

image.png

2.3 解析resonse body

 在上一阶段代码中,我们已经实现了对request body的代码编写,接下来我们需要将服务器返回的response body中的数据解析出来。

 具体代码如下图所示:

image.png

2.4 打印结果

 在以上的阶段里我们已成功实现了翻译功能的大部分,接下来只需要将结果打印出来即可。

 如下所示:

image.png

3. 课后作业及代码实现

3.1 增加另一种翻译引擎支持

(由于篇幅原因,放于评论区进行代码展示)

3.2 并行请求两种翻译

(由于篇幅原因,放于评论区进行代码展示)