这次将记录 在线词典 等功能
需要做的有:
1、得到客户发送HTTP请求(post)到服务器的代码
2、将翻译对象、类型转换为json,用于发送post请求
3、解析返回的数据
4、从解析后的数据得到我们需要的音标、翻译等
复制代码
1、得到客户发送HTTP请求(post)到服务器的代码
在翻译网页的找到post类型的dict
这个dict便包含所需发送http请求的代码
随后复制这个dict
在网页 curlconverter.com/go/ 转换为golang支持的代码并复制到编译器中
2、将翻译对象、类型转换为json,用于发送post请求
将用红线的代码data替换为bytes的只读流
具体方法如下
首先转为json,goz中 JSON 操作非常简单,只要保证某个结构体每个字段的第一个字母是大写,也就是public。
那么这个结构体就能用 JSON.marshaler 去序列化,变成一个 JSON 的字符串。
序列化之后的字符串也能够用 JSON.unmarshaler 去反序列化到一个空的变量里面。
复制代码
于是构造一个与data对应的结构体,创建一个对象request,其TransType为en2zh,Source为变量word,word是输入的英文。
type DictRequest struct {
TransType string `json:"trans_type"`
Source string `json:"source"`
UserID string `json:"user_id"`
}
//随后将request用json.Marshal序列化变成json字符串buf,再把buf转成只读bytes流data
//如下
func main() {
var word string
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)
复制代码
3、解析返回的数据
通过以上两步后,程序是可运行的,打印出的便是服务端返回的json数据
我们需要把这些数据解析
同理,构造一个对应的结构体,并反序列化就是最终需要的数据
复制代码
构造对应结构体
这里需要用到网址 https://oktools.net/json2go 将翻译网页中同一个dict预览,
也就是返回的数据的json类型,如下图
复制代码
将蓝色框内的其复制后并粘贴到网址中,选择任意一个复制到编译器内
复制代码
解析服务端返回的json
通过JSON.unmarshaler反序列化得到先前构造的结构体类型的数据。
DictResponsedictresponsedictresponse
var dictresponse DictResponse
err = json.Unmarshal(bodyText, &dictresponse)
if err != nil {
log.Fatal(err)
}
复制代码
打印出这个dictresponse,如图
4、从解析后的数据得到我们需要的音标、翻译等
fmt.Println("\n", request.Source, "\n", "UK:", dictresponse.Dictionary.Prons.En, "US:", dictresponse.Dictionary.Prons.EnUs)
//以上为获取音标,以下为得到翻译
for _, item := range dictresponse.Dictionary.Explanations {
fmt.Println(item)
}
复制代码
最后输出如下图