实践在线词典项目 | 青训营笔记

98 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

听到在线词典,我们想到的应该就是类似有道翻译的那些在线翻译,而这个项目则像是利用有道在线翻译已经写好的便利,借花献佛,实现我们自己的在线词典。 这个项目主要会用到一个帮助我们生成请求代码的网站和一个帮助我们生成复杂结构体的网站。

- 我主要记录自己遇到的难点或者坑点。

坑点:生成请求代码的网站的使用

在到复制curl这一步时,老师的浏览器和我的浏览器的复制curl这个选项不一样,我的问题在于我的copy as curl无论是cmd版本还是bash版本都无法在终端获取需要的数据串。 如图, 我复制粘贴到cmd后cmd无法正确回应我 在线词典bug1.png 最终解决方案: 最后我发现,不需要复制到终端,直接选择copy as curl(bash)的选项,然后复制到生成代码的网站就行。听起来十分简单的一件事情,本菜鸡弄了40分钟.... 其实这里弄完,之后的步骤已经没坑点了。

不过这个项目编程中,我隐隐感受到go编程的一种思想,就是在这个网络编程项目中,无论是我们请求过来的数据,还是我们发出请求用到的数据结构,go编程中都会将对应的这种数据报的数据结构定义出来,并且结合json的Marshall和unmarshall函数,来使得在编程中我们想取到目标数据变得更加轻松和易于编程。 如下,无论是我们request还是response都会直接定义一种数据结构体来承担传输的角色,这在我使用java和c++编程中是没有见过的。

type dictRuest struct {
   Transtype string `json:"trans_type"`
   Source    string `json:"source"`
   userID    string `json:"user_id"`
}
type dictResponse struct {
   Rc   int `json:"rc"`
   Wiki struct {
   } `json:"wiki"`
   Dictionary struct {
      Entry        string        `json:"entry"`
      Explanations []string      `json:"explanations"`
      Related      []interface{} `json:"related"`
      Source       string        `json:"source"`
      Prons        struct {
      } `json:"prons"`
      Type string `json:"type"`
   } `json:"dictionary"`
}

最后自我总结一下这个项目的大体过程:

  1. 在某目标网页找到我们需要的网络活动请求,然后将其copy as curl
  2. 将copy的东西粘贴到curlconverter.com/go/ 这个网页,就可以得到我们需要的代码。
  3. 运行代码,得到一串json数据,现在我们将用一个结构体来承接这些数据,方便我们的管理使用。
  4. 步骤3、所需的结构体往往复杂,我们将利用代码生成工具来得到该结构体的代码,直接将步骤3、中运行出来的代码复制粘贴到网址oktools.net/json2go ,然后我们就得到了目标结构体代码。
  5. 最后利用好目标结构体,编程获取我们想要的目标数据。