steam-client 0.0.1 → 0.0.2

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/Gemfile CHANGED
@@ -1,7 +1,12 @@
1
1
  source "http://rubygems.org"
2
2
 
3
+ gem 'rest-client', '1.6.7'
4
+ gem 'crack', '0.3.1'
5
+
3
6
  group :test do
4
7
  gem 'rake', '0.9.2.2'
5
8
  gem 'rspec', '2.12.0'
6
9
  gem 'rspec-mocks', '2.12.0'
10
+ gem 'webmock', '1.8.11'
11
+ gem 'vcr', '2.3.0'
7
12
  end
data/Gemfile.lock CHANGED
@@ -1,8 +1,13 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ addressable (2.3.2)
5
+ crack (0.3.1)
4
6
  diff-lcs (1.1.3)
7
+ mime-types (1.19)
5
8
  rake (0.9.2.2)
9
+ rest-client (1.6.7)
10
+ mime-types (>= 1.16)
6
11
  rspec (2.12.0)
7
12
  rspec-core (~> 2.12.0)
8
13
  rspec-expectations (~> 2.12.0)
@@ -11,11 +16,19 @@ GEM
11
16
  rspec-expectations (2.12.0)
12
17
  diff-lcs (~> 1.1.3)
13
18
  rspec-mocks (2.12.0)
19
+ vcr (2.3.0)
20
+ webmock (1.8.11)
21
+ addressable (>= 2.2.7)
22
+ crack (>= 0.1.7)
14
23
 
15
24
  PLATFORMS
16
25
  ruby
17
26
 
18
27
  DEPENDENCIES
28
+ crack (= 0.3.1)
19
29
  rake (= 0.9.2.2)
30
+ rest-client (= 1.6.7)
20
31
  rspec (= 2.12.0)
21
32
  rspec-mocks (= 2.12.0)
33
+ vcr (= 2.3.0)
34
+ webmock (= 1.8.11)
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  steam-client
2
2
  ============
3
3
 
4
- [![Build Status](https://secure.travis-ci.org/BrianMMcClain/steam-client-ruby.png)](https://secure.travis-ci.org/BrianMMcClain/steam-client-ruby.png)
4
+ [![Build Status](https://secure.travis-ci.org/BrianMMcClain/steam-client-ruby.png)](https://travis-ci.org/BrianMMcClain/steam-client-ruby)
5
5
 
6
6
  Ruby gem to interact with the [Steam](http://steampowered.com) API
data/lib/steam-client.rb CHANGED
@@ -1,2 +1,4 @@
1
1
  require 'steam-client/version'
2
- require 'steam-client/client'
2
+ require 'steam-client/client'
3
+ require 'steam-client/profile'
4
+ require 'steam-client/game'
@@ -1,13 +1,49 @@
1
+ require 'rest-client'
2
+ require 'crack'
3
+
1
4
  module SteamClient
2
5
  class Client
3
-
6
+
4
7
  attr_reader :api_key
5
8
 
6
- def initialize(api_key)
9
+ def initialize(api_key = nil)
7
10
  @api_key = api_key
8
11
  end
9
12
 
10
-
13
+ def find_profile_by_name(name)
14
+ url = "http://steamcommunity.com/id/#{name}?xml=1"
15
+ xml = RestClient.get url
16
+ return Profile.from_xml(xml)
17
+ end
11
18
 
19
+ def find_profile_by_id(id)
20
+ url = "http://steamcommunity.com/profiles/#{id}?xml=1"
21
+ xml = RestClient.get url
22
+ return Profile.from_xml(xml)
23
+ end
24
+
25
+ def get_friends_from_profile(profile)
26
+ url = "http://steamcommunity.com/profiles/#{profile.steamID64}/friends?xml=1"
27
+ xml = RestClient.get url
28
+ hFriends = Crack::XML.parse xml
29
+ friends = []
30
+ hFriends['friendsList']['friends']['friend'].each do |friendID|
31
+ friends << Profile.new(friendID)
32
+ end
33
+ profile.friends = friends
34
+ return friends
35
+ end
36
+
37
+ def get_games_from_profile(profile)
38
+ url = "http://steamcommunity.com/profiles/#{profile.steamID64}/games\?xml\=1"
39
+ xml = RestClient.get url
40
+ hGames = Crack::XML.parse xml
41
+ games = []
42
+ hGames['gamesList']['games']['game'].each do |game|
43
+ games << Game.new(game)
44
+ end
45
+ profile.games = games
46
+ return games
47
+ end
12
48
  end
13
49
  end
@@ -0,0 +1,11 @@
1
+ module SteamClient
2
+ class Game
3
+ attr_accessor :id, :name, :logo
4
+
5
+ def initialize(opts = {})
6
+ @id = opts['appID']
7
+ @name = opts['name']
8
+ @logo = opts['logo']
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,60 @@
1
+ require 'crack'
2
+
3
+ module SteamClient
4
+
5
+ module Error
6
+ class ProfileNotFound < StandardError
7
+ def message
8
+ "The specified profile could not be found"
9
+ end
10
+ end
11
+ end
12
+
13
+ module OnlineState
14
+ ONLINE = "online",
15
+ OFFLINE = "offline"
16
+ UNKNOWN = "unknown"
17
+ end
18
+
19
+ class Profile
20
+
21
+ attr_accessor :steamID64, :onlineState, :avatarIcon, :avatarMedium, :avatarFull, :customURL, :hoursPlayed2Wk, :location, :realname, :friends, :games
22
+
23
+ def initialize(steamID64 = nil)
24
+ self.steamID64 = steamID64
25
+ @friends = []
26
+ @games = []
27
+ end
28
+
29
+ def self.from_xml(xml)
30
+ p = Crack::XML.parse(xml)
31
+
32
+ if p.has_key? 'response' and p['response'].has_key? 'error'
33
+ raise SteamClient::Error::ProfileNotFound
34
+ end
35
+
36
+ profile = Profile.new
37
+
38
+ profile.steamID64 = p['profile']['steamID64']
39
+ profile.avatarIcon = p['profile']['avatarIcon']
40
+ profile.avatarMedium = p['profile']['avatarMedium']
41
+ profile.avatarFull = p['profile']['avatarFull']
42
+ profile.customURL = p['profile']['customURL']
43
+ profile.hoursPlayed2Wk = p['profile']['hoursPlayed2Wk'].to_f
44
+ profile.location = p['profile']['location']
45
+ profile.realname = p['profile']['realname']
46
+ profile.friends = []
47
+ profile.games = []
48
+
49
+ case p['profile']['onlineState']
50
+ when 'online'
51
+ profile.onlineState = SteamClient::OnlineState::ONLINE
52
+ when 'offline'
53
+ profile.onlineState = SteamClient::OnlineState::OFFLINE
54
+ else
55
+ profile.onlineState = SteamClient::OnlineState::UNKNOWN
56
+ end
57
+ return profile
58
+ end
59
+ end
60
+ end
@@ -1,3 +1,3 @@
1
1
  module SteamClient
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/spec/client_spec.rb CHANGED
@@ -7,9 +7,39 @@ describe SteamClient::Client do
7
7
  client.api_key.should == "XXXXXXXXX"
8
8
  end
9
9
 
10
- it "should get a profile" do
11
- client = SteamClient::Client.new("XXXXXXXXX")
12
- profile = client.get_profile("some_person")
13
- profile.class.should == SteamClient::Profile.class
10
+ it "should get a profile by name" do
11
+ VCR.use_cassette('steam_profile') do
12
+ profile = @client.find_profile_by_name("robinwalker")
13
+ profile.class.should be SteamClient::Profile
14
+ profile.steamID64.should match "76561197960435530"
15
+ profile.customURL.should match "robinwalker"
16
+ end
17
+ end
18
+
19
+ it "should get a profile by id" do
20
+ VCR.use_cassette('steam_profile_id') do
21
+ profile = @client.find_profile_by_id("76561197960435530")
22
+ profile.class.should == SteamClient::Profile
23
+ profile.steamID64.should match "76561197960435530"
24
+ profile.customURL.should match "robinwalker"
25
+ end
26
+ end
27
+
28
+ it "should get a profile's friend list" do
29
+ VCR.use_cassette('steam_profile_friends') do
30
+ friends = @client.get_friends_from_profile(@profile)
31
+ friends.count.should eq(269)
32
+ friends.empty?.should_not be true
33
+ @profile.friends.empty?.should_not be true
34
+ end
35
+ end
36
+
37
+ it "should get a profiles game list" do
38
+ VCR.use_cassette('steam_profile_game_list') do
39
+ games = @client.get_games_from_profile(@profile)
40
+ games.count.should eq(2046)
41
+ games.empty?.should_not be true
42
+ @profile.games.empty?.should_not be true
43
+ end
14
44
  end
15
45
  end
@@ -0,0 +1,70 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://steamcommunity.com/profiles/1?xml=1
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - ! '*/*; q=0.5, application/xml'
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: !binary |-
20
+ T0s=
21
+ headers:
22
+ !binary "U2VydmVy":
23
+ - !binary |-
24
+ QXBhY2hl
25
+ !binary "U2V0LUNvb2tpZQ==":
26
+ - !binary |-
27
+ U3RlYW1fTGFuZ3VhZ2U9ZW5nbGlzaDsgZXhwaXJlcz1GcmksIDE1LURlYy0y
28
+ MDE3IDAyOjM3OjM1IEdNVDsgcGF0aD0v
29
+ - !binary |-
30
+ c2Vzc2lvbmlkPU1qQTJNalEwTURReE5BJTNEJTNEOyBwYXRoPS8=
31
+ !binary "RXhwaXJlcw==":
32
+ - !binary |-
33
+ U3VuLCAxNiBEZWMgMjAxMiAwMzozNzozNSBHTVQ=
34
+ !binary "Q29udGVudC1FbmNvZGluZw==":
35
+ - !binary |-
36
+ Z3ppcA==
37
+ !binary "VmFyeQ==":
38
+ - !binary |-
39
+ QWNjZXB0LUVuY29kaW5n
40
+ !binary "Q29udGVudC1UeXBl":
41
+ - !binary |-
42
+ dGV4dC94bWw=
43
+ !binary "Q29udGVudC1MZW5ndGg=":
44
+ - !binary |-
45
+ MTQ3
46
+ !binary "RGF0ZQ==":
47
+ - !binary |-
48
+ U3VuLCAxNiBEZWMgMjAxMiAwMjozNzozNSBHTVQ=
49
+ !binary "WC1WYXJuaXNo":
50
+ - !binary |-
51
+ MTcwOTk0ODYwMg==
52
+ !binary "QWdl":
53
+ - !binary |-
54
+ MA==
55
+ !binary "Vmlh":
56
+ - !binary |-
57
+ MS4xIHZhcm5pc2g=
58
+ !binary "Q29ubmVjdGlvbg==":
59
+ - !binary |-
60
+ a2VlcC1hbGl2ZQ==
61
+ body:
62
+ encoding: ASCII-8BIT
63
+ string: !binary |-
64
+ H4sIAAAAAAAAAzzMMQ7CMAwAwK8Y77SwMSSpKhAvCFPVoSQuRErtKG4R/J4F
65
+ 8YA7072XDC+qmoQtHpsDAnGQmPhh8eav+xOCrhPHKQuTxQ8pds5U0iKs5AzV
66
+ KtWZ3XC+9L4f/JNAC4U0J4pQqswpEwTZcgSWFe4Es2wcm3F0pv3h9t99AQAA
67
+ //8DAMxsI/+QAAAA
68
+ http_version:
69
+ recorded_at: Sun, 16 Dec 2012 02:37:34 GMT
70
+ recorded_with: VCR 2.3.0
@@ -0,0 +1,124 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://steamcommunity.com/id/robinwalker?xml=1
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - ! '*/*; q=0.5, application/xml'
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: !binary |-
20
+ T0s=
21
+ headers:
22
+ !binary "U2VydmVy":
23
+ - !binary |-
24
+ QXBhY2hl
25
+ !binary "U2V0LUNvb2tpZQ==":
26
+ - !binary |-
27
+ U3RlYW1fTGFuZ3VhZ2U9ZW5nbGlzaDsgZXhwaXJlcz1GcmksIDE1LURlYy0y
28
+ MDE3IDAxOjQ0OjM1IEdNVDsgcGF0aD0v
29
+ - !binary |-
30
+ c2Vzc2lvbmlkPU1UWTFOek0zTnpRNU9RJTNEJTNEOyBwYXRoPS8=
31
+ !binary "RXhwaXJlcw==":
32
+ - !binary |-
33
+ U3VuLCAxNiBEZWMgMjAxMiAwMjo0NDozNSBHTVQ=
34
+ !binary "Q29udGVudC1FbmNvZGluZw==":
35
+ - !binary |-
36
+ Z3ppcA==
37
+ !binary "VmFyeQ==":
38
+ - !binary |-
39
+ QWNjZXB0LUVuY29kaW5n
40
+ !binary "Q29udGVudC1UeXBl":
41
+ - !binary |-
42
+ dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg=
43
+ !binary "Q29udGVudC1MZW5ndGg=":
44
+ - !binary |-
45
+ MjYwMA==
46
+ !binary "RGF0ZQ==":
47
+ - !binary |-
48
+ U3VuLCAxNiBEZWMgMjAxMiAwMTo0NDozNyBHTVQ=
49
+ !binary "WC1WYXJuaXNo":
50
+ - !binary |-
51
+ MTUyNzk3MjU2MQ==
52
+ !binary "QWdl":
53
+ - !binary |-
54
+ MA==
55
+ !binary "Vmlh":
56
+ - !binary |-
57
+ MS4xIHZhcm5pc2g=
58
+ !binary "Q29ubmVjdGlvbg==":
59
+ - !binary |-
60
+ a2VlcC1hbGl2ZQ==
61
+ body:
62
+ encoding: ASCII-8BIT
63
+ string: !binary |-
64
+ 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
122
+ http_version:
123
+ recorded_at: Sun, 16 Dec 2012 01:44:37 GMT
124
+ recorded_with: VCR 2.3.0
@@ -0,0 +1,297 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://steamcommunity.com/id/robinwalker?xml=1
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - ! '*/*; q=0.5, application/xml'
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: !binary |-
20
+ T0s=
21
+ headers:
22
+ !binary "U2VydmVy":
23
+ - !binary |-
24
+ QXBhY2hl
25
+ !binary "U2V0LUNvb2tpZQ==":
26
+ - !binary |-
27
+ U3RlYW1fTGFuZ3VhZ2U9ZW5nbGlzaDsgZXhwaXJlcz1GcmksIDE1LURlYy0y
28
+ MDE3IDA2OjA4OjU2IEdNVDsgcGF0aD0v
29
+ - !binary |-
30
+ c2Vzc2lvbmlkPU5qWXlOek13TlRZeDsgcGF0aD0v
31
+ !binary "RXhwaXJlcw==":
32
+ - !binary |-
33
+ U3VuLCAxNiBEZWMgMjAxMiAwNzowODo1NiBHTVQ=
34
+ !binary "Q29udGVudC1FbmNvZGluZw==":
35
+ - !binary |-
36
+ Z3ppcA==
37
+ !binary "VmFyeQ==":
38
+ - !binary |-
39
+ QWNjZXB0LUVuY29kaW5n
40
+ !binary "Q29udGVudC1UeXBl":
41
+ - !binary |-
42
+ dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg=
43
+ !binary "Q29udGVudC1MZW5ndGg=":
44
+ - !binary |-
45
+ MjYzNQ==
46
+ !binary "RGF0ZQ==":
47
+ - !binary |-
48
+ U3VuLCAxNiBEZWMgMjAxMiAwNjowODo1NyBHTVQ=
49
+ !binary "WC1WYXJuaXNo":
50
+ - !binary |-
51
+ MTcyNTYxOTQ4Nw==
52
+ !binary "QWdl":
53
+ - !binary |-
54
+ MA==
55
+ !binary "Vmlh":
56
+ - !binary |-
57
+ MS4xIHZhcm5pc2g=
58
+ !binary "Q29ubmVjdGlvbg==":
59
+ - !binary |-
60
+ a2VlcC1hbGl2ZQ==
61
+ body:
62
+ encoding: ASCII-8BIT
63
+ string: !binary |-
64
+ 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
122
+ /L2Q/z2T7ndo/gsAAP//AwDCijUrhDMAAA==
123
+ http_version:
124
+ recorded_at: Sun, 16 Dec 2012 06:08:56 GMT
125
+ - request:
126
+ method: get
127
+ uri: http://steamcommunity.com/profiles/76561197960435530/friends?xml=1
128
+ body:
129
+ encoding: US-ASCII
130
+ string: ''
131
+ headers:
132
+ Accept:
133
+ - ! '*/*; q=0.5, application/xml'
134
+ Accept-Encoding:
135
+ - gzip, deflate
136
+ User-Agent:
137
+ - Ruby
138
+ response:
139
+ status:
140
+ code: 302
141
+ message: !binary |-
142
+ Rm91bmQ=
143
+ headers:
144
+ !binary "U2VydmVy":
145
+ - !binary |-
146
+ QXBhY2hl
147
+ !binary "U2V0LUNvb2tpZQ==":
148
+ - !binary |-
149
+ U3RlYW1fTGFuZ3VhZ2U9ZW5nbGlzaDsgZXhwaXJlcz1GcmksIDE1LURlYy0y
150
+ MDE3IDA2OjA5OjI1IEdNVDsgcGF0aD0v
151
+ - !binary |-
152
+ c2Vzc2lvbmlkPU1UYzVORFl5TURNd09BJTNEJTNEOyBwYXRoPS8=
153
+ !binary "RXhwaXJlcw==":
154
+ - !binary |-
155
+ U3VuLCAxNiBEZWMgMjAxMiAwNzowOToyNSBHTVQ=
156
+ !binary "TG9jYXRpb24=":
157
+ - !binary |-
158
+ aHR0cDovL3N0ZWFtY29tbXVuaXR5LmNvbS9pZC9yb2JpbndhbGtlci9mcmll
159
+ bmRzP3htbD0xJmw9ZW5nbGlzaA==
160
+ !binary "Q29udGVudC1FbmNvZGluZw==":
161
+ - !binary |-
162
+ Z3ppcA==
163
+ !binary "VmFyeQ==":
164
+ - !binary |-
165
+ QWNjZXB0LUVuY29kaW5n
166
+ !binary "Q29udGVudC1UeXBl":
167
+ - !binary |-
168
+ dGV4dC9odG1sOyBjaGFyc2V0PVVURi04
169
+ !binary "Q29udGVudC1MZW5ndGg=":
170
+ - !binary |-
171
+ MjY=
172
+ !binary "RGF0ZQ==":
173
+ - !binary |-
174
+ U3VuLCAxNiBEZWMgMjAxMiAwNjowOToyNSBHTVQ=
175
+ !binary "WC1WYXJuaXNo":
176
+ - !binary |-
177
+ MTU0NzczODM4MA==
178
+ !binary "QWdl":
179
+ - !binary |-
180
+ MA==
181
+ !binary "Vmlh":
182
+ - !binary |-
183
+ MS4xIHZhcm5pc2g=
184
+ !binary "Q29ubmVjdGlvbg==":
185
+ - !binary |-
186
+ a2VlcC1hbGl2ZQ==
187
+ body:
188
+ encoding: ASCII-8BIT
189
+ string: !binary |-
190
+ H4sIAAAAAAAAAwIAAAD//wMAAAAAAAAAAAA=
191
+ http_version:
192
+ recorded_at: Sun, 16 Dec 2012 06:09:24 GMT
193
+ - request:
194
+ method: get
195
+ uri: http://steamcommunity.com/id/robinwalker/friends?l=english&xml=1
196
+ body:
197
+ encoding: US-ASCII
198
+ string: ''
199
+ headers:
200
+ Accept:
201
+ - ! '*/*; q=0.5, application/xml'
202
+ Accept-Encoding:
203
+ - gzip, deflate
204
+ Cookie:
205
+ - Steam_Language=english; sessionid=MTc5NDYyMDMwOA==
206
+ User-Agent:
207
+ - Ruby
208
+ response:
209
+ status:
210
+ code: 200
211
+ message: !binary |-
212
+ T0s=
213
+ headers:
214
+ !binary "U2VydmVy":
215
+ - !binary |-
216
+ QXBhY2hl
217
+ !binary "U2V0LUNvb2tpZQ==":
218
+ - !binary |-
219
+ U3RlYW1fTGFuZ3VhZ2U9ZW5nbGlzaDsgZXhwaXJlcz1GcmksIDE1LURlYy0y
220
+ MDE3IDA2OjA5OjI2IEdNVDsgcGF0aD0v
221
+ - !binary |-
222
+ c2Vzc2lvbmlkPU1UVTNOak0xTmpVME1BJTNEJTNEOyBwYXRoPS8=
223
+ !binary "RXhwaXJlcw==":
224
+ - !binary |-
225
+ U3VuLCAxNiBEZWMgMjAxMiAwNzowOToyNiBHTVQ=
226
+ !binary "Q29udGVudC1FbmNvZGluZw==":
227
+ - !binary |-
228
+ Z3ppcA==
229
+ !binary "VmFyeQ==":
230
+ - !binary |-
231
+ QWNjZXB0LUVuY29kaW5n
232
+ !binary "Q29udGVudC1UeXBl":
233
+ - !binary |-
234
+ dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg=
235
+ !binary "Q29udGVudC1MZW5ndGg=":
236
+ - !binary |-
237
+ MTcxNg==
238
+ !binary "RGF0ZQ==":
239
+ - !binary |-
240
+ U3VuLCAxNiBEZWMgMjAxMiAwNjowOToyNiBHTVQ=
241
+ !binary "WC1WYXJuaXNo":
242
+ - !binary |-
243
+ MTU0NzczOTc2Mg==
244
+ !binary "QWdl":
245
+ - !binary |-
246
+ MA==
247
+ !binary "Vmlh":
248
+ - !binary |-
249
+ MS4xIHZhcm5pc2g=
250
+ !binary "Q29ubmVjdGlvbg==":
251
+ - !binary |-
252
+ a2VlcC1hbGl2ZQ==
253
+ body:
254
+ encoding: ASCII-8BIT
255
+ string: !binary |-
256
+ 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
294
+ LE6vKAAA
295
+ http_version:
296
+ recorded_at: Sun, 16 Dec 2012 06:09:25 GMT
297
+ recorded_with: VCR 2.3.0