steam-upcoming 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/environment.rb +3 -2
- data/lib/steam-upcoming.rb +1 -2
- data/lib/steam-upcoming/cli.rb +18 -15
- data/lib/steam-upcoming/game.rb +7 -2
- data/lib/steam-upcoming/scraper.rb +4 -4
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60f01b9aab0c1d3bacfa0a33fab1b8de15e39770
|
4
|
+
data.tar.gz: b7d96181a097415fa89b3237e37a61cae653815c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cea802dc82d096666bc4e5aacd30e7bf2db61c4023994bf1654f19c75297063dfe8d735df8dc1ec1883715dbd25fee56f1d397cf81440a5b42a49ef3f7460748
|
7
|
+
data.tar.gz: 657b0553e3bb5170b02d7af469bd2a673df95bafd06722b68d959e3da260f412389931ef6cd90e9049e04293c729a1b2a5effbb84fdc3f3b4fe075fd5985137d
|
data/config/environment.rb
CHANGED
@@ -2,6 +2,7 @@ require 'open-uri'
|
|
2
2
|
require 'pry'
|
3
3
|
require 'nokogiri'
|
4
4
|
require "colorize"
|
5
|
-
|
5
|
+
|
6
|
+
require_relative "../lib/steam-upcoming/scraper.rb"
|
6
7
|
require_relative "../lib/steam-upcoming/game.rb"
|
7
|
-
require_relative "../lib/steam-upcoming/
|
8
|
+
require_relative "../lib/steam-upcoming/cli.rb"
|
data/lib/steam-upcoming.rb
CHANGED
data/lib/steam-upcoming/cli.rb
CHANGED
@@ -3,7 +3,6 @@ class SteamUpcoming::CLI
|
|
3
3
|
|
4
4
|
BASE_URL = "http://store.steampowered.com/search/?filter=comingsoon&sort_order=0&filter=comingsoon&page=1"
|
5
5
|
|
6
|
-
|
7
6
|
def initialize
|
8
7
|
@url = "http://store.steampowered.com/search/?filter=comingsoon&sort_order=0&filter=comingsoon&page=1"
|
9
8
|
end
|
@@ -15,21 +14,21 @@ class SteamUpcoming::CLI
|
|
15
14
|
start
|
16
15
|
end
|
17
16
|
|
18
|
-
def make_games(url) #creates the list of
|
17
|
+
def make_games(url) #creates the list of game objects from the chosen URL
|
19
18
|
game_array = SteamUpcoming::Scraper.scrape_index_page(url)
|
20
19
|
SteamUpcoming::Game.create_from_collection(game_array)
|
21
20
|
end
|
22
21
|
|
23
|
-
def pages #generate list of
|
22
|
+
def pages #generate list of page URLs as an array
|
24
23
|
pages = SteamUpcoming::Game.create_pages(SteamUpcoming::Scraper.page_count(BASE_URL))
|
25
24
|
end
|
26
25
|
|
27
26
|
def change_page #allow the users to select another page
|
28
27
|
print "Enter a page number > "
|
29
28
|
input = gets.chomp.strip
|
30
|
-
if @url = pages[input.to_i-1]
|
31
|
-
SteamUpcoming::Game.reset
|
32
|
-
make_games(@url)
|
29
|
+
if @url = pages[input.to_i-1] #use the users input to select the corresponding page URL from the #pages array
|
30
|
+
SteamUpcoming::Game.reset #clear out the class variable so it can be populated with a new list of games
|
31
|
+
make_games(@url) #create the games with the new chosen URL
|
33
32
|
list
|
34
33
|
else
|
35
34
|
puts "#{input}".concat(" is not a valid page number. Please enter a number between 1 and #{pages.count}.").colorize(:red)
|
@@ -62,15 +61,17 @@ class SteamUpcoming::CLI
|
|
62
61
|
end
|
63
62
|
|
64
63
|
def current_page
|
65
|
-
url = @url[-2,2]
|
66
|
-
array = url.split("").map {|x| x.to_i}
|
64
|
+
url = @url[-2,2] #return the last two characters of the URL string
|
65
|
+
array = url.split("").map {|x| x.to_i} #split the two characters into an array
|
67
66
|
array[0] == 0 ? current_page = array[0] + array[1] : current_page = "#{array[0]}".concat("#{array[1]}")
|
67
|
+
#if the first element is a letter (it converts to 0), add it to the second element
|
68
|
+
#if the both elements are numbers, concatenate them and return the new string
|
68
69
|
end
|
69
70
|
|
70
71
|
def start #start the program loop
|
71
72
|
list
|
72
73
|
input = nil
|
73
|
-
while input != "exit"
|
74
|
+
while input != "exit" #loop user input until user types 'exit'
|
74
75
|
puts "\nLearn more about a game by typing a name or number.\n".colorize(:yellow)
|
75
76
|
puts "Enter \'list\'' to list games.".colorize(:light_blue)
|
76
77
|
puts "Enter \'exit\' to exit.".colorize(:light_blue)
|
@@ -80,17 +81,17 @@ class SteamUpcoming::CLI
|
|
80
81
|
if input == "list"
|
81
82
|
list
|
82
83
|
elsif input.to_i == 0 #if input is a name
|
83
|
-
if game = SteamUpcoming::Game.find_by_name(input)
|
84
|
+
if game = SteamUpcoming::Game.find_by_name(input) #find game and list corresponding game
|
84
85
|
list_game(game)
|
85
|
-
elsif input == "exit"
|
86
|
+
elsif input == "exit" #exit the program
|
86
87
|
break
|
87
|
-
elsif input == "page"
|
88
|
+
elsif input == "page" #commence the #change_page method
|
88
89
|
change_page
|
89
90
|
else
|
90
|
-
puts "\'#{input}\'".concat(" is not a valid
|
91
|
+
puts "\'#{input}\'".concat(" is not a valid command.").colorize(:red)
|
91
92
|
end
|
92
|
-
elsif input.to_i > 0 #if a number
|
93
|
-
if game = SteamUpcoming::Game.find(input.to_i)
|
93
|
+
elsif input.to_i > 0 #if a number
|
94
|
+
if game = SteamUpcoming::Game.find(input.to_i) #find number and list corresponding game
|
94
95
|
list_game(game)
|
95
96
|
else
|
96
97
|
puts "\'#{input}\'".concat(" is not a valid number. Please enter a number between 1 and #{SteamUpcoming::Game.all.count}.").colorize(:red)
|
@@ -99,4 +100,6 @@ class SteamUpcoming::CLI
|
|
99
100
|
end
|
100
101
|
puts "\nShutting down...\n".colorize(:red)
|
101
102
|
end
|
103
|
+
|
102
104
|
end
|
105
|
+
|
data/lib/steam-upcoming/game.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# The SteamUpcoming::Game class is responsible for taking informatino scraped from the Steam website
|
2
|
+
# and creating new Game objects with attributes.
|
3
|
+
|
1
4
|
class SteamUpcoming::Game
|
2
5
|
attr_accessor :name, :release_date, :platforms, :url, :about, :tags, :details
|
3
6
|
|
@@ -14,11 +17,11 @@ class SteamUpcoming::Game
|
|
14
17
|
end
|
15
18
|
end
|
16
19
|
|
17
|
-
def add_game_attributes(game_attributes_hash) #add attributes to
|
20
|
+
def add_game_attributes(game_attributes_hash) #add attributes to the Game object
|
18
21
|
game_attributes_hash.each {|key, value| self.send(("#{key}="), value)}
|
19
22
|
end
|
20
23
|
|
21
|
-
def self.create_pages(page_count) #
|
24
|
+
def self.create_pages(page_count) #Create the page urls
|
22
25
|
i = 1
|
23
26
|
pages = []
|
24
27
|
while i <= page_count.to_i
|
@@ -28,10 +31,12 @@ class SteamUpcoming::Game
|
|
28
31
|
pages
|
29
32
|
end
|
30
33
|
|
34
|
+
private
|
31
35
|
def self.all #show all games
|
32
36
|
@@all
|
33
37
|
end
|
34
38
|
|
39
|
+
private
|
35
40
|
def self.reset #clear the list of games
|
36
41
|
@@all.clear
|
37
42
|
end
|
@@ -19,14 +19,14 @@ class SteamUpcoming::Scraper
|
|
19
19
|
game_array
|
20
20
|
end
|
21
21
|
|
22
|
-
def self.gather_platforms(parent) #gather a list of platforms, then return an array of
|
22
|
+
def self.gather_platforms(parent) #gather a list of platforms, then return an array of actual platforms
|
23
23
|
platforms = parent.children.map do |platform|
|
24
24
|
platform.attr('class')
|
25
25
|
end
|
26
26
|
platforms.select {|platform| platform != nil}
|
27
27
|
end
|
28
28
|
|
29
|
-
def self.convert_platforms(platform_array) #
|
29
|
+
def self.convert_platforms(platform_array) #convert the platform array items into actual names, because the source is an image, not text
|
30
30
|
platforms = platform_array.map! do |platform|
|
31
31
|
if platform.include?("win")
|
32
32
|
platform = "Windows"
|
@@ -47,7 +47,7 @@ class SteamUpcoming::Scraper
|
|
47
47
|
platforms.select {|platform| platform != nil}
|
48
48
|
end
|
49
49
|
|
50
|
-
def self.scrape_game_page(game_url)
|
50
|
+
def self.scrape_game_page(game_url) #scrape the page and create a hash of game attributes
|
51
51
|
doc = Nokogiri::HTML(open(game_url))
|
52
52
|
about = doc.css(".game_description_snippet")
|
53
53
|
tags = doc.css(".glance_tags a").map {|tag| tag.text}
|
@@ -59,7 +59,7 @@ class SteamUpcoming::Scraper
|
|
59
59
|
}
|
60
60
|
end
|
61
61
|
|
62
|
-
def self.page_count(index_url)
|
62
|
+
def self.page_count(index_url) #scrape the pages to get the total number of pages
|
63
63
|
doc = Nokogiri::HTML(open(index_url))
|
64
64
|
page_count = doc.css(".search_pagination_right").first.children[5].text.to_i
|
65
65
|
end
|