CLI Gem项目—十大视频游戏

最初于2018年6月9日从Learn.co博客发布

起初,我认为CLI gem项目将非常困难。 这将是Flatiron课程的面向对象编程部分的最终项目,我想尽我所能。 因此,我广泛研究了演练视频,以便在不知道去哪里的情况下不会开始项目。 观看完视频并吸收了Avi​​给出的所有技巧后,我对该项目感觉好多了。 现在似乎并不那么困难。

因此,我想到了我的应用程序,然后决定使用CLI,该CLI生成了流行视频游戏的前十名。 作为一生的游戏玩家,同时也是前十名的爱好者,我认为这将是我创建的最佳应用程序。 我在网上搜索了列出视频游戏的网站,然后访问了一个名为metacritic.com的网站。 它看起来像是一个完美的网站,它列出了许多游戏属性,例如类型,发行商和平台,我可以将它们整合到Game对象中。 找到该网站后,我着手开始编写我的应用程序代码。

我首先定义了一个中途里程碑—用户界面可以使用,但只会以字符串形式输出“伪数据”。 我定义了这个里程碑,以便至少可以建立一个有效的CLI。 这个里程碑并不难实现-它涉及定义简单的方法,例如#list_games和#specific_game,后者包含了一个包含许多elsif语句的直到循环。 我本可以使用case语句,但是我个人认为if / elsif / else语句更易于管理。

因此,我设法使用户界面正常工作。 在应用启动时,它将打印出前十名视频游戏的列表以及所有相关数据。 CLI还能够响应来自gets.strip的用户输入,并显示一个供用户复制/粘贴的URL,然后输入是否键入特定游戏的编号进入该URL。 但是随后出现了过程中更具挑战性的部分-编写有效的面向对象代码,然后从该网站抓取。 我最初想创建一个包含其自己的Scraper对象类的单独文件。 但是后来我发现将刮板定义为Game对象自己的类方法会更容易。 至于创建游戏对象,我最初有一个#initialize方法,但是当我意识到每个新的Game实例都将由#scrape_games方法设置其所有属性(名称,发行日期等)时,便废弃了。

该过程中最令人沮丧的部分是发现我的抓取方法无效。 使用binding.pry,我发现该应用程序启动时Nokogiri没有运行,因此我查找了如何正确安装Nokogiri gem并在正确的文件中对其进行要求。 我用environment.rb文件制作了一个单独的配置文件夹,其中包含所有要求。 我还有一个单独的文件,其中包含所有lib文件,它们彼此“相对”。 经历了所有这些之后,我很失望地发现我无法抓取metacritic.com,因为出现了“ 403 forbidden Open :: HTTP”错误。 令我感到沮丧的是,我不得不花更多的时间查找其他网站并重写所有抓取代码。

但是,我并没有因此阻止我完成我的应用程序。 我很快找到了另一个提供视频游戏列表的网站ranker.com。 该游戏列出了每天都会重新出现的50种最受欢迎​​的视频游戏-这是完美的,因为这意味着用户每天会收到不同的列表,具体取决于每个游戏收到的赞成票或反对票数。 因此,我将抓取代码重构为使用新网站,并且经过大量调试后,终于有了可以使用的抓取方法! 我最终在#each迭代器中使用带有索引递增或增量的while循环来创建10个新的Game实例,设置其属性,并将其推入数组。 最终产品按从1到10的顺序打印出每个游戏的名称,并提示用户输入数字1到10以查看有关每个游戏的更多详细信息,或键入“退出”以退出该应用程序。 我还摆脱了许多elsif语句,转而使用更紧凑的if语句使用整数和索引。 我对我的成品感到满意,但是我知道我可以随时对其进行改进,因此,在我进行技术审查后,我急切地等待反馈。

请继续关注我的编码之旅的更多更新…