这是我参与「第五届青训营 」笔记创作活动的第1天
今天第一节GO基础课上老师用彩云翻译实现了命令行词典的demo,还留了个作业就是为命令行词典添加另外一种翻译引擎的支持,老师提了可以用字节的火山翻译,我就打算用火山翻译来写。
打开火山翻译,照着老师的方法打开检查开始找请求,好家伙给我一通找,最后可算找到了。
赶紧看一看请求负载吧,这个source:"youdao",哈哈原来用的是有道词典的翻译引擎。
后面就是照着老师的操作来写程序了:
package main
import (
"bufio"
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"os"
)
type HuoshanResponse struct {
Details []struct {
Detail string `json:"detail"`
Extra string `json:"extra"`
} `json:"details"`
BaseResp struct {
StatusCode int `json:"status_code"`
StatusMessage string `json:"status_message"`
} `json:"base_resp"`
}
type HuoshanDictRequest struct{
Source string `json:"source"`
Words []string `json:"words"`
SourceLanguage string `json:"source_language"`
TargetLanguage string `json:"target_language"`
}
func huoshanquery(word string){
client := &http.Client{}
request := HuoshanDictRequest{ Source: "youdao",Words: []string{word},SourceLanguage: "en",TargetLanguage: "zh"}
buf, err := json.Marshal(request)
if err != nil {
log.Fatal(err)
}
var data = bytes.NewReader(buf)
req, err := http.NewRequest("POST", "https://translate.volcengine.com/web/dict/detail/v1/?msToken=&X-Bogus=DFSzswVLQDGcFyCWSZUOfGoB6lBt&_signature=_02B4Z6wo00001i2HznAAAIDDPdkrSx1W1C4th8rAAOiwlFIk-hy0pcOtY6jjbbX7KRsdnC3qCuzjJTJc.7WvVnqgQuS9O2vkchPbmcXRT9fKOz3Yd4qrbanLtiQPQwvNIYnY40ojCXIGaY1Wb3", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("authority", "translate.volcengine.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("content-type", "application/json")
req.Header.Set("cookie", "x-jupiter-uuid=16737676287636246; i18next=zh-CN; s_v_web_id=verify_lcx214c6_bE7wDboo_yMsE_4OdX_BUpz_idZD74R2d7Sa; ttcid=ef9bbd23728740caa5bd35f414d6ce2e56; tt_scid=NdZmFEkYXl.Og48L13ge7xK4K1JwkSKjcWlCdhTtzbwtyiF2PvM7GTUMhT.CqnDgb2bb")
req.Header.Set("origin", "https://translate.volcengine.com")
req.Header.Set("referer", "https://translate.volcengine.com/?category=&home_language=zh&source_language=detect&target_language=zh&text=have%20a%20nice%20day")
req.Header.Set("sec-ch-ua", `"Not_A Brand";v="99", "Microsoft Edge";v="109", "Chromium";v="109"`)
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", "same-origin")
req.Header.Set("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.52")
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)
}
if resp.StatusCode!=200{
log.Fatal("bad StatusCode:",resp.StatusCode,"body",string(bodyText))
}
var huoshanresponse HuoshanResponse
err = json.Unmarshal(bodyText,&huoshanresponse)
if err != nil{
log.Fatal(err)
}
out := huoshanresponse.Details[0].Extra
fmt.Println(out[12:len(out)-2])
}
func main() {
fmt.Print("请输入待翻译句子:\n")
reader := bufio.NewReader(os.Stdin)
word,_,err := reader.ReadLine()
if err!=nil{
panic(err)
}
huoshanquery(string(word))
}
这个火山翻译输入得是包着string的slice,然后输出相比于彩云翻译较少,就一个翻译,下面就是这个demo的实际效果
顺便也祝大家新年快乐!