steam-prices 0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +0 -0
- data/lib/steam_prices/steam_country.rb +25 -0
- data/lib/steam_prices/steam_game.rb +24 -0
- data/lib/steam_prices/steam_updater.rb +87 -0
- data/lib/steam_prices/version.rb +3 -0
- data/lib/steam_prices.rb +6 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/steam_country_spec.rb +27 -0
- data/spec/steam_game_spec.rb +18 -0
- data/spec/steam_updater_spec.rb +40 -0
- data/spec/support/us.html +351 -0
- data/steam_prices.gemspec +24 -0
- metadata +139 -0
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
|
data/lib/steam_prices.rb
ADDED
data/spec/spec_helper.rb
ADDED
@@ -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='http://store.steampowered.com/search/?sort_by=Price&sort_order=ASC&term=brink&category1=998';">Price</div>
|
21
|
+
<div class="col search_type" onclick="location.href='http://store.steampowered.com/search/?sort_by=Type&sort_order=ASC&term=brink&category1=998';">Type</div>
|
22
|
+
<div class="col search_metascore" onclick="location.href='http://store.steampowered.com/search/?sort_by=Metascore&sort_order=DESC&term=brink&category1=998';">Metascore®</div>
|
23
|
+
<div class="col search_released" onclick="location.href='http://store.steampowered.com/search/?sort_by=Released&sort_order=DESC&term=brink&category1=998';">Released</div>
|
24
|
+
<div class="search_name" onclick="location.href='http://store.steampowered.com/search/?sort_by=Name&sort_order=DESC&term=brink&category1=998';">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'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 & Conquer 4: Tiberian Twilight" width="120" height="45"></div>
|
89
|
+
<div class="col search_name">
|
90
|
+
<h4>Command & 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'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
|