stew 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data/.gitignore +18 -0
  2. data/.rspec +2 -0
  3. data/Gemfile +4 -0
  4. data/Guardfile +6 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +97 -0
  7. data/Rakefile +9 -0
  8. data/lib/stew.rb +58 -0
  9. data/lib/stew/community/profile.rb +23 -0
  10. data/lib/stew/community/profile_friends.rb +18 -0
  11. data/lib/stew/community/profile_game.rb +28 -0
  12. data/lib/stew/community/profile_games.rb +17 -0
  13. data/lib/stew/community/steam_id.rb +52 -0
  14. data/lib/stew/community_client.rb +42 -0
  15. data/lib/stew/store/app.rb +76 -0
  16. data/lib/stew/store/app_offer.rb +38 -0
  17. data/lib/stew/store/app_offer_sale.rb +23 -0
  18. data/lib/stew/store/app_offers.rb +25 -0
  19. data/lib/stew/store_client.rb +39 -0
  20. data/lib/stew/version.rb +3 -0
  21. data/lib/stew/web_client.rb +30 -0
  22. data/lib/stew/xml_client.rb +49 -0
  23. data/spec/fixtures/profiles/4d.txt +16 -0
  24. data/spec/fixtures/profiles/76561197992917668.txt +122 -0
  25. data/spec/fixtures/profiles/76561197992917668.yml +94 -0
  26. data/spec/fixtures/profiles/friends/76561197992917668.yml +36 -0
  27. data/spec/fixtures/profiles/games/76561197992917668.yml +616 -0
  28. data/spec/fixtures/store/apps/16870.txt +1078 -0
  29. data/spec/fixtures/store/apps/211400_offers_sale.txt +46 -0
  30. data/spec/fixtures/store/apps/211400_sale.txt +1327 -0
  31. data/spec/fixtures/store/apps/211420.txt +1320 -0
  32. data/spec/fixtures/store/apps/211420_us.txt +1306 -0
  33. data/spec/fixtures/store/apps/219150.txt +1134 -0
  34. data/spec/fixtures/store/apps/2290.txt +1059 -0
  35. data/spec/fixtures/store/apps/49520.txt +1471 -0
  36. data/spec/fixtures/store/apps/49520_offers.txt +111 -0
  37. data/spec/fixtures/store/apps/no_app.txt +5 -0
  38. data/spec/integration/community_integration_spec.rb +50 -0
  39. data/spec/integration/store_integration_spec.rb +129 -0
  40. data/spec/lib/stew/community/profile_friends_spec.rb +38 -0
  41. data/spec/lib/stew/community/profile_game_spec.rb +37 -0
  42. data/spec/lib/stew/community/profile_games_spec.rb +36 -0
  43. data/spec/lib/stew/community/profile_spec.rb +18 -0
  44. data/spec/lib/stew/community/steam_id_spec.rb +116 -0
  45. data/spec/lib/stew/community_client_spec.rb +88 -0
  46. data/spec/lib/stew/store/app_offer_sale_spec.rb +36 -0
  47. data/spec/lib/stew/store/app_offer_spec.rb +47 -0
  48. data/spec/lib/stew/store/app_offers_spec.rb +64 -0
  49. data/spec/lib/stew/store/app_spec.rb +142 -0
  50. data/spec/lib/stew/store_client_spec.rb +58 -0
  51. data/spec/lib/stew/web_client_spec.rb +25 -0
  52. data/spec/lib/stew/xml_client_spec.rb +36 -0
  53. data/spec/lib/stew_spec.rb +4 -0
  54. data/spec/spec_helper.rb +23 -0
  55. data/stew.gemspec +38 -0
  56. metadata +412 -0
@@ -0,0 +1,38 @@
1
+ module Stew
2
+ module Store
3
+
4
+ # Represents a price of an application in the steam store
5
+ class AppOffer
6
+ def self.create(node)
7
+ return AppOfferSale.new(node) unless node.at_css('div.discount_final_price').nil?
8
+ return AppOffer.new(node)
9
+ end
10
+
11
+ def initialize(node)
12
+ @node = node
13
+ end
14
+
15
+ def price
16
+ Stew.money @node.at_css('div.game_purchase_price').content.gsub(/[\n\t\r\s]/, '')
17
+ end
18
+
19
+ def sale?
20
+ false
21
+ end
22
+
23
+ def description
24
+ description_empty? ? nil : @node.at_css('p').content
25
+ end
26
+
27
+ def name
28
+ @node.at_css('h1').content.strip.gsub('Buy ','')
29
+ end
30
+
31
+ private
32
+
33
+ def description_empty?
34
+ @node.css('p').empty?
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,23 @@
1
+ module Stew
2
+ module Store
3
+
4
+ #An app offer that is a sale
5
+ class AppOfferSale < AppOffer
6
+ def price
7
+ Stew.money @node.at_css('div.discount_final_price').content.gsub(/[\n\t\r\s]/, '')
8
+ end
9
+
10
+ def regular_price
11
+ Stew.money @node.at_css('div.discount_original_price').content.gsub(/[\n\t\r\s]/, '')
12
+ end
13
+
14
+ def sale?
15
+ true
16
+ end
17
+
18
+ def description
19
+ nil
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,25 @@
1
+ module Stew
2
+ module Store
3
+
4
+ #The offers of an application
5
+ class AppOffers
6
+ include Enumerable
7
+
8
+ def initialize(node)
9
+ @app_offers = node.css("div.game_area_purchase_game").map {|item| AppOffer.create(item)}
10
+ end
11
+
12
+ def each(&block)
13
+ @app_offers.each {|item| yield item}
14
+ end
15
+
16
+ def sale?
17
+ sales.count != 0
18
+ end
19
+
20
+ def sales
21
+ @app_offers.select {|item| item.sale?}
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,39 @@
1
+ module Stew
2
+ # Creation of app objects from URLs or app_ids
3
+ #
4
+ # Can create apps for any steam region. When no region is given, it defaults to the default region in the configuration
5
+ #
6
+ # @example Creation of a Stew::Store::App from a URL
7
+ # Stew::StoreClient.new.create_app('http://store.steampowered.com/app/211420') #=> Stew::StoreClient::App
8
+ #
9
+ # @example Creation of a Stew::Store::App from an id
10
+ # Stew::StoreClient.new.create_app(211420) #=> Stew::StoreClient::App
11
+ #
12
+ # @example Creation of a Stew::Store::App from a URL with a different region
13
+ # Stew::StoreClient.new.create_app('http://store.steampowered.com/app/211420?cc=uk') #=> Stew::StoreClient::App
14
+ #
15
+ # @example Creation of a Stew::Store::App from an id and a region
16
+ # Stew::StoreClient.new.app(211420, :uk) #=> Stew::StoreClient::App
17
+ #
18
+ class StoreClient
19
+ STORE_URL = 'http://store.steampowered.com'
20
+
21
+ def initialize(opts = {})
22
+ @client = opts[:client] || Stew.config[:default_web_client].new(STORE_URL)
23
+ end
24
+
25
+ def create_app(data)
26
+ return app(data) if data.class == Fixnum
27
+ return app($1,$2) if data =~ /store.steampowered.com\/app\/([0-9]+)\/?\?cc=([a-zA-Z]{2})/
28
+ return app($1) if data =~ /store.steampowered.com\/app\/([0-9]+)/
29
+ raise AppIdNotFoundError
30
+ end
31
+
32
+ def app(app_id,region = Stew.config[:default_region])
33
+ Store::App.new(@client.get("/app/#{app_id}",:cc => region.to_sym))
34
+ end
35
+ end
36
+
37
+ # Error used when an app cannot be found
38
+ class AppIdNotFoundError < StandardError; end
39
+ end
@@ -0,0 +1,3 @@
1
+ module Stew
2
+ VERSION = "0.5.0"
3
+ end
@@ -0,0 +1,30 @@
1
+ module Stew
2
+
3
+ # Client wrapper for performing requests to the Steam Store
4
+ class WebClient
5
+ def initialize(uri)
6
+ @connection = WebClient.connection(uri)
7
+ end
8
+
9
+ def get(path, options={})
10
+ request(path, options).body
11
+ end
12
+
13
+ private
14
+
15
+ def request(path,options={})
16
+ @connection.get(path) do |request|
17
+ request.params = options
18
+ end
19
+ end
20
+
21
+ def self.connection(uri)
22
+ Faraday.new uri do |conn|
23
+ conn.headers[:cookie] = "birthtime=365842801"
24
+ conn.request :retry
25
+ conn.use FaradayMiddleware::FollowRedirects
26
+ conn.adapter Faraday.default_adapter
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,49 @@
1
+ module Stew
2
+
3
+ # Client for accessing the steam community XML api
4
+ class XmlClient
5
+ def initialize(uri)
6
+ @connection = XmlClient.connection(uri)
7
+ end
8
+
9
+ # The Steam community is notorious for responding with error 503
10
+ # Retries up to 10 times for the same request to compensate for this
11
+ def get(path)
12
+ 10.times do
13
+ response = request(path)
14
+ return XmlClient.parse_response(response.body) unless response.status == 503
15
+ sleep 0.5
16
+ end
17
+ raise ServiceUnavailableError
18
+ end
19
+
20
+ private
21
+
22
+ def request(path)
23
+ @connection.get path do |req|
24
+ req.params['xml'] = 1
25
+ end
26
+ end
27
+
28
+ def self.connection(uri)
29
+ Faraday.new uri do |conn|
30
+ conn.response :xml, :content_type => /\bxml$/
31
+ conn.request :retry
32
+ conn.use FaradayMiddleware::FollowRedirects
33
+ conn.adapter Faraday.default_adapter
34
+ end
35
+ end
36
+
37
+ def self.parse_response(response)
38
+ raise(ObjectNotFoundError) if response.is_a?(String)
39
+ raise(ObjectNotFoundError, response['response']['error']) if response.has_key?('response')
40
+ response
41
+ end
42
+
43
+ # Raised when the Steam community API fails to respond after 10 tries
44
+ class ServiceUnavailableError < StandardError; end
45
+
46
+ # Raised when the reply is malformatted or if nothing is found
47
+ class ObjectNotFoundError < StandardError; end
48
+ end
49
+ end
@@ -0,0 +1,16 @@
1
+ HTTP/1.1 200 OK
2
+ Server: Apache
3
+ Set-Cookie: sessionid=MTMzODU4NTQ1Ng%3D%3D; path=/
4
+ Expires: Mon, 26 Jul 1997 05:00:00 GMT
5
+ Cache-Control: no-cache
6
+ Pragma: no-cache
7
+ Set-Cookie: steamLogin=deleted; expires=Tue, 10-Jan-2012 19:17:08 GMT; path=/
8
+ Content-Type: text/xml
9
+ Content-Length: 144
10
+ Date: Wed, 09 Jan 2013 19:17:10 GMT
11
+ X-Varnish: 3352457828
12
+ Age: 0
13
+ Via: 1.1 varnish
14
+ Connection: keep-alive
15
+
16
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?><response><error><![CDATA[The specified profile could not be found.]]></error></response>
@@ -0,0 +1,122 @@
1
+ HTTP/1.1 200 OK
2
+ Server: Apache
3
+ Set-Cookie: sessionid=NjI4NjkwOTQy; path=/
4
+ Set-Cookie: Steam_Language=english; expires=Mon, 08-Jan-2018 19:19:26 GMT; path=/
5
+ Expires: Wed, 09 Jan 2013 20:19:26 GMT
6
+ Content-Type: text/xml; charset=utf-8
7
+ Content-Length: 7251
8
+ Date: Wed, 09 Jan 2013 19:19:28 GMT
9
+ X-Varnish: 3352739601
10
+ Age: 0
11
+ Via: 1.1 varnish
12
+ Connection: keep-alive
13
+
14
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?><profile>
15
+ <steamID64>76561197992917668</steamID64>
16
+ <steamID><![CDATA[MrCheese]]></steamID>
17
+ <onlineState>online</onlineState>
18
+ <stateMessage><![CDATA[Online]]></stateMessage>
19
+ <privacyState>public</privacyState>
20
+ <visibilityState>3</visibilityState>
21
+ <avatarIcon><![CDATA[http://media.steampowered.com/steamcommunity/public/images/avatars/3f/3fa6fcddcca7825ee0a77f4f4b8f4e10543a13cd.jpg]]></avatarIcon>
22
+ <avatarMedium><![CDATA[http://media.steampowered.com/steamcommunity/public/images/avatars/3f/3fa6fcddcca7825ee0a77f4f4b8f4e10543a13cd_medium.jpg]]></avatarMedium>
23
+ <avatarFull><![CDATA[http://media.steampowered.com/steamcommunity/public/images/avatars/3f/3fa6fcddcca7825ee0a77f4f4b8f4e10543a13cd_full.jpg]]></avatarFull>
24
+ <vacBanned>0</vacBanned>
25
+ <tradeBanState>None</tradeBanState>
26
+ <isLimitedAccount>0</isLimitedAccount>
27
+ <customURL><![CDATA[]]></customURL>
28
+ <memberSince>September 26, 2007</memberSince>
29
+ <steamRating>10</steamRating>
30
+ <hoursPlayed2Wk>45.1</hoursPlayed2Wk>
31
+ <headline><![CDATA[]]></headline>
32
+ <location><![CDATA[Malmo, Skane Lan, Sweden]]></location>
33
+ <realname><![CDATA[]]></realname>
34
+ <summary><![CDATA[No information given.]]></summary>
35
+ <mostPlayedGames>
36
+ <mostPlayedGame>
37
+ <gameName><![CDATA[Dark Souls: Prepare to Die Edition]]></gameName>
38
+ <gameLink><![CDATA[http://steamcommunity.com/app/211420]]></gameLink>
39
+ <gameIcon><![CDATA[http://media.steampowered.com/steamcommunity/public/images/apps/211420/a24804c6c8412c8cd9d50efd06bf03fa58ff80a9.jpg]]></gameIcon>
40
+ <gameLogo><![CDATA[http://media.steampowered.com/steamcommunity/public/images/apps/211420/d293c8e38f56de2c7097b2c7a975caca49029a8b.jpg]]></gameLogo>
41
+ <gameLogoSmall><![CDATA[http://media.steampowered.com/steamcommunity/public/images/apps/211420/d293c8e38f56de2c7097b2c7a975caca49029a8b_thumb.jpg]]></gameLogoSmall>
42
+ <hoursPlayed>16.9</hoursPlayed>
43
+ <hoursOnRecord>16.9</hoursOnRecord>
44
+ </mostPlayedGame>
45
+ <mostPlayedGame>
46
+ <gameName><![CDATA[The Walking Dead]]></gameName>
47
+ <gameLink><![CDATA[http://steamcommunity.com/app/207610]]></gameLink>
48
+ <gameIcon><![CDATA[http://media.steampowered.com/steamcommunity/public/images/apps/207610/87a13ae0a2a76488792924aa8bb0dd8a7760f931.jpg]]></gameIcon>
49
+ <gameLogo><![CDATA[http://media.steampowered.com/steamcommunity/public/images/apps/207610/6d756726214dd97c54966814d58508b86d5eabcf.jpg]]></gameLogo>
50
+ <gameLogoSmall><![CDATA[http://media.steampowered.com/steamcommunity/public/images/apps/207610/6d756726214dd97c54966814d58508b86d5eabcf_thumb.jpg]]></gameLogoSmall>
51
+ <hoursPlayed>9.3</hoursPlayed>
52
+ <hoursOnRecord>9.3</hoursOnRecord>
53
+ <statsName><![CDATA[TheWalkingDead]]></statsName>
54
+ </mostPlayedGame>
55
+ <mostPlayedGame>
56
+ <gameName><![CDATA[Anno 2070]]></gameName>
57
+ <gameLink><![CDATA[http://steamcommunity.com/app/48240]]></gameLink>
58
+ <gameIcon><![CDATA[http://media.steampowered.com/steamcommunity/public/images/apps/48240/f2ea66880f8b78ef85afa7c6c256dcb41b2df845.jpg]]></gameIcon>
59
+ <gameLogo><![CDATA[http://media.steampowered.com/steamcommunity/public/images/apps/48240/96fa0d0f7d3a2cfbd46cfbb3ec266e4fbc9c9953.jpg]]></gameLogo>
60
+ <gameLogoSmall><![CDATA[http://media.steampowered.com/steamcommunity/public/images/apps/48240/96fa0d0f7d3a2cfbd46cfbb3ec266e4fbc9c9953_thumb.jpg]]></gameLogoSmall>
61
+ <hoursPlayed>3.4</hoursPlayed>
62
+ <hoursOnRecord>3.4</hoursOnRecord>
63
+ </mostPlayedGame>
64
+ <mostPlayedGame>
65
+ <gameName><![CDATA[Shank 2]]></gameName>
66
+ <gameLink><![CDATA[http://steamcommunity.com/app/102840]]></gameLink>
67
+ <gameIcon><![CDATA[http://media.steampowered.com/steamcommunity/public/images/apps/102840/6f916b594b1056789013a3e210cdc89a5245cd6d.jpg]]></gameIcon>
68
+ <gameLogo><![CDATA[http://media.steampowered.com/steamcommunity/public/images/apps/102840/eec11d103112f36876bd746854d6e8f130ea6078.jpg]]></gameLogo>
69
+ <gameLogoSmall><![CDATA[http://media.steampowered.com/steamcommunity/public/images/apps/102840/eec11d103112f36876bd746854d6e8f130ea6078_thumb.jpg]]></gameLogoSmall>
70
+ <hoursPlayed>3.3</hoursPlayed>
71
+ <hoursOnRecord>3.3</hoursOnRecord>
72
+ <statsName><![CDATA[102840]]></statsName>
73
+ </mostPlayedGame>
74
+ <mostPlayedGame>
75
+ <gameName><![CDATA[Shank]]></gameName>
76
+ <gameLink><![CDATA[http://steamcommunity.com/app/6120]]></gameLink>
77
+ <gameIcon><![CDATA[http://media.steampowered.com/steamcommunity/public/images/apps/6120/936571702a9ed84a6c267003b3f5b26df9ae830d.jpg]]></gameIcon>
78
+ <gameLogo><![CDATA[http://media.steampowered.com/steamcommunity/public/images/apps/6120/b5938715bdb8479a24b3fc6b5c74936d160a5878.jpg]]></gameLogo>
79
+ <gameLogoSmall><![CDATA[http://media.steampowered.com/steamcommunity/public/images/apps/6120/b5938715bdb8479a24b3fc6b5c74936d160a5878_thumb.jpg]]></gameLogoSmall>
80
+ <hoursPlayed>3.3</hoursPlayed>
81
+ <hoursOnRecord>3.3</hoursOnRecord>
82
+ <statsName><![CDATA[Shank]]></statsName>
83
+ </mostPlayedGame>
84
+ <mostPlayedGame>
85
+ <gameName><![CDATA[Spec Ops: The Line]]></gameName>
86
+ <gameLink><![CDATA[http://steamcommunity.com/app/50300]]></gameLink>
87
+ <gameIcon><![CDATA[http://media.steampowered.com/steamcommunity/public/images/apps/50300/55ae859a90d61c08f18ed3aa0ee2579169d2c2bf.jpg]]></gameIcon>
88
+ <gameLogo><![CDATA[http://media.steampowered.com/steamcommunity/public/images/apps/50300/e449c7dc5a9861cf94476de1b394640f3866ddda.jpg]]></gameLogo>
89
+ <gameLogoSmall><![CDATA[http://media.steampowered.com/steamcommunity/public/images/apps/50300/e449c7dc5a9861cf94476de1b394640f3866ddda_thumb.jpg]]></gameLogoSmall>
90
+ <hoursPlayed>3.1</hoursPlayed>
91
+ <hoursOnRecord>5.4</hoursOnRecord>
92
+ <statsName><![CDATA[SpecOpsTheLine]]></statsName>
93
+ </mostPlayedGame>
94
+ </mostPlayedGames>
95
+
96
+
97
+ <weblinks>
98
+ </weblinks>
99
+
100
+ <groups>
101
+ <group isPrimary="1">
102
+ <groupID64>103582791429591238</groupID64>
103
+ <groupName><![CDATA[SnakeEyes]]></groupName>
104
+ <groupURL><![CDATA[snakeeyes]]></groupURL>
105
+ <headline><![CDATA[The best of the worst of the fun.]]></headline>
106
+ <summary><![CDATA[SnakeEyes is a widespanning gaming community not solely related to WoW anymore. We now also trade in Battlecruisers (operational, pref.) and various other 'hurt them before they hurt us' games. We pride ourselves with twisted humor and gaming for the fun of it, rather than winning. Winning is just part of the fun.]]></summary>
107
+ <avatarIcon><![CDATA[http://media.steampowered.com/steamcommunity/public/images/avatars/3c/3ccb08451a455aa069daf72adc4d5f83fb908327.jpg]]></avatarIcon>
108
+ <avatarMedium><![CDATA[http://media.steampowered.com/steamcommunity/public/images/avatars/3c/3ccb08451a455aa069daf72adc4d5f83fb908327_medium.jpg]]></avatarMedium>
109
+ <avatarFull><![CDATA[http://media.steampowered.com/steamcommunity/public/images/avatars/3c/3ccb08451a455aa069daf72adc4d5f83fb908327_full.jpg]]></avatarFull>
110
+ <memberCount>51</memberCount>
111
+ <membersInChat>0</membersInChat>
112
+ <membersInGame>0</membersInGame>
113
+ <membersOnline>0</membersOnline>
114
+ </group>
115
+ <group isPrimary="0">
116
+ <groupID64>103582791432188903</groupID64>
117
+ </group>
118
+ <group isPrimary="0">
119
+ <groupID64>103582791432706584</groupID64>
120
+ </group>
121
+ </groups>
122
+ </profile>
@@ -0,0 +1,94 @@
1
+ ---
2
+ profile:
3
+ steamID64: '76561197992917668'
4
+ steamID: MrCheese
5
+ onlineState: online
6
+ stateMessage: Online
7
+ privacyState: public
8
+ visibilityState: '3'
9
+ avatarIcon: http://media.steampowered.com/steamcommunity/public/images/avatars/3f/3fa6fcddcca7825ee0a77f4f4b8f4e10543a13cd.jpg
10
+ avatarMedium: http://media.steampowered.com/steamcommunity/public/images/avatars/3f/3fa6fcddcca7825ee0a77f4f4b8f4e10543a13cd_medium.jpg
11
+ avatarFull: http://media.steampowered.com/steamcommunity/public/images/avatars/3f/3fa6fcddcca7825ee0a77f4f4b8f4e10543a13cd_full.jpg
12
+ vacBanned: '0'
13
+ tradeBanState: None
14
+ isLimitedAccount: '0'
15
+ customURL:
16
+ memberSince: September 26, 2007
17
+ steamRating: '10'
18
+ hoursPlayed2Wk: '45.1'
19
+ headline:
20
+ location: Malmo, Skane Lan, Sweden
21
+ realname:
22
+ summary: No information given.
23
+ mostPlayedGames:
24
+ mostPlayedGame:
25
+ - gameName: ! 'Dark Souls: Prepare to Die Edition'
26
+ gameLink: http://steamcommunity.com/app/211420
27
+ gameIcon: http://media.steampowered.com/steamcommunity/public/images/apps/211420/a24804c6c8412c8cd9d50efd06bf03fa58ff80a9.jpg
28
+ gameLogo: http://media.steampowered.com/steamcommunity/public/images/apps/211420/d293c8e38f56de2c7097b2c7a975caca49029a8b.jpg
29
+ gameLogoSmall: http://media.steampowered.com/steamcommunity/public/images/apps/211420/d293c8e38f56de2c7097b2c7a975caca49029a8b_thumb.jpg
30
+ hoursPlayed: '16.9'
31
+ hoursOnRecord: '16.9'
32
+ - gameName: The Walking Dead
33
+ gameLink: http://steamcommunity.com/app/207610
34
+ gameIcon: http://media.steampowered.com/steamcommunity/public/images/apps/207610/87a13ae0a2a76488792924aa8bb0dd8a7760f931.jpg
35
+ gameLogo: http://media.steampowered.com/steamcommunity/public/images/apps/207610/6d756726214dd97c54966814d58508b86d5eabcf.jpg
36
+ gameLogoSmall: http://media.steampowered.com/steamcommunity/public/images/apps/207610/6d756726214dd97c54966814d58508b86d5eabcf_thumb.jpg
37
+ hoursPlayed: '9.3'
38
+ hoursOnRecord: '9.3'
39
+ statsName: TheWalkingDead
40
+ - gameName: Anno 2070
41
+ gameLink: http://steamcommunity.com/app/48240
42
+ gameIcon: http://media.steampowered.com/steamcommunity/public/images/apps/48240/f2ea66880f8b78ef85afa7c6c256dcb41b2df845.jpg
43
+ gameLogo: http://media.steampowered.com/steamcommunity/public/images/apps/48240/96fa0d0f7d3a2cfbd46cfbb3ec266e4fbc9c9953.jpg
44
+ gameLogoSmall: http://media.steampowered.com/steamcommunity/public/images/apps/48240/96fa0d0f7d3a2cfbd46cfbb3ec266e4fbc9c9953_thumb.jpg
45
+ hoursPlayed: '3.4'
46
+ hoursOnRecord: '3.4'
47
+ - gameName: Shank 2
48
+ gameLink: http://steamcommunity.com/app/102840
49
+ gameIcon: http://media.steampowered.com/steamcommunity/public/images/apps/102840/6f916b594b1056789013a3e210cdc89a5245cd6d.jpg
50
+ gameLogo: http://media.steampowered.com/steamcommunity/public/images/apps/102840/eec11d103112f36876bd746854d6e8f130ea6078.jpg
51
+ gameLogoSmall: http://media.steampowered.com/steamcommunity/public/images/apps/102840/eec11d103112f36876bd746854d6e8f130ea6078_thumb.jpg
52
+ hoursPlayed: '3.3'
53
+ hoursOnRecord: '3.3'
54
+ statsName: '102840'
55
+ - gameName: Shank
56
+ gameLink: http://steamcommunity.com/app/6120
57
+ gameIcon: http://media.steampowered.com/steamcommunity/public/images/apps/6120/936571702a9ed84a6c267003b3f5b26df9ae830d.jpg
58
+ gameLogo: http://media.steampowered.com/steamcommunity/public/images/apps/6120/b5938715bdb8479a24b3fc6b5c74936d160a5878.jpg
59
+ gameLogoSmall: http://media.steampowered.com/steamcommunity/public/images/apps/6120/b5938715bdb8479a24b3fc6b5c74936d160a5878_thumb.jpg
60
+ hoursPlayed: '3.3'
61
+ hoursOnRecord: '3.3'
62
+ statsName: Shank
63
+ - gameName: ! 'Spec Ops: The Line'
64
+ gameLink: http://steamcommunity.com/app/50300
65
+ gameIcon: http://media.steampowered.com/steamcommunity/public/images/apps/50300/55ae859a90d61c08f18ed3aa0ee2579169d2c2bf.jpg
66
+ gameLogo: http://media.steampowered.com/steamcommunity/public/images/apps/50300/e449c7dc5a9861cf94476de1b394640f3866ddda.jpg
67
+ gameLogoSmall: http://media.steampowered.com/steamcommunity/public/images/apps/50300/e449c7dc5a9861cf94476de1b394640f3866ddda_thumb.jpg
68
+ hoursPlayed: '3.1'
69
+ hoursOnRecord: '5.4'
70
+ statsName: SpecOpsTheLine
71
+ weblinks:
72
+ groups:
73
+ group:
74
+ - groupID64: '103582791429591238'
75
+ groupName: SnakeEyes
76
+ groupURL: snakeeyes
77
+ headline: The best of the worst of the fun.
78
+ summary: SnakeEyes is a widespanning gaming community not solely related to
79
+ WoW anymore. We now also trade in Battlecruisers (operational, pref.) and
80
+ various other 'hurt them before they hurt us' games. We pride ourselves with
81
+ twisted humor and gaming for the fun of it, rather than winning. Winning is
82
+ just part of the fun.
83
+ avatarIcon: http://media.steampowered.com/steamcommunity/public/images/avatars/3c/3ccb08451a455aa069daf72adc4d5f83fb908327.jpg
84
+ avatarMedium: http://media.steampowered.com/steamcommunity/public/images/avatars/3c/3ccb08451a455aa069daf72adc4d5f83fb908327_medium.jpg
85
+ avatarFull: http://media.steampowered.com/steamcommunity/public/images/avatars/3c/3ccb08451a455aa069daf72adc4d5f83fb908327_full.jpg
86
+ memberCount: '51'
87
+ membersInChat: '0'
88
+ membersInGame: '0'
89
+ membersOnline: '0'
90
+ isPrimary: '1'
91
+ - groupID64: '103582791432188903'
92
+ isPrimary: '0'
93
+ - groupID64: '103582791432706584'
94
+ isPrimary: '0'