直接上代码,都有注释,可以看,第一个是请求数据的结构体,官方建议,如果请求次数多,可以尝试用数组批量传进去!
彩云官方教程
type DictRequest struct {
TransType string `json:"trans_type"`
Source []string `json:"source"`
RequestId string `json:"request_id"`
Detect bool `json:"detect"`
}
func QueryCaiYun(word []string) (s string, err error) {
client := &http.Client{} //定义客户
request := DictRequest{TransType: "en2zh", Source: word, RequestId: "LoYoi", Detect: true}
buf, err := json.Marshal(request)
if err != nil {
fmt.Println("错误:4")
return word[0], errors.New("没有值")
//log.Fatal(err)
}
req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/translator", bytes.NewReader(buf))
if err != nil {
fmt.Println("错误:3")
//log.Fatal(err) //打印日志,退出程序
return word[0], errors.New("没有值")
}
//设置请求头
req.Header.Set("Accept", "application/json")
req.Header.Set("X-Authorization", "token:")//这里是自己的token
// 发起请求
resp, err := client.Do(req)
if err != nil {
//log.Fatal(err) //打印日志,退出程序
fmt.Println(err.Error() + "2")
return word[0], errors.New("没有值")
}
defer resp.Body.Close() //defer 会在函数结束后从后往前触发,Close() 手动关闭 Body流,防止内存资源泄露
// 读取响应
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
//log.Fatal(err) //打印日志,退出程序
fmt.Println(err.Error() + "1")
return word[0], errors.New("没有值")
}
if resp.StatusCode != 200 { // 防御式编程,判断状态码是否正确
fmt.Println("错误码:" + strconv.Itoa(resp.StatusCode) + "\n错误信息:" + string(bodyText))
return word[0], errors.New("没有值")
//log.Fatal("bad StatusCode:", resp.StatusCode, "body", string(bodyText)) //打印日志,退出程序
}
js, err := simplejson.NewJson(bodyText)
dst := js.Get("target").GetIndex(0).MustString() //.Get("dst").
//fmt.Println(dst)
if dst == "" {
fmt.Println("没找到值")
return word[0], errors.New("没有值")
} else {
return dst, nil //只有成功了,才会返回空值
}
}