steam-prices 0.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md ADDED
File without changes
@@ -0,0 +1,25 @@
1
+ module SteamPrices
2
+ class Country
3
+
4
+ @currencies = {
5
+ 'usd' => 'us',
6
+ 'gbp' => 'uk',
7
+ 'aud' => 'au',
8
+ 'eur' => 'at',
9
+ 'eur' => 'de',
10
+ 'nok' => 'no' }
11
+
12
+ class << self; attr_reader :currencies; end
13
+
14
+ def initialize
15
+ end
16
+
17
+ def self.get_currency(country)
18
+ return (country.length == 2 ? @currencies.index(country) : nil)
19
+ end
20
+
21
+ def self.get_country(currency)
22
+ return (currency.length == 3 ? @currencies[currency] : nil)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,24 @@
1
+ module SteamPrices
2
+ class Game
3
+
4
+ include Updater
5
+
6
+ attr_reader :app_id, :app_name, :store_link, :logo_link, :date_released, :price
7
+
8
+ def initialize(app_name = nil, app_id = nil, store_link = nil, logo_link = nil, date_released = nil, price = nil)
9
+ @app_id = app_id.to_i
10
+ @app_name = app_name.to_s
11
+ @store_link = store_link
12
+ @logo_link = logo_link
13
+ @date_released = date_released
14
+ raise ArgumentError, "Expected: Money()" if price.class.name != 'Money' && price != nil
15
+ @price = price
16
+ end
17
+
18
+ def update(currency = nil)
19
+ return nil if !@app_name or @app_id == 0
20
+ self.class.update_one(@app_name, @app_id, currency)
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,87 @@
1
+ module SteamPrices
2
+ module Updater
3
+
4
+
5
+
6
+ def self.included(base)
7
+ base.extend ClassMethods
8
+ end
9
+
10
+
11
+
12
+
13
+ module ClassMethods
14
+ def currency(c)
15
+ return (c.nil? && SteamPrices::Country.currencies) || { c => SteamPrices::Country.get_country(c) }
16
+ end
17
+
18
+
19
+ # update a single one
20
+ def update_one(name, app_id, currency = nil)
21
+ prices = Hash.new
22
+
23
+ @countries = self.currency(currency) if !currency.nil?
24
+
25
+ @countries.each do |curr, country|
26
+ doc = Nokogiri::HTML(open(URI.encode("http://store.steampowered.com/search/results?sort_by=Name&sort_order=ASC&category1=998&cc=#{country}&v6=1&page=1&term=#{name}")))
27
+ price = doc.xpath('.//a[regex(., "/store\.steampowered\.com\/app\/' + app_id.to_s + '/")]', Class.new {
28
+ def regex node_set, regex
29
+ node_set.find_all { |node| node['href'] =~ /#{regex}/ }
30
+ end
31
+ }.new).search('.search_price').text.gsub(/[\W_]/, '').to_i
32
+ prices[curr] = Money.new(price, curr)
33
+ end
34
+ prices
35
+ end
36
+
37
+
38
+ # display stolen from https://github.com/spezifanta/SteamCalculator-Scripts/blob/master/getGames
39
+ def update_all(currency = nil, display = true)
40
+ games = Array.new
41
+
42
+ @countries = self.currency(currency) if !currency.nil?
43
+
44
+ @countries.each do |curr, country|
45
+ doc = Nokogiri::HTML(open(URI.encode("http://store.steampowered.com/search/results?sort_by=Name&sort_order=ASC&category1=998&cc=#{country}&v6=1&page=1")))
46
+ gamesPerPage, totalGames = doc.search('.search_pagination_left')[0].text.match(/showing\s\d+\s-\s(\d+)\sof\s(\d+)/m).captures
47
+
48
+ totalPages = (totalGames.to_i / gamesPerPage.to_i).ceil
49
+
50
+ for i in 1..totalPages
51
+
52
+ if display then
53
+ printf "\n Loading '#{country}', page %02d of %02d \n", i, totalPages
54
+ printf " Entries % 5d - % 5d of %d \n", ((i - 1) * gamesPerPage.to_i + 1), (i * gamesPerPage.to_i), totalGames
55
+ printf "+---------+---------+---------------+--------------------------------------------\n"
56
+ printf "| AppID | Price | Release | Game Title \n"
57
+ printf "+---------+---------+---------------+--------------------------------------------\n"
58
+ end
59
+
60
+ doc.search('.search_result_row').each do |game|
61
+ link, app_id = game.attr('href').match(/(.*store\.steampowered\.com\/app\/([\d]+)\/)/).captures
62
+ price = game.search('.search_price').text.gsub(/[\W_]/, '').to_i
63
+ date = game.search('.search_released').text
64
+ name = game.search('h4').text
65
+ logo = game.search('.search_capsule img').attr('src').value
66
+
67
+ print "|% 8s |" % app_id + "% 8.2f |" % (price / 100) + "% 14s |" % date if display
68
+ printf " %s%" + (43 - name[0,43].length).to_s + "s\n", name[0,42], " " if display
69
+ games << SteamPrices::Game.new(name, app_id, link, logo, date, Money.new(price, curr))
70
+
71
+
72
+ end
73
+
74
+ printf "+---------+---------+---------------+--------------------------------------------\n\n" if display
75
+ #grab the next page only if we're not on the last page
76
+ doc = Nokogiri::HTML(open(URI.encode("http://store.steampowered.com/search/results?sort_by=Name&sort_order=ASC&category1=998&cc=#{country}&v6=1&page=#{i+1}"))) if i != totalPages
77
+
78
+ end
79
+
80
+ end
81
+ games
82
+ end
83
+ end
84
+
85
+
86
+ end
87
+ end
@@ -0,0 +1,3 @@
1
+ module SteamPrices
2
+ VERSION = "0.1"
3
+ end
@@ -0,0 +1,6 @@
1
+ require 'steam_prices/steam_updater'
2
+ require 'steam_prices/steam_country'
3
+ require 'steam_prices/steam_game'
4
+ require 'nokogiri'
5
+ require 'open-uri'
6
+ require 'money'
@@ -0,0 +1,5 @@
1
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
2
+ $LOAD_PATH << File.join(File.dirname(__FILE__))
3
+
4
+ require 'steam_prices'
5
+ require 'rspec'
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe SteamPrices::Country do
4
+
5
+ context "currency from country" do
6
+ it "should return a currency if I specify a valid country" do
7
+ SteamPrices::Country.get_currency('us').should == 'usd'
8
+ end
9
+
10
+ it "should return nil if I specify an invalid country" do
11
+ SteamPrices::Country.get_currency('la').should == nil
12
+ end
13
+ end
14
+
15
+
16
+ context "country from currency" do
17
+ it "should return a country if I specify a valid currency" do
18
+ SteamPrices::Country.get_country('usd').should == 'us'
19
+ end
20
+
21
+ it "should return nil if I specify an invalid currency" do
22
+ SteamPrices::Country.get_country('hello').should == nil
23
+ end
24
+ end
25
+
26
+
27
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe SteamPrices::Game do
4
+
5
+ it "should be able to have an app id, app name, logo, and store link" do
6
+ g = SteamPrices::Game.new('brink', 31314, '', '', '', Money.new(1499, 'USD'))
7
+ g.app_name.should == 'brink'
8
+ g.app_id.should == 31314
9
+ end
10
+
11
+ it "should have a valid price of the money class" do
12
+ lambda { g = SteamPrices::Game.new('brink', 31314, '', '', '', '') }.should raise_error
13
+ g = SteamPrices::Game.new('brink', 31314, '', '', '', Money.new(1499, 'USD'))
14
+ g.price.should == 14.99
15
+ end
16
+
17
+
18
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe SteamPrices::Updater do
4
+
5
+ before(:each) do
6
+ URI.stub!(:encode)
7
+ end
8
+ context "all prices" do
9
+
10
+ it "should be able to scrape steam and give a bunch of prices" do
11
+ URI.should_receive(:encode).exactly(5).times.and_return(File.dirname(__FILE__) + '/support/us.html')
12
+ games = SteamPrices::Game.update_all('usd', true)
13
+ # the pages are set to 5 in the example, and there are 19 items on the page
14
+ 5.times do |i|
15
+ games[i*19].price.should == 9.99
16
+ end
17
+ games.size.should == 95
18
+ end
19
+
20
+ end
21
+
22
+ context "a single price" do
23
+ before(:each) do
24
+ URI.should_receive(:encode).and_return(File.dirname(__FILE__) + '/support/us.html')
25
+
26
+ end
27
+
28
+ it "should be able to find a single game and update it's price (instance)" do
29
+ g = SteamPrices::Game.new('brink', 22350)
30
+ g.update('usd')['usd'].should == 49.99
31
+
32
+ end
33
+
34
+ it "should be able to find a single game and update it's price (class)" do
35
+ prices = SteamPrices::Game.update_one('brink', 22350, 'usd')
36
+ prices['usd'].should == 49.99
37
+ end
38
+ end
39
+
40
+ end
@@ -0,0 +1,351 @@
1
+
2
+ <!-- saved from url=(0115)http://store.steampowered.com/search/results?sort_by=Name&sort_order=ASC&category1=998&cc=us&v6=1&page=1&term=brink -->
3
+ <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><h2 class="results_description">
4
+ brink : Games</h2>
5
+
6
+ <div class="search_rule"></div>
7
+
8
+
9
+ <div class="search_pagination">
10
+ <div class="search_pagination_left">
11
+ showing 1 - 19 of 95 </div>
12
+ <div class="search_pagination_right">
13
+ Page:
14
+ 1
15
+ </div>
16
+ <div style="clear: both;"></div>
17
+ </div>
18
+
19
+ <div id="search_header">
20
+ <div class="col search_price" onclick="location.href=&#39;http://store.steampowered.com/search/?sort_by=Price&amp;sort_order=ASC&amp;term=brink&amp;category1=998&#39;;">Price</div>
21
+ <div class="col search_type" onclick="location.href=&#39;http://store.steampowered.com/search/?sort_by=Type&amp;sort_order=ASC&amp;term=brink&amp;category1=998&#39;;">Type</div>
22
+ <div class="col search_metascore" onclick="location.href=&#39;http://store.steampowered.com/search/?sort_by=Metascore&amp;sort_order=DESC&amp;term=brink&amp;category1=998&#39;;">Metascore®</div>
23
+ <div class="col search_released" onclick="location.href=&#39;http://store.steampowered.com/search/?sort_by=Released&amp;sort_order=DESC&amp;term=brink&amp;category1=998&#39;;">Released</div>
24
+ <div class="search_name" onclick="location.href=&#39;http://store.steampowered.com/search/?sort_by=Name&amp;sort_order=DESC&amp;term=brink&amp;category1=998&#39;;">Title <img src="./results_files/up.gif" width="10" height="10" border="0"></div>
25
+ <div style="clear: both;"></div>
26
+ </div>
27
+ <!-- List Items -->
28
+ <div>
29
+ <!-- Extra empty div to hack around lame IE7 layout bug -->
30
+ <div></div>
31
+ <!-- End Extra empty div -->
32
+ <a href="http://store.steampowered.com/app/61510/?snr=1_7_7_151_150_1" class="search_result_row even">
33
+ <div class="col search_price">$9.99</div>
34
+ <div class="col search_type">
35
+ <img src="./results_files/ico_type_app.gif">
36
+ </div>
37
+ <div class="col search_metascore"></div>
38
+ <div class="col search_released">Oct 2010</div>
39
+
40
+ <div class="col search_capsule"><img src="./results_files/capsule_sm_120.jpg" alt="Buy Age of Wonders II: The Wizard&#39;s Throne" width="120" height="45"></div>
41
+ <div class="col search_name">
42
+ <h4>Age of Wonders II: The Wizard's Throne</h4>
43
+ <p>
44
+ <img class="platform_img" src="./results_files/platform_win.png" width="22" height="22">Strategy, RPG - Released: Oct 2010 </p>
45
+ </div>
46
+ <div style="clear: both;"></div>
47
+ </a>
48
+ <a href="http://store.steampowered.com/app/22350/?snr=1_7_7_151_150_1" class="search_result_row odd">
49
+ <div class="col search_price">$49.99</div>
50
+ <div class="col search_type">
51
+ <img src="./results_files/ico_type_app.gif">
52
+ </div>
53
+ <div class="col search_metascore">71</div>
54
+ <div class="col search_released">May 9, 2011</div>
55
+
56
+ <div class="col search_capsule"><img src="./results_files/capsule_sm_120(1).jpg" alt="Buy BRINK" width="120" height="45"></div>
57
+ <div class="col search_name">
58
+ <h4>BRINK</h4>
59
+ <p>
60
+ <img class="platform_img" src="./results_files/platform_win.png" width="22" height="22">Action - Released: May 9, 2011 </p>
61
+ </div>
62
+ <div style="clear: both;"></div>
63
+ </a>
64
+ <a href="http://store.steampowered.com/app/10180/?snr=1_7_7_151_150_1" class="search_result_row even">
65
+ <div class="col search_price">$39.99</div>
66
+ <div class="col search_type">
67
+ <img src="./results_files/ico_type_app.gif">
68
+ </div>
69
+ <div class="col search_metascore">86</div>
70
+ <div class="col search_released">Nov 11, 2009</div>
71
+
72
+ <div class="col search_capsule"><img src="./results_files/capsule_sm_120(2).jpg" alt="Buy Call of Duty®: Modern Warfare® 2" width="120" height="45"></div>
73
+ <div class="col search_name">
74
+ <h4>Call of Duty®: Modern Warfare® 2</h4>
75
+ <p>
76
+ <img class="platform_img" src="./results_files/platform_win.png" width="22" height="22">Action - Released: Nov 11, 2009 </p>
77
+ </div>
78
+ <div style="clear: both;"></div>
79
+ </a>
80
+ <a href="http://store.steampowered.com/app/47700/?snr=1_7_7_151_150_1" class="search_result_row odd">
81
+ <div class="col search_price">$19.99</div>
82
+ <div class="col search_type">
83
+ <img src="./results_files/ico_type_app.gif">
84
+ </div>
85
+ <div class="col search_metascore">64</div>
86
+ <div class="col search_released">Mar 16, 2010</div>
87
+
88
+ <div class="col search_capsule"><img src="./results_files/capsule_sm_120(3).jpg" alt="Buy Command &amp; Conquer 4: Tiberian Twilight" width="120" height="45"></div>
89
+ <div class="col search_name">
90
+ <h4>Command &amp; Conquer 4: Tiberian Twilight</h4>
91
+ <p>
92
+ <img class="platform_img" src="./results_files/platform_win.png" width="22" height="22">Strategy - Released: Mar 16, 2010 </p>
93
+ </div>
94
+ <div style="clear: both;"></div>
95
+ </a>
96
+ <a href="http://store.steampowered.com/app/29900/?snr=1_7_7_151_150_1" class="search_result_row even">
97
+ <div class="col search_price">$9.99</div>
98
+ <div class="col search_type">
99
+ <img src="./results_files/ico_type_app.gif">
100
+ </div>
101
+ <div class="col search_metascore">66</div>
102
+ <div class="col search_released">Mar 24, 2009</div>
103
+
104
+ <div class="col search_capsule"><img src="./results_files/capsule_sm_120(4).jpg" alt="Buy Dark Sector" width="120" height="45"></div>
105
+ <div class="col search_name">
106
+ <h4>Dark Sector</h4>
107
+ <p>
108
+ <img class="platform_img" src="./results_files/platform_win.png" width="22" height="22">Action - Released: Mar 24, 2009 </p>
109
+ </div>
110
+ <div style="clear: both;"></div>
111
+ </a>
112
+ <a href="http://store.steampowered.com/app/17450/?snr=1_7_7_151_150_1" class="search_result_row odd">
113
+ <div class="col search_price">$29.99</div>
114
+ <div class="col search_type">
115
+ <img src="./results_files/ico_type_app.gif">
116
+ </div>
117
+ <div class="col search_metascore">91</div>
118
+ <div class="col search_released">Nov 5, 2009</div>
119
+
120
+ <div class="col search_capsule"><img src="./results_files/capsule_sm_120(5).jpg" alt="Buy Dragon Age: Origins" width="120" height="45"></div>
121
+ <div class="col search_name">
122
+ <h4>Dragon Age: Origins</h4>
123
+ <p>
124
+ <img class="platform_img" src="./results_files/platform_win.png" width="22" height="22">RPG - Released: Nov 5, 2009 </p>
125
+ </div>
126
+ <div style="clear: both;"></div>
127
+ </a>
128
+ <a href="http://store.steampowered.com/app/39160/?snr=1_7_7_151_150_1" class="search_result_row even">
129
+ <div class="col search_price">$49.99</div>
130
+ <div class="col search_type">
131
+ <img src="./results_files/ico_type_app.gif">
132
+ </div>
133
+ <div class="col search_metascore"></div>
134
+ <div class="col search_released">Jun 2011</div>
135
+
136
+ <div class="col search_capsule"><img src="./results_files/capsule_sm_120(6).jpg" alt="Buy Dungeon Siege III" width="120" height="45"></div>
137
+ <div class="col search_name">
138
+ <h4>Dungeon Siege III</h4>
139
+ <p>
140
+ <img class="platform_img" src="./results_files/platform_win.png" width="22" height="22">RPG, Action - Available: Jun 2011 </p>
141
+ </div>
142
+ <div style="clear: both;"></div>
143
+ </a>
144
+ <a href="http://store.steampowered.com/app/40370/?snr=1_7_7_151_150_1" class="search_result_row odd">
145
+ <div class="col search_price">$19.99</div>
146
+ <div class="col search_type">
147
+ <img src="./results_files/ico_type_app.gif">
148
+ </div>
149
+ <div class="col search_metascore">64</div>
150
+ <div class="col search_released">Nov 22, 2010</div>
151
+
152
+ <div class="col search_capsule"><img src="./results_files/capsule_sm_120(7).jpg" alt="Buy Emergency 2012" width="120" height="45"></div>
153
+ <div class="col search_name">
154
+ <h4>Emergency 2012</h4>
155
+ <p>
156
+ <img class="platform_img" src="./results_files/platform_win.png" width="22" height="22">Strategy, Simulation - Released: Nov 22, 2010 </p>
157
+ </div>
158
+ <div style="clear: both;"></div>
159
+ </a>
160
+ <a href="http://store.steampowered.com/app/34288/?snr=1_7_7_151_150_1" class="search_result_row even">
161
+ <div class="col search_price">$2.99</div>
162
+ <div class="col search_type">
163
+ <img src="./results_files/ico_type_app.gif">
164
+ </div>
165
+ <div class="col search_metascore"></div>
166
+ <div class="col search_released">Sep 13, 2010</div>
167
+
168
+ <div class="col search_capsule"><img src="./results_files/capsule_sm_120(8).jpg" alt="Buy Eternal Champions™" width="120" height="45"></div>
169
+ <div class="col search_name">
170
+ <h4>Eternal Champions™</h4>
171
+ <p>
172
+ <img class="platform_img" src="./results_files/platform_win.png" width="22" height="22">Action - Released: Sep 13, 2010 </p>
173
+ </div>
174
+ <div style="clear: both;"></div>
175
+ </a>
176
+ <a href="http://store.steampowered.com/app/23450/?snr=1_7_7_151_150_1" class="search_result_row odd">
177
+ <div class="col search_price">$9.99</div>
178
+ <div class="col search_type">
179
+ <img src="./results_files/ico_type_app.gif">
180
+ </div>
181
+ <div class="col search_metascore">72</div>
182
+ <div class="col search_released">Mar 20, 2009</div>
183
+
184
+ <div class="col search_capsule"><img src="./results_files/capsule_sm_120(9).jpg" alt="Buy Grand Ages: Rome" width="120" height="45"></div>
185
+ <div class="col search_name">
186
+ <h4>Grand Ages: Rome</h4>
187
+ <p>
188
+ <img class="platform_img" src="./results_files/platform_win.png" width="22" height="22">Strategy, Simulation - Released: Mar 20, 2009 </p>
189
+ </div>
190
+ <div style="clear: both;"></div>
191
+ </a>
192
+ <a href="http://store.steampowered.com/app/10100/?snr=1_7_7_151_150_1" class="search_result_row even">
193
+ <div class="col search_price">$19.99</div>
194
+ <div class="col search_type">
195
+ <img src="./results_files/ico_type_app.gif">
196
+ </div>
197
+ <div class="col search_metascore"></div>
198
+ <div class="col search_released">Jul 23, 2009</div>
199
+
200
+ <div class="col search_capsule"><img src="./results_files/capsule_sm_120(10).jpg" alt="Buy King&#39;s Quest™ Collection" width="120" height="45"></div>
201
+ <div class="col search_name">
202
+ <h4>King's Quest™ Collection</h4>
203
+ <p>
204
+ <img class="platform_img" src="./results_files/platform_win.png" width="22" height="22">Adventure - Released: Jul 23, 2009 </p>
205
+ </div>
206
+ <div style="clear: both;"></div>
207
+ </a>
208
+ <a href="http://store.steampowered.com/app/36240/?snr=1_7_7_151_150_1" class="search_result_row odd">
209
+ <div class="col search_price">$6.99</div>
210
+ <div class="col search_type">
211
+ <img src="./results_files/ico_type_app.gif">
212
+ </div>
213
+ <div class="col search_metascore"></div>
214
+ <div class="col search_released">Sep 21, 2009</div>
215
+
216
+ <div class="col search_capsule"><img src="./results_files/capsule_sm_120(11).jpg" alt="Buy Kuros" width="120" height="45"></div>
217
+ <div class="col search_name">
218
+ <h4>Kuros</h4>
219
+ <p>
220
+ <img class="platform_img" src="./results_files/platform_win.png" width="22" height="22">Family, Casual - Released: Sep 21, 2009 </p>
221
+ </div>
222
+ <div style="clear: both;"></div>
223
+ </a>
224
+ <a href="http://store.steampowered.com/app/6510/?snr=1_7_7_151_150_1" class="search_result_row even">
225
+ <div class="col search_price">$14.99</div>
226
+ <div class="col search_type">
227
+ <img src="./results_files/ico_type_app.gif">
228
+ </div>
229
+ <div class="col search_metascore">66</div>
230
+ <div class="col search_released">Jun 26, 2007</div>
231
+
232
+ <div class="col search_capsule"><img src="./results_files/capsule_sm_120(12).jpg" alt="Buy Lost Planet™: Extreme Condition" width="120" height="45"></div>
233
+ <div class="col search_name">
234
+ <h4>Lost Planet™: Extreme Condition</h4>
235
+ <p>
236
+ <img class="platform_img" src="./results_files/platform_win.png" width="22" height="22">Action - Released: Jun 26, 2007 </p>
237
+ </div>
238
+ <div style="clear: both;"></div>
239
+ </a>
240
+ <a href="http://store.steampowered.com/app/23700/?snr=1_7_7_151_150_1" class="search_result_row odd">
241
+ <div class="col search_price">$14.99</div>
242
+ <div class="col search_type">
243
+ <img src="./results_files/ico_type_app.gif">
244
+ </div>
245
+ <div class="col search_metascore"></div>
246
+ <div class="col search_released">Apr 27, 2009</div>
247
+
248
+ <div class="col search_capsule"><img src="./results_files/capsule_sm_120(13).jpg" alt="Buy Puzzle Kingdoms" width="120" height="45"></div>
249
+ <div class="col search_name">
250
+ <h4>Puzzle Kingdoms</h4>
251
+ <p>
252
+ <img class="platform_img" src="./results_files/platform_win.png" width="22" height="22">Casual, Family - Released: Apr 27, 2009 </p>
253
+ </div>
254
+ <div style="clear: both;"></div>
255
+ </a>
256
+ <a href="http://store.steampowered.com/app/20510/?snr=1_7_7_151_150_1" class="search_result_row even">
257
+ <div class="col search_price">$9.99</div>
258
+ <div class="col search_type">
259
+ <img src="./results_files/ico_type_app.gif">
260
+ </div>
261
+ <div class="col search_metascore">75</div>
262
+ <div class="col search_released">Sep 15, 2008</div>
263
+
264
+ <div class="col search_capsule"><img src="./results_files/capsule_sm_120(14).jpg" alt="Buy S.T.A.L.K.E.R.: Clear Sky" width="120" height="45"></div>
265
+ <div class="col search_name">
266
+ <h4>S.T.A.L.K.E.R.: Clear Sky</h4>
267
+ <p>
268
+ <img class="platform_img" src="./results_files/platform_win.png" width="22" height="22">Action, RPG - Released: Sep 15, 2008 </p>
269
+ </div>
270
+ <div style="clear: both;"></div>
271
+ </a>
272
+ <a href="http://store.steampowered.com/app/40340/?snr=1_7_7_151_150_1" class="search_result_row odd">
273
+ <div class="col search_price">$9.99</div>
274
+ <div class="col search_type">
275
+ <img src="./results_files/ico_type_app.gif">
276
+ </div>
277
+ <div class="col search_metascore">64</div>
278
+ <div class="col search_released">Oct 29, 2009</div>
279
+
280
+ <div class="col search_capsule"><img src="./results_files/capsule_sm_120(15).jpg" alt="Buy Secret Files 2: Puritas Cordis" width="120" height="45"></div>
281
+ <div class="col search_name">
282
+ <h4>Secret Files 2: Puritas Cordis</h4>
283
+ <p>
284
+ <img class="platform_img" src="./results_files/platform_win.png" width="22" height="22">Adventure - Released: Oct 29, 2009 </p>
285
+ </div>
286
+ <div style="clear: both;"></div>
287
+ </a>
288
+ <a href="http://store.steampowered.com/app/10650/?snr=1_7_7_151_150_1" class="search_result_row even">
289
+ <div class="col search_price">$19.99</div>
290
+ <div class="col search_type">
291
+ <img src="./results_files/ico_type_app.gif">
292
+ </div>
293
+ <div class="col search_metascore">42</div>
294
+ <div class="col search_released">Mar 25, 2009</div>
295
+
296
+ <div class="col search_capsule"><img src="./results_files/capsule_sm_120(16).jpg" alt="Buy Stormrise" width="120" height="45"></div>
297
+ <div class="col search_name">
298
+ <h4>Stormrise</h4>
299
+ <p>
300
+ <img class="platform_img" src="./results_files/platform_win.png" width="22" height="22">Strategy - Released: Mar 25, 2009 </p>
301
+ </div>
302
+ <div style="clear: both;"></div>
303
+ </a>
304
+ <a href="http://store.steampowered.com/app/6040/?snr=1_7_7_151_150_1" class="search_result_row odd">
305
+ <div class="col search_price">$4.99</div>
306
+ <div class="col search_type">
307
+ <img src="./results_files/ico_type_app.gif">
308
+ </div>
309
+ <div class="col search_metascore"></div>
310
+ <div class="col search_released">Jul 8, 2009</div>
311
+
312
+ <div class="col search_capsule"><img src="./results_files/capsule_sm_120(17).jpg" alt="Buy The Dig® " width="120" height="45"></div>
313
+ <div class="col search_name">
314
+ <h4>The Dig® </h4>
315
+ <p>
316
+ <img class="platform_img" title="Buy it once. Play it on Mac or PC." src="./results_files/platform_steamplay.png" width="123" height="22">Adventure - Released: Jul 8, 2009 </p>
317
+ </div>
318
+ <div style="clear: both;"></div>
319
+ </a>
320
+ <a href="http://store.steampowered.com/app/57680/?snr=1_7_7_151_150_1" class="search_result_row even">
321
+ <div class="col search_price">$39.99</div>
322
+ <div class="col search_type">
323
+ <img src="./results_files/ico_type_app.gif">
324
+ </div>
325
+ <div class="col search_metascore"></div>
326
+ <div class="col search_released">May 12, 2011</div>
327
+
328
+ <div class="col search_capsule"><img src="./results_files/capsule_sm_120(18).jpg" alt="Buy The First Templar - Steam Special Edition" width="120" height="45"></div>
329
+ <div class="col search_name">
330
+ <h4>The First Templar - Steam Special Edition</h4>
331
+ <p>
332
+ <img class="platform_img" src="./results_files/platform_win.png" width="22" height="22">Action, Adventure - Released: May 12, 2011 </p>
333
+ </div>
334
+ <div style="clear: both;"></div>
335
+ </a>
336
+
337
+ <!-- End List Items -->
338
+ </div>
339
+
340
+ <div class="search_pagination">
341
+ <div class="search_pagination_left">
342
+ showing 1 - 19 of 19 </div>
343
+ <div class="search_pagination_right">
344
+ Page:
345
+ 1
346
+ </div>
347
+ <div style="clear: both;"></div>
348
+ </div>
349
+
350
+
351
+ </body></html>
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "steam_prices/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "steam-prices"
7
+ s.version = SteamPrices::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["scott tesoriere"]
10
+ s.email = ["scott@tesoriere.com"]
11
+ s.homepage = "http://github.com/scottkf/steam_prices"
12
+ s.summary = "Prices for steam."
13
+
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_development_dependency "rspec", ">= 2.0.0.beta.12"
21
+ s.add_development_dependency "nokogiri"
22
+ s.add_development_dependency "money"
23
+ s.add_development_dependency "open-uri"
24
+ end
metadata ADDED
@@ -0,0 +1,139 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: steam-prices
3
+ version: !ruby/object:Gem::Version
4
+ hash: 9
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ version: "0.1"
10
+ platform: ruby
11
+ authors:
12
+ - scott tesoriere
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-05-23 00:00:00 Z
18
+ dependencies:
19
+ - !ruby/object:Gem::Dependency
20
+ name: rspec
21
+ prerelease: false
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ hash: 62196475
28
+ segments:
29
+ - 2
30
+ - 0
31
+ - 0
32
+ - beta
33
+ - 12
34
+ version: 2.0.0.beta.12
35
+ type: :development
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: nokogiri
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 3
46
+ segments:
47
+ - 0
48
+ version: "0"
49
+ type: :development
50
+ version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: money
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ hash: 3
60
+ segments:
61
+ - 0
62
+ version: "0"
63
+ type: :development
64
+ version_requirements: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ name: open-uri
67
+ prerelease: false
68
+ requirement: &id004 !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ hash: 3
74
+ segments:
75
+ - 0
76
+ version: "0"
77
+ type: :development
78
+ version_requirements: *id004
79
+ description:
80
+ email:
81
+ - scott@tesoriere.com
82
+ executables: []
83
+
84
+ extensions: []
85
+
86
+ extra_rdoc_files: []
87
+
88
+ files:
89
+ - README.md
90
+ - lib/steam_prices.rb
91
+ - lib/steam_prices/steam_country.rb
92
+ - lib/steam_prices/steam_game.rb
93
+ - lib/steam_prices/steam_updater.rb
94
+ - lib/steam_prices/version.rb
95
+ - spec/spec_helper.rb
96
+ - spec/steam_country_spec.rb
97
+ - spec/steam_game_spec.rb
98
+ - spec/steam_updater_spec.rb
99
+ - spec/support/us.html
100
+ - steam_prices.gemspec
101
+ homepage: http://github.com/scottkf/steam_prices
102
+ licenses: []
103
+
104
+ post_install_message:
105
+ rdoc_options: []
106
+
107
+ require_paths:
108
+ - lib
109
+ required_ruby_version: !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ hash: 3
115
+ segments:
116
+ - 0
117
+ version: "0"
118
+ required_rubygems_version: !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ hash: 3
124
+ segments:
125
+ - 0
126
+ version: "0"
127
+ requirements: []
128
+
129
+ rubyforge_project:
130
+ rubygems_version: 1.7.2
131
+ signing_key:
132
+ specification_version: 3
133
+ summary: Prices for steam.
134
+ test_files:
135
+ - spec/spec_helper.rb
136
+ - spec/steam_country_spec.rb
137
+ - spec/steam_game_spec.rb
138
+ - spec/steam_updater_spec.rb
139
+ - spec/support/us.html