这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
首先是学习到了抓包的知识, 通过对浏览器中请求的抓包处理, 快速生成对应的json和结构体代码
通过复制而来的请求url地址, 生成对应的json字符串, 然后通过网站JSON转Golang Struct - 在线工具 - OKTools来自动生成结构体, 大大提高了生产效率
找到我们需要的结构体代码
SimpleMeans struct {
WordName string `json:"word_name"`
From string `json:"from"`
WordMeans []string `json:"word_means"`
Exchange struct {
WordThird []string `json:"word_third"`
WordIng []string `json:"word_ing"`
WordDone []string `json:"word_done"`
WordPl []string `json:"word_pl"`
WordPast []string `json:"word_past"`
} `json:"exchange"`
Tags struct {
Core []string `json:"core"`
Other []string `json:"other"`
} `json:"tags"`
Symbols []struct {
PhEn string `json:"ph_en"`
PhAm string `json:"ph_am"`
Parts []struct {
Part string `json:"part"`
Means []string `json:"means"`
} `json:"parts"`
PhOther string `json:"ph_other"`
} `json:"symbols"`
} `json:"simple_means"`
Lang string `json:"lang"`
这里就是对百度翻译抓包后得到的简单释义的结构体代码, 比纯手写简单高效, 并且不会出错
解析的核心代码如下
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))
}
//fmt.Printf("%s\n", bodyText)
var autoGenerated AutoGenerated
err = json.Unmarshal(bodyText, &autoGenerated)
if err != nil {
log.Fatal(err)
}
fmt.Println("go", "使用百度翻译:data:", autoGenerated.DictResult.SimpleMeans.WordMeans)
首先对结构体进行一个定义, 然后对结构体代码解析 得到我们想要的数据
这里一开始我遇到了一个问题就是, 将结构体生成后, 需要指定一个请求数据,但是权限无法拼接成一个完整的字符串请求 后面反复观看直播课该部分的内容, 发现需要对该请求也要构造一个结构体, 来发送相应的请求
核心代码如下
type DictRequest struct {
TransType string `json:"trans_type"`
Source string `json:"source"`
UserID string `json:"user_id"`
}
client := &http.Client{}
request := DictRequest{TransType: "en2zh", Source: word}
buf, err := json.Marshal(request)
if err != nil {
log.Fatal(err)
}
var data = bytes.NewReader(buf)
req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)