单词翻译程序 go实现
目的:熟悉go基础语法
package mainimport ("bytes""encoding/json""fmt""io/ioutil""log""net/http""os"
)type RequestParam struct {TransType string `json:"trans_type"`Source string `json:"source"`
}// 将json直接转成结构体
type ResponseNode struct {Rc int `json:"rc"`Wiki struct {KnownInLaguages int `json:"known_in_laguages"`Description struct {Source string `json:"source"`Target interface{} `json:"target"`} `json:"description"`ID string `json:"id"`Item struct {Source string `json:"source"`Target string `json:"target"`} `json:"item"`ImageURL string `json:"image_url"`IsSubject string `json:"is_subject"`Sitelink string `json:"sitelink"`} `json:"wiki"`Dictionary struct {Prons struct {EnUs string `json:"en-us"`En string `json:"en"`} `json:"prons"`Explanations []string `json:"explanations"`Synonym []string `json:"synonym"`Antonym []string `json:"antonym"`WqxExample [][]string `json:"wqx_example"`Entry string `json:"entry"`Type string `json:"type"`Related []interface{} `json:"related"`Source string `json:"source"`} `json:"dictionary"`
}func translate(word string) {// 二、创建请求// 要管理HTTP客户端的头域、重定向策略和其他设置,创建一个Client// http.Client{Timeout: time.Second}可以自由设置请求过期时间client := &http.Client{}// 封装requestDatarequestData := RequestParam{TransType: "en2zh", Source: word}// 三、序列化请求// 将结构体request序列化成JSON格式字符串buf, err := json.Marshal(requestData)if err != nil {// fmt.Println("an error occured while json serialized,err->", err)log.Fatal(err)return}// 将序列化后的字符串转成字节数组data := bytes.NewReader(buf)// var data = strings.NewReader(`{"trans_type":"en2zh","source":"good"}`)// 创建https请求req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)// 判断是否出错if err != nil {log.Fatal(err)}// 设置请求头,注意应该用google的请求头,火狐的请求头有问题req.Header.Set("Connection", "keep-alive")req.Header.Set("sec-ch-ua", `" Not A;Brand";v="99", "Chromium";v="99", "Google Chrome";v="99"`)req.Header.Set("sec-ch-ua-mobile", "?0")req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36")req.Header.Set("app-name", "xy")req.Header.Set("Content-Type", "application/json;charset=UTF-8")req.Header.Set("Accept", "application/json, text/plain, */*")req.Header.Set("os-type", "web")req.Header.Set("X-Authorization", "token:qgemv4jr1y38jyq6vhvi")req.Header.Set("sec-ch-ua-platform", `"Windows"`)req.Header.Set("Origin", "https://fanyi.caiyunapp.com")req.Header.Set("Sec-Fetch-Site", "cross-site")req.Header.Set("Sec-Fetch-Mode", "cors")req.Header.Set("Sec-Fetch-Dest", "empty")req.Header.Set("Referer", "https://fanyi.caiyunapp.com/")req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9")// 四、调用cliend.do发送请求,接受响应resp, err := client.Do(req)// 判断是否请求出错if err != nil {log.Fatal(err)}// 防止内存泄漏defer resp.Body.Close()// 五、读取响应体的数据bodyText, err := ioutil.ReadAll(resp.Body)// // 打印响应的body// fmt.Printf("%s\n", bodyText)// 判断是否出错if err != nil {log.Fatal(err)}if resp.StatusCode != 200 {log.Fatal("bad StatusCode:", resp.StatusCode, "body:", string(bodyText))}// 六、解析响应的body// 声明一个响应body节点var responseData ResponseNode// 反序列化bodyTexterr = json.Unmarshal(bodyText, &responseData)if err != nil {log.Fatal("解析response出错,", err)}// fmt.Printf("%#v\n", responseData)// fmt.Printf("%#v\n", responseData.Dictionary)// fmt.Printf("%#v\n", responseData.Dictionary.Explanations)// 打印翻译的音标fmt.Println(word, "UK:", responseData.Dictionary.Prons.En, "US:", responseData.Dictionary.Prons.EnUs)// 打印翻译结果// 循环range,自带println函数ans := responseData.Dictionary.Explanationsn := len(ans) //翻译的答案的个数if n == 0 {fmt.Println("ans is empty,please try again.")return}for _, value := range ans {println(value)}
}func main() {// 一、动态读取用户输入的英文单词字符串// fmt.Print("Please input a word to be translated: ")// reader := bufio.NewReader(os.Stdin)// word, err := reader.ReadString('\r')// if err != nil {// fmt.Println("an error occured while reading input.", err)// return// }// word = strings.TrimSuffix(word, "\r")// fmt.Printf("word:%s,len:%d\n", word, len(word))// 改成命令行读取用户输入if len(os.Args) != 2 {fmt.Fprintf(os.Stderr, `usage: simleDict WORD
eg: simleDict hello`)os.Exit(1)}// 将命令行中的单词赋值给wordword := os.Args[1]// 调用函数发送请求进行翻译translate(word)
}
命令:
go run main.go
kevin
结果:
kevin UK: [ˈkivin] US: [ˈkεvɪn]
n.凯文(男子名)
单词翻译程序 go实现相关推荐
- 传输层中UDP的深入理解以及socket中UDP的使用
目录 一.学习UDP的预备知识 1.熟悉网络通信中的五元组 (1)源IP地址和目的IP地址 (2)源端口号和目的端口号 (3)协议号 2.什么是客户端和服务端 二.socketAPI中UDP的使用 1 ...
- python利用mysql数据库实现一个中英文翻译程序兼单词试卷生成并改阅功能,并可以爬取有道官网进行在线翻译。
直接上运行截图(代码在后面) 开始界面 使用navicat查看mysql数据库中的数据 单词查询功能测试 本地翻译一个本地数据库中有的单词 本地翻译一个本地数据库中没有的单词 爬取有道官网进行在线翻译 ...
- Java英汉翻译程序_java实现简单的英文文本单词翻译器功能示例
本文实例讲述了java实现简单的英文文本单词翻译器功能.分享给大家供大家参考,具体如下: 直接上代码: package fanyi; import java.io.bufferedreader; im ...
- Python—实训day3—简单的在线翻译程序
4 发送POST请求 4.3 用poster获取有道在线翻译 参考有道翻译:http://fanyi.youdao.com/ 通过Fiddler工具可以获取到 请求的URL地址为:http://fan ...
- python循环五要素_python常见单词在手,编程入门不愁
点击蓝字"python教程"关注我们哟! 前言: 人工智能时代,python编程语言站在风口起飞,2018年7月的世界编程语言排行榜跃居于编程语言前三,2018年的IEEE顶级编程 ...
- 什么是编译程序(含翻译程序、解释程序和中间代码的定义介绍)
文章目录 1.几种基本的翻译程序 1.1翻译程序 1.2汇编程序(Assembler) 1.3编译程序(Compiler) 1.4解释程序(Interpreter) 1.5总结 2.编译程序的运行过程 ...
- 计算机英语单词(软件类)
编程 api(application programming interfaces,应用程序接口) ascii(american standard code for information inter ...
- 翻译java语言的软件_java实现英文翻译程序
本文实例为大家分享了java实现英文翻译程序的具体代码,供大家参考,具体内容如下 1.功能简介 将文本文件中的英文转换为对应的中文 词库如下: 源文件: 翻译后的文件: 输入源文件路径,将翻译后的内容 ...
- 【编译原理】-- 第一章(翻译程序、编译程序、汇编程序、解释程序、编译过程概述)
编译系统 高级语言的优点是有代价的,必须有一个"翻译程序",也就是高级语言必须有相应的软件支持系统,"编译程序+相应的支持用户程序"---编译系统. 一般这种编 ...
最新文章
- 复杂人机智能系统功能分配方法综述
- oracle10g获取Date类型字段无时分秒解决办法!
- [语义]情感分析方向近况·0908
- android 源码下载编译
- 手机端实现点击复制功能
- nc 传输文件和目录
- 字符串和整形、浮点类型的相互转化
- servlet与tomcat的关系
- js app缓存自动刷新_如何通过清除缓存来刷新App Store中的内容
- [C++] iota语句的语法
- html 图片剪裁压缩,HTML5 canvas实现图片拉伸、压缩与裁剪
- JQ基础练习---图片划过变暗
- 改logback logstash-logback-encoder 框架本身的日志级别
- 俩台电脑怎么设置同一局域网_方法 | 把手机上的照片传到电脑上
- 蔚来明年推出Gemini 该系列保持高端定位?
- 【git】Git Submodule管理项目子模块
- Apache Spark 2.2.0 中文文档 - Spark RDD(Resilient Distributed Datasets)
- mysql更改密码_Mysql更改密码、连接mysql、mysql常用命令
- Java学习路线图(2022最新版)你真的只需要看这一篇
- 无人机拉力测试台研制测试过程中的9个关键技术点