steam-client 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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
+ H4sIAAAAAAAAA4xay2pdRxBcJ5B/cLRP3D3TT5BlTEwgkFVwVsYLJ1aCwL4C
257
+ y4Tk71N9/UrAnNJC4ggNM3N6qqures7l47/fvH7w1/Xbu5vb06ML/V4uHlyf
258
+ fr99dXP689HFr89+/K4uHty9e3l69fL17en60cU/13cXj68u/3h7c316dffz
259
+ zd27q2++/ury7t31yzc/PQ27yvBQ7ewQ2+5bLh9+/ud/hl5dfvv8h6dPnj15
260
+ /svtbzenFy+uPg08D/uwwjx//OPz3B1rhalfPvzwny+OSs9lYkpGrV1LYpNR
261
+ bSXLyIrVKVpNVgzxtSzpqBWem+2+1o4dfTyq1bW2LbL7HSKtZBT2lbvvEa/t
262
+ upLtK107iqyoAiwZGZVSa2WREwIqVUPY7gXIxUCye1trZxpZsbYAhfQdY3s5
263
+ Q7SKLd/B3rFCwggmyle2NzntHKwuFzYqIvHE9rU3XpJh1QqBlcOollgArlso
264
+ vqpbhL6jIRosXlEmSDW6++3tm+MrHNgnJ7QaP4vEPnTLarp7cdDhJvFKBRla
265
+ Enz1ymEmhnukbWzGJg18+RKWaedABM3HHYAX21cDXEtIPlbhd26K+4WqoCy3
266
+ cdgRwk4I8erNc3ul+WKRWN4Wi+2rDMOSYBVzZWodzlWiq+o+7Ouguc0wYctW
267
+ JcW9B3iHIDosU4RxzvBqryaxT0eiLao6EAuH8jiOF4CzgER2juGDfYLoLAVa
268
+ 5TBeWFE0hnfIioXIb5YdLeWjwZiesAY5sX3hYTnNIdmaACxBId6xohmvyi6M
269
+ Irh/r7+MMSbmAqEwTOzeQCvDKvJxLbovSBMMYmyCuuHKFF+YtImyfSGxdwTL
270
+ bZTQCT5BTgITXWxFMPRuptxxhGB7yhMNcAmrtWGF2mGMASR7BV1RoPjiGDnA
271
+ qq9txpRVILF3BmEA6Bwk5HF1L3HZw8D0HK3bi/kOiJzhVsarCipnegIS2kVY
272
+ VId5IRXu4U4awoNmLYKvvNZGyT14AjLAGWPujZdslh1If6fealbUOFZD4NVM
273
+ h0WmFblg1Y6r1YwKMHlTjvaoYowJ32HABKmPa+TQovoeeWvKUAgFI1AnDNE6
274
+ Epl5PnjtysjDc0Rua0LDUHyd5S87R0wUpcccPfFCFVWmrAKe1tWp00EgnFYF
275
+ DSgiZWob9n5kAIl9ABPlzDUhZ93Z7kGDrvv4hM4uYMLFeHVBIVNMTM+nkkb1
276
+ vZ5gamhgKEXzESEN5prgOap9sT6AwfBtxr5Q2ioYypCDQNAuRnlFWLDswCDo
277
+ QuYVtuMNqeqAbofwYBVmWmTCeAK2CvxFcxt6ae1j737W5NBCzNcWMKG011Hb
278
+ DYabeQXU7FSWHbm1XI/5Hirazsd4GAlwIZSvGEN0I/RTi5grR9Y6xf10C6k7
279
+ 6R1b1jFjjk9TLdpBgiRERTt2mZilpfFIWK7Uai+aHaNgaO8RB5k4IbZ7hw8o
280
+ 2u2EAMABMQ2wNsaxOpRqwD7t6K7JyTqM1yh7iJNVXEdXCvNpATckynwHyhXi
281
+ 5TyqNSKGIafgdBhHh2RNKBhHewKuXGOep2Scg1OU487D+G2BOaSRgL635VQp
282
+ yBn4rCqs6VBQVYtRyTpuqT1NWNpz32MWaH30wJFzvsd6rD9xvgnYVFkNgTl1
283
+ Ot469f0+2mQzDwOOQCCY5zMUyGJzpY7PYVmLqJpvduuGg/adrIMEY4KZGO7B
284
+ q97EW507lAL1zr3oKD6W22CTLtpdQRVd9C4TlInN0w74OFZzVmuHMI11dFGQ
285
+ DSKG4ashA4pqOUeFaXovOjZTWNca8muaIgRfNbYpaa1dtVFrWezngGhnPhHU
286
+ 6Q7RFQNilHb5FdXvOKo1ZTbAO9y7G96AqUeBWKW3zcAE1BB9x0mioj13VVD5
287
+ cQ95cruGmGg3ShZnk8mOpD0+ALoyGb5A0TAUrCMC0FvzO3zEVLjDb0jHpuwr
288
+ GpGsIjey7B7KajrgRfuY7y882O2Dg36N7Wt0oSStChZ4SeYV0qAgjTFTgktQ
289
+ uHm/sPmtSM7XAEpzyB2IoDcG7Q1qYlpumkhB9dfoCWP9iWnoBrnTOfO9YRhj
290
+ 8kwHEtlcheRQdgueczVfx18NnOdSjePaMZ15XZNqbK5tGwAj+wLdu7LsQGls
291
+ FFEW+xHRyu4fQ3M51wBzUy7sPm1jKkxGnY5nkL4JjsZ75Be7FbH5uojiXvd8
292
+ Z8U5J+HnaNa68C8jekiCfI1Vc/cA18fmmhUBRBIJxB7VinoYsdHR9Osih4th
293
+ vgNhX2M8CFZRX8DRTJvUWXfQc0Qh0v+P+vg8n/59ev7woeG/AAAA//8DAO4F
294
+ LE6vKAAA
295
+ http_version:
296
+ recorded_at: Sun, 16 Dec 2012 06:09:25 GMT
297
+ recorded_with: VCR 2.3.0