一个在线翻译小词典
要联网哟
我没有进行老师最后一步,得再整合一下
1.首先我们要抓包
先别看起来有很多的代码,大部分都是生成的。 首先我们打开一个彩云小译,我觉的老师选这个是有意图的。可能我水平有限,还不够上道。 随便输入一个单词。再打开发者工具,在上面选择网络,找到dist这个选项,右击复制url,
2.进行转换成go
把复制的url贴到Convert curl to Go (curlconverter.com)这个网站,就可以生成了,如下代码
package main
import (
"fmt"
"io"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{"trans_type":"en2zh","source":"go"}`)
req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("authority", "api.interpreter.caiyunai.com")
req.Header.Set("accept", "application/json, text/plain, */*")
req.Header.Set("accept-language", "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6")
req.Header.Set("app-name", "xy")
req.Header.Set("content-type", "application/json;charset=UTF-8")
req.Header.Set("device-id", "9a71480180f0fa65ceafeec2b5eb62a9")
req.Header.Set("origin", "https://fanyi.caiyunapp.com")
req.Header.Set("os-type", "web")
req.Header.Set("os-version", "")
req.Header.Set("referer", "https://fanyi.caiyunapp.com/")
req.Header.Set("sec-ch-ua", `"Not/A)Brand";v="99", "Microsoft Edge";v="115", "Chromium";v="115"`)
req.Header.Set("sec-ch-ua-mobile", "?0")
req.Header.Set("sec-ch-ua-platform", `"Windows"`)
req.Header.Set("sec-fetch-dest", "empty")
req.Header.Set("sec-fetch-mode", "cors")
req.Header.Set("sec-fetch-site", "cross-site")
req.Header.Set("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.188")
req.Header.Set("x-authorization", "token:qgemv4jr1y38jyq6vhvi")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
在这之后运行,出现了一大串的url样的
之后为了是数据写入,生成了一个结构体
type Dist struct {
TransType string `json:"trans_type"`
Source string `json:"source"`
User string `json:"User"`
}
在上面知道传过去的是一个json的数据,所有我们用自带的库,通过结构体在转为json
获得结果
就算有了如上代码,还是得不到想要的结果,得到了一个数组的数据,我们还是要把数据转换,也要有一个结构体,但要定义的东西太多,我们利用JSON转Golang Struct - 在线工具 - OKTools这个网站就可以得到想要的结构体,但我没有成功(复制了结构体)也不知道那出问题,一粘就说出现在1处有]少了这个,在之后就是对数据进行切割
var dictResponse DictResponse
err = json.Unmarshal(bodyText, &dictResponse)
if err != nil {
log.Fatal(err)
}
fmt.Println(request.Source, "UK:", dictResponse.Dictionary.Prons.En, "US:", dictResponse.Dictionary.Prons.EnUs)
for _, item := range dictResponse.Dictionary.Explanations {
fmt.Println(item)
}
结果如下
最后
我本来想试试百度翻译,但看那个数据传出,不是json格式,橡一个表单一样,还是太菜了