steam-prices 0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|