recently_ps4_games 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e0c5a5a232f395ced7e1032e4036d81d26f3db11
4
+ data.tar.gz: f20efd1eaaee29a345add70c15613eae862a1468
5
+ SHA512:
6
+ metadata.gz: 60bd26551ba9b335ba29f89fbfbec3bf67e6205dcf2ee9e36d4d03f6803ab96ddcc7d2e546fdfd78b65abc775e6335c42f597ff1c984cd244262429fc45f11c9
7
+ data.tar.gz: f33fb1bc147c640364739f82e1edf2141efc561704699a653824818213546ad89b9f1494d908faa94aa81b0b78f92ac6f0b73fcbf5d8b2411b5cb79e39e0f5ee
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/recently_ps4_games.rb'
4
+
5
+ RecentlyPs4Games::Cli.new.call
@@ -0,0 +1,75 @@
1
+ class RecentlyPs4Games::Cli
2
+
3
+ def call
4
+ puts "Welcome to recently_ps4_games!!"
5
+ puts "...now makinging games list..."
6
+ make_games # as Game Instance
7
+ interact_with_user # display list, ask input, display details
8
+ puts "Bye!"
9
+ end
10
+
11
+ def make_games
12
+ games_arr = RecentlyPs4Games::Scraper.scrape_game_list
13
+ RecentlyPs4Games::Game.create_by_games_arr(games_arr)
14
+ end
15
+
16
+ def interact_with_user
17
+ display_list
18
+ display_detail(get_detail(ask_what_to_detail))
19
+ interact_with_user unless ask_exit?
20
+ end
21
+
22
+ def display_list
23
+ RecentlyPs4Games::Game.all.each do |game|
24
+ puts "#{game.id}. #{game.title}"
25
+ end
26
+ end
27
+
28
+ def ask_what_to_detail
29
+ puts "What game would you like to get details?"
30
+ puts "Please input NUMBER."
31
+ input = gets.strip.to_i
32
+ until input.between?(1, RecentlyPs4Games::Game.all.size) do
33
+ puts "Please input valid NUMBER."
34
+ input = gets.strip.to_i
35
+ end
36
+ input
37
+ end
38
+
39
+ def get_detail(id)
40
+ game = RecentlyPs4Games::Game.find_by_id(id)
41
+ detail = RecentlyPs4Games::Scraper.scrape_details(game.detail_url)
42
+ game.add_attributes(detail)
43
+ end
44
+
45
+ def display_detail(game)
46
+ puts ""
47
+ puts "-------------------------------"
48
+ puts "\e[1m#{game.id}. #{game.title}\e[0m"
49
+ puts ""
50
+ puts "#{game.discription}"
51
+ puts ""
52
+ puts "\e[2mRelease date : \e[0m #{game.release_date}"
53
+ puts "\e[2mGenre : \e[0m #{game.genre}"
54
+ puts "\e[2mPublisher : \e[0m #{game.publisher}"
55
+ puts "\e[2mDeveloper : \e[0m #{game.developer}"
56
+ puts "-------------------------------"
57
+ puts ""
58
+ end
59
+
60
+ def ask_exit?
61
+ puts "Do you want to exit? (y/n)"
62
+ input = gets.strip
63
+ until input == "y" || input == "n" do
64
+ puts "Do you want to exit? (y/n)"
65
+ puts "Please input 'y' to exit, 'n' to continue."
66
+ input = gets.strip
67
+ end
68
+ if input == "y"
69
+ true
70
+ elsif input == "n"
71
+ false
72
+ end
73
+ end
74
+
75
+ end
@@ -0,0 +1,37 @@
1
+ class RecentlyPs4Games::Game
2
+ attr_accessor :id, :title, :detail_url, :discription, :release_date, :genre, :publisher, :developer
3
+
4
+ @@all = []
5
+
6
+ def initialize(game_hash)
7
+ game_hash.each do |k, v|
8
+ self.send("#{k}=", v)
9
+ end
10
+ @@all << self
11
+ @id = @@all.size
12
+ self
13
+ end
14
+
15
+ def self.create_by_games_arr(games_arr)
16
+ games_arr.each do |game|
17
+ self.new(game)
18
+ end
19
+ end
20
+
21
+ def self.find_by_id(id)
22
+ self.all.detect do |game|
23
+ game.id == id
24
+ end
25
+ end
26
+
27
+ def add_attributes(details_hash)
28
+ details_hash.each do |k, v|
29
+ self.send("#{k}=", v)
30
+ end
31
+ self
32
+ end
33
+
34
+ def self.all
35
+ @@all
36
+ end
37
+ end
@@ -0,0 +1,42 @@
1
+ class RecentlyPs4Games::Scraper
2
+
3
+ def self.get_dynamic_page_html
4
+ Selenium::WebDriver::PhantomJS.path = Phantomjs.path
5
+ browser = Watir::Browser.new(:phantomjs)
6
+ browser.goto "https://www.playstation.com/en-us/explore/games/ps4-games/"
7
+ browser.html
8
+ end
9
+
10
+ def self.scrape_game_list
11
+ games_arr = []
12
+ list_page = Nokogiri::HTML(self.get_dynamic_page_html)
13
+ game_grids = list_page.css("div.inlineTabs.section.gameGrid")
14
+ game_grids.each do |game_grid|
15
+ games = game_grid.css("ul.clearfix li.layout-type-1 div.tile.clearfix div.game-tile-details h2 a.title")
16
+ games.each do |game|
17
+ games_arr << {
18
+ title: game.text,
19
+ detail_url: game.attr("href")
20
+ }
21
+ end
22
+ end
23
+ games_arr
24
+ end
25
+
26
+ def self.scrape_details(url)
27
+ detail_page = Nokogiri::HTML(open(url))
28
+ prod_meta = detail_page.css("div.prod-meta")
29
+ release_info = prod_meta.css("ul.release-info li")
30
+
31
+ details = {
32
+ discription: prod_meta.css("p.teaser").text,
33
+ release_date: release_info.css("span.releasedate").text.delete("\n\t"),
34
+ genre: release_info[1].children[2].text.delete("\n\t"),
35
+ publisher: release_info[2].children[1].text.delete("\n\t"),
36
+ developer: release_info[3].children[1].text.delete("\n\t")
37
+ }
38
+
39
+ details
40
+ end
41
+
42
+ end
@@ -0,0 +1,3 @@
1
+ module RecentlyPs4Games
2
+ VERSION = "0.2.0"
3
+ end
@@ -0,0 +1,13 @@
1
+ module RecentlyPs4Games
2
+ end
3
+
4
+ require 'pry'
5
+ require 'open-uri'
6
+ require 'nokogiri'
7
+ require 'watir-webdriver'
8
+ require 'phantomjs'
9
+
10
+ require_relative "recently_ps4_games/cli.rb"
11
+ require_relative "recently_ps4_games/game.rb"
12
+ require_relative "recently_ps4_games/scraper.rb"
13
+ require_relative "recently_ps4_games/version.rb"
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: recently_ps4_games
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - ayafushimi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-10-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: watir-webdriver
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '0.9'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '0.9'
41
+ - !ruby/object:Gem::Dependency
42
+ name: phantomjs
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '2.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '2.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.13'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '1.13'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: '3.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: With this gem, you can see the lists of new and upcoming PS4 games and
112
+ inquire the details in CLI.
113
+ email:
114
+ - aya.fushimi@gmail.com
115
+ executables:
116
+ - recently_ps4_games
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - bin/recently_ps4_games
121
+ - lib/recently_ps4_games.rb
122
+ - lib/recently_ps4_games/cli.rb
123
+ - lib/recently_ps4_games/game.rb
124
+ - lib/recently_ps4_games/scraper.rb
125
+ - lib/recently_ps4_games/version.rb
126
+ homepage: https://github.com/ayafushimi/recently_ps4_games_cli_gem
127
+ licenses:
128
+ - MIT
129
+ metadata: {}
130
+ post_install_message:
131
+ rdoc_options: []
132
+ require_paths:
133
+ - lib
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - '>='
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ requirements: []
145
+ rubyforge_project:
146
+ rubygems_version: 2.6.7
147
+ signing_key:
148
+ specification_version: 4
149
+ summary: Recently PS4 Games
150
+ test_files: []