steam_web_api 0.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.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +15 -0
  5. data/Gemfile +6 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.html +1134 -0
  8. data/README.md +356 -0
  9. data/Rakefile +11 -0
  10. data/lib/steam_web_api/base.rb +39 -0
  11. data/lib/steam_web_api/configuration.rb +9 -0
  12. data/lib/steam_web_api/game.rb +37 -0
  13. data/lib/steam_web_api/player.rb +108 -0
  14. data/lib/steam_web_api/version.rb +3 -0
  15. data/lib/steam_web_api.rb +29 -0
  16. data/spec/fixtures/vcr/game_achievement_percentages.yml +624 -0
  17. data/spec/fixtures/vcr/game_achievement_percentages_error.yml +37 -0
  18. data/spec/fixtures/vcr/game_news_error.yml +37 -0
  19. data/spec/fixtures/vcr/game_news_success.yml +96 -0
  20. data/spec/fixtures/vcr/game_schema.yml +3538 -0
  21. data/spec/fixtures/vcr/player_achievements.yml +91 -0
  22. data/spec/fixtures/vcr/player_achievements_empty.yml +35 -0
  23. data/spec/fixtures/vcr/player_bans.yml +38 -0
  24. data/spec/fixtures/vcr/player_bans_error.yml +37 -0
  25. data/spec/fixtures/vcr/player_friends.yml +51 -0
  26. data/spec/fixtures/vcr/player_friends_error.yml +44 -0
  27. data/spec/fixtures/vcr/player_owned_games.yml +82 -0
  28. data/spec/fixtures/vcr/player_owned_games_appinfo.yml +291 -0
  29. data/spec/fixtures/vcr/player_playing_shared_game.yml +36 -0
  30. data/spec/fixtures/vcr/player_playing_shared_game_error.yml +44 -0
  31. data/spec/fixtures/vcr/player_recently_played_games.yml +48 -0
  32. data/spec/fixtures/vcr/player_recently_played_games_error.yml +44 -0
  33. data/spec/fixtures/vcr/player_recently_played_games_with_count.yml +42 -0
  34. data/spec/fixtures/vcr/player_single_bans.yml +36 -0
  35. data/spec/fixtures/vcr/player_single_bans_error.yml +37 -0
  36. data/spec/fixtures/vcr/player_single_summary.yml +43 -0
  37. data/spec/fixtures/vcr/player_single_summary_error.yml +37 -0
  38. data/spec/fixtures/vcr/player_summary.yml +51 -0
  39. data/spec/fixtures/vcr/player_summary_error.yml +37 -0
  40. data/spec/fixtures/vcr/stats_for_game.yml +321 -0
  41. data/spec/fixtures/vcr/stats_for_game_empty.yml +37 -0
  42. data/spec/spec_helper.rb +45 -0
  43. data/spec/steam_web_api/base_spec.rb +94 -0
  44. data/spec/steam_web_api/configuration_spec.rb +16 -0
  45. data/spec/steam_web_api/game_spec.rb +137 -0
  46. data/spec/steam_web_api/player_spec.rb +362 -0
  47. data/spec/steam_web_api_spec.rb +18 -0
  48. data/steam_web_api.gemspec +30 -0
  49. metadata +235 -0
@@ -0,0 +1,51 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002?key=<API_KEY>&steamids=76561198046174695,76561197960435530
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.9.0
12
+ Accept-Encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ Accept:
15
+ - "*/*"
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Wed, 14 Jan 2015 05:12:43 GMT
23
+ Expires:
24
+ - Wed, 14 Jan 2015 05:12:43 GMT
25
+ Content-Type:
26
+ - application/json; charset=UTF-8
27
+ Content-Length:
28
+ - '1859'
29
+ body:
30
+ encoding: UTF-8
31
+ string: "{\n\t\"response\": {\n\t\t\"players\": [\n\t\t\t{\n\t\t\t\t\"steamid\":
32
+ \"76561198046174695\",\n\t\t\t\t\"communityvisibilitystate\": 3,\n\t\t\t\t\"profilestate\":
33
+ 1,\n\t\t\t\t\"personaname\": \"gravin79\",\n\t\t\t\t\"lastlogoff\": 1421192890,\n\t\t\t\t\"commentpermission\":
34
+ 1,\n\t\t\t\t\"profileurl\": \"http://steamcommunity.com/profiles/76561198046174695/\",\n\t\t\t\t\"avatar\":
35
+ \"http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/7a/7aa6dcdb282e48f09a67b25f791493d779aa3311.jpg\",\n\t\t\t\t\"avatarmedium\":
36
+ \"http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/7a/7aa6dcdb282e48f09a67b25f791493d779aa3311_medium.jpg\",\n\t\t\t\t\"avatarfull\":
37
+ \"http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/7a/7aa6dcdb282e48f09a67b25f791493d779aa3311_full.jpg\",\n\t\t\t\t\"personastate\":
38
+ 0,\n\t\t\t\t\"realname\": \"GTomasz\",\n\t\t\t\t\"primaryclanid\": \"103582791433775490\",\n\t\t\t\t\"timecreated\":
39
+ 1312107940,\n\t\t\t\t\"personastateflags\": 0,\n\t\t\t\t\"loccountrycode\":
40
+ \"PL\",\n\t\t\t\t\"locstatecode\": \"67\",\n\t\t\t\t\"loccityid\": 36018\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"steamid\":
41
+ \"76561197960435530\",\n\t\t\t\t\"communityvisibilitystate\": 3,\n\t\t\t\t\"profilestate\":
42
+ 1,\n\t\t\t\t\"personaname\": \"Robin\",\n\t\t\t\t\"lastlogoff\": 1421176474,\n\t\t\t\t\"profileurl\":
43
+ \"http://steamcommunity.com/id/robinwalker/\",\n\t\t\t\t\"avatar\": \"http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/f1/f1dd60a188883caf82d0cbfccfe6aba0af1732d4.jpg\",\n\t\t\t\t\"avatarmedium\":
44
+ \"http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/f1/f1dd60a188883caf82d0cbfccfe6aba0af1732d4_medium.jpg\",\n\t\t\t\t\"avatarfull\":
45
+ \"http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/f1/f1dd60a188883caf82d0cbfccfe6aba0af1732d4_full.jpg\",\n\t\t\t\t\"personastate\":
46
+ 0,\n\t\t\t\t\"realname\": \"Robin Walker\",\n\t\t\t\t\"primaryclanid\": \"103582791429521412\",\n\t\t\t\t\"timecreated\":
47
+ 1063407589,\n\t\t\t\t\"personastateflags\": 0,\n\t\t\t\t\"loccountrycode\":
48
+ \"US\",\n\t\t\t\t\"locstatecode\": \"WA\",\n\t\t\t\t\"loccityid\": 3961\n\t\t\t}\n\t\t]\n\t\t\n\t}\n}"
49
+ http_version:
50
+ recorded_at: Wed, 14 Jan 2015 05:12:43 GMT
51
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,37 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002?key=invalid&steamids=76561198046174695,76561197960435530
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.9.0
12
+ Accept-Encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ Accept:
15
+ - "*/*"
16
+ response:
17
+ status:
18
+ code: 403
19
+ message: Forbidden
20
+ headers:
21
+ Content-Length:
22
+ - '168'
23
+ Content-Type:
24
+ - text/html; charset=UTF-8
25
+ Date:
26
+ - Wed, 14 Jan 2015 05:36:55 GMT
27
+ Expires:
28
+ - Mon, 26 Jul 1997 05:00:00 GMT
29
+ Cache-Control:
30
+ - no-cache,must-revalidate
31
+ body:
32
+ encoding: UTF-8
33
+ string: "<html><head><title>Forbidden</title></head><body><h1>Forbidden</h1>Access
34
+ is denied. Retrying will not help. Please verify your <pre>key=</pre> parameter.</body></html>"
35
+ http_version:
36
+ recorded_at: Wed, 14 Jan 2015 05:36:55 GMT
37
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,321 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v0002?appid=8930&format=json&key=<API_KEY>&steamid=76561198046174695
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.9.0
12
+ Accept-Encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ Accept:
15
+ - "*/*"
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Tue, 06 Jan 2015 08:28:02 GMT
23
+ Expires:
24
+ - Tue, 06 Jan 2015 08:33:02 GMT
25
+ Content-Type:
26
+ - application/json; charset=UTF-8
27
+ Content-Length:
28
+ - '19075'
29
+ body:
30
+ encoding: UTF-8
31
+ string: "{\n\t\"playerstats\": {\n\t\t\"steamID\": \"76561198046174695\",\n\t\t\"gameName\":
32
+ \"ValveTestApp8930\",\n\t\t\"achievements\": [\n\t\t\t{\n\t\t\t\t\"name\":
33
+ \"ACHIEVEMENT_WIN_WASHINGTON\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
34
+ \"ACHIEVEMENT_WIN_ELIZABETH\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
35
+ \"ACHIEVEMENT_WIN_NAPOLEON\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
36
+ \"ACHIEVEMENT_WIN_BISMARCK\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
37
+ \"ACHIEVEMENT_WIN_CATHERINE\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
38
+ \"ACHIEVEMENT_WIN_CAESAR\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
39
+ \"ACHIEVEMENT_WIN_ALEXANDER\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
40
+ \"ACHIEVEMENT_WIN_RAMESSES\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
41
+ \"ACHIEVEMENT_WIN_ASKIA\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
42
+ \"ACHIEVEMENT_WIN_HARUN\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
43
+ \"ACHIEVEMENT_WIN_DARIUS\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
44
+ \"ACHIEVEMENT_WIN_GANDHI\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
45
+ \"ACHIEVEMENT_WIN_ODA\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
46
+ \"ACHIEVEMENT_WIN_SULEIMAN\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
47
+ \"ACHIEVEMENT_DIFLEVEL_SETTLER\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
48
+ \"ACHIEVEMENT_DIFLEVEL_CHIEFTAIN\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
49
+ \"ACHIEVEMENT_DIFLEVEL_WARLORD\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
50
+ \"ACHIEVEMENT_DIFLEVEL_PRINCE\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
51
+ \"ACHIEVEMENT_DIFLEVEL_KING\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
52
+ \"ACHIEVEMENT_DIFLEVEL_EMPEROR\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
53
+ \"ACHIEVEMENT_DIFLEVEL_IMMORTAL\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
54
+ \"ACHIEVEMENT_DIFLEVEL_DEITY\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
55
+ \"ACHIEVEMENT_MAPSIZE_DUEL\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
56
+ \"ACHIEVEMENT_MAPSIZE_TINY\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
57
+ \"ACHIEVEMENT_MAPSIZE_SMALL\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
58
+ \"ACHIEVEMENT_MAPSIZE_STANDARD\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
59
+ \"ACHIEVEMENT_MAPSIZE_LARGE\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
60
+ \"ACHIEVEMENT_MAPSIZE_HUGE\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
61
+ \"ACHIEVEMENT_MAPTYPE_CONTINENTS\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
62
+ \"ACHIEVEMENT_MAPTYPE_PANGAEA\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
63
+ \"ACHIEVEMENT_MAPTYPE_ARCHIPELAGO\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
64
+ \"ACHIEVEMENT_MAPTYPE_EARTH\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
65
+ \"ACHIEVEMENT_MAPS_ALL\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
66
+ \"ACHIEVEMENT_CITYSTATE_ALLY\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
67
+ \"ACHIEVEMENT_CITYSTATE_ANNEX\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
68
+ \"ACHIEVEMENT_BUILD_WONDER\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
69
+ \"ACHIEVEMENT_UNIT_UPGRADE\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
70
+ \"ACHIEVEMENT_UNIT_PROMOTE\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
71
+ \"ACHIEVEMENT_DESTROY_CIV\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
72
+ \"ACHIEVEMENT_SECOND_CITY\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
73
+ \"ACHIEVEMENT_ANCIENT_RUIN\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
74
+ \"ACHIEVEMENT_ALL_TECHS\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
75
+ \"ACHIEVEMENT_ALL_WONDERS\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
76
+ \"ACHIEVEMENT_ALL_SOCIAL_POLICIES\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
77
+ \"ACHIEVEMENT_ALL_UNITS\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
78
+ \"ACHIEVEMENT_GOLDEN_AGE\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
79
+ \"ACHIEVEMENT_CITY_100CULTURE\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
80
+ \"ACHIEVEMENT_CITY_100SCIENCE\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
81
+ \"ACHIEVEMENT_CITY_100GOLD\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
82
+ \"ACHIEVEMENT_ONEHITKILL\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
83
+ \"ACHIEVEMENT_UNIT_EMBARK\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
84
+ \"ACHIEVEMENT_100CAMPS\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
85
+ \"ACHIEVEMENT_SUCK_AT_WONDERS\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
86
+ \"ACHIEVEMENT_ONECITY\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
87
+ \"ACHIEVEMENT_VICTORY_SPACE\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
88
+ \"ACHIEVEMENT_VICTORY_CULTURE\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
89
+ \"ACHIEVEMENT_VICTORY_DIPLO\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
90
+ \"ACHIEVEMENT_VICTORY_DOMINATION\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
91
+ \"ACHIEVEMENT_VICTORY_ALL\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
92
+ \"ACHIEVEMENT_DROP_NUKE\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
93
+ \"ACHIEVEMENT_EXPANSIONIST\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
94
+ \"ACHIEVEMENT_POLICY_LIBERTY\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
95
+ \"ACHIEVEMENT_POLICY_PIETY\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
96
+ \"ACHIEVEMENT_POLICY_AUTOCRACY\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
97
+ \"ACHIEVEMENT_POLICY_ORDER\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
98
+ \"ACHIEVEMENT_POLICY_TRADITION\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
99
+ \"ACHIEVEMENT_POLICY_HONOR\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
100
+ \"ACHIEVEMENT_POLICY_PATRONAGE\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
101
+ \"ACHIEVEMENT_POLICY_COMMERCE\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
102
+ \"ACHIEVEMENT_POLICY_RATIONALISM\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
103
+ \"ACHIEVEMENT_POLICY_FREEDOM\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
104
+ \"ACHIEVEMENT_ALL_NATURALWONDER\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
105
+ \"ACHIEVEMENT_1000ROADS\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
106
+ \"ACHIEVEMENT_1000MINES\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
107
+ \"ACHIEVEMENT_100RESOURCES\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
108
+ \"ACHIEVEMENT_1000TILES\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
109
+ \"ACHIEVEMENT_ROUND_WORLD\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
110
+ \"ACHIEVEMENT_SPECIAL_B17\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
111
+ \"ACHIEVEMENT_SPECIAL_TRADER\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
112
+ \"ACHIEVEMENT_SPECIAL_GARDENS\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
113
+ \"ACHIEVEMENT_SPECIAL_SPHINX\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
114
+ \"ACHIEVEMENT_SPECIAL_MUSKETEERS\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
115
+ \"ACHIEVEMENT_SPECIAL_LONGHOUSE\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
116
+ \"ACHIEVEMENT_SPECIAL_BOLLYWOOD\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
117
+ \"ACHIEVEMENT_SPECIAL_KAMIKAZE\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
118
+ \"ACHIEVEMENT_SPECIAL_ARCHAEMENNID\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
119
+ \"ACHIEVEMENT_SPECIAL_ROMANROADS\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
120
+ \"ACHIEVEMENT_SPECIAL_SUNTZU\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
121
+ \"ACHIEVEMENT_SPECIAL_BARBARIANWARLORD\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
122
+ \"ACHIEVEMENT_SPECIAL_TOMBRAIDER\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
123
+ \"ACHIEVEMENT_SPECIAL_WARCANOE\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
124
+ \"ACHIEVEMENT_SPECIAL_PONY\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
125
+ \"ACHIEVEMENT_SPECIAL_CONQUEST_WORLD\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
126
+ \"ACHIEVEMENT_REALLY_SUCK\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
127
+ \"ACHIEVEMENT_SCENARIO_02_DISCOVER_FOUNTAIN\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
128
+ \"ACHIEVEMENT_SCENARIO_02_DISCOVER_EL_DORADO\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
129
+ \"ACHIEVEMENT_SCENARIO_04_PILLAGE\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
130
+ \"ACHIEVEMENT_WIN_SEJONG\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
131
+ \"ACHIEVEMENT_SPECIAL_ROME_GETS_ZEUS\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
132
+ \"ACHIEVEMENT_SPECIAL_ZEUS_AND_ARTEMIS\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
133
+ \"ACHIEVEMENT_SPECIAL_HALICARNASSUS_GOLD\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
134
+ \"ACHIEVEMENT_XP1_02\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
135
+ \"ACHIEVEMENT_XP1_04\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
136
+ \"ACHIEVEMENT_XP1_10\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
137
+ \"ACHIEVEMENT_XP1_11\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
138
+ \"ACHIEVEMENT_XP1_12\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
139
+ \"ACHIEVEMENT_XP1_13\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
140
+ \"ACHIEVEMENT_XP1_14\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
141
+ \"ACHIEVEMENT_XP1_15\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
142
+ \"ACHIEVEMENT_XP1_16\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
143
+ \"ACHIEVEMENT_XP1_17\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
144
+ \"ACHIEVEMENT_XP1_18\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
145
+ \"ACHIEVEMENT_XP1_20\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
146
+ \"ACHIEVEMENT_XP1_25\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
147
+ \"ACHIEVEMENT_XP1_26\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
148
+ \"ACHIEVEMENT_XP1_27\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
149
+ \"ACHIEVEMENT_XP1_33\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
150
+ \"ACHIEVEMENT_XP1_37\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
151
+ \"ACHIEVEMENT_XP2_05\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
152
+ \"ACHIEVEMENT_XP2_10\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
153
+ \"ACHIEVEMENT_XP2_11\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
154
+ \"ACHIEVEMENT_XP2_12\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
155
+ \"ACHIEVEMENT_XP2_13\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
156
+ \"ACHIEVEMENT_XP2_14\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
157
+ \"ACHIEVEMENT_XP2_15\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
158
+ \"ACHIEVEMENT_XP2_16\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
159
+ \"ACHIEVEMENT_XP2_17\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
160
+ \"ACHIEVEMENT_XP2_18\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
161
+ \"ACHIEVEMENT_XP2_19\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
162
+ \"ACHIEVEMENT_XP2_23\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
163
+ \"ACHIEVEMENT_XP2_24\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
164
+ \"ACHIEVEMENT_XP2_27\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
165
+ \"ACHIEVEMENT_XP2_28\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
166
+ \"ACHIEVEMENT_XP2_30\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
167
+ \"ACHIEVEMENT_XP2_31\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
168
+ \"ACHIEVEMENT_XP2_32\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
169
+ \"ACHIEVEMENT_XP2_36\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
170
+ \"ACHIEVEMENT_XP2_37\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
171
+ \"ACHIEVEMENT_XP2_38\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
172
+ \"ACHIEVEMENT_XP2_40\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
173
+ \"ACHIEVEMENT_XP2_41\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
174
+ \"ACHIEVEMENT_XP2_42\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
175
+ \"ACHIEVEMENT_XP2_43\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
176
+ \"ACHIEVEMENT_XP2_44\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
177
+ \"ACHIEVEMENT_XP2_45\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
178
+ \"ACHIEVEMENT_XP2_46\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
179
+ \"ACHIEVEMENT_XP2_47\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
180
+ \"ACHIEVEMENT_XP2_48\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
181
+ \"ACHIEVEMENT_XP2_56\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
182
+ \"ACHIEVEMENT_XP2_57\",\n\t\t\t\t\"achieved\": 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\":
183
+ \"ACHIEVEMENT_XP2_58\",\n\t\t\t\t\"achieved\": 1\n\t\t\t}\n\t\t]\n\t\t,\n\t\t\"stats\":
184
+ [\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_TOTAL_WINS\",\n\t\t\t\t\"value\":
185
+ 24\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_ARCHER\",\n\t\t\t\t\"value\":
186
+ 140\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_CHARIOTARCHER\",\n\t\t\t\t\"value\":
187
+ 19\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_HOPLITE\",\n\t\t\t\t\"value\":
188
+ 9\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_IMMORTAL\",\n\t\t\t\t\"value\":
189
+ 6\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_JAGUAR\",\n\t\t\t\t\"value\":
190
+ 11\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_SCOUT\",\n\t\t\t\t\"value\":
191
+ 155\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_SETTLER\",\n\t\t\t\t\"value\":
192
+ 369\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_SPEARMAN\",\n\t\t\t\t\"value\":
193
+ 52\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_TRIREME\",\n\t\t\t\t\"value\":
194
+ 94\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_WARCHARIOT\",\n\t\t\t\t\"value\":
195
+ 2\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_WARELEPHANT\",\n\t\t\t\t\"value\":
196
+ 10\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_WARRIOR\",\n\t\t\t\t\"value\":
197
+ 50\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_WORKBOAT\",\n\t\t\t\t\"value\":
198
+ 536\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_WORKER\",\n\t\t\t\t\"value\":
199
+ 283\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_BALLISTA\",\n\t\t\t\t\"value\":
200
+ 3\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_CATAPULT\",\n\t\t\t\t\"value\":
201
+ 42\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_COMPANIONCAVALRY\",\n\t\t\t\t\"value\":
202
+ 2\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_HORSEMAN\",\n\t\t\t\t\"value\":
203
+ 35\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_LEGION\",\n\t\t\t\t\"value\":
204
+ 2\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_MOHAWKWARRIOR\",\n\t\t\t\t\"value\":
205
+ 6\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_SWORDSMAN\",\n\t\t\t\t\"value\":
206
+ 36\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_CAMELARCHER\",\n\t\t\t\t\"value\":
207
+ 4\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_CHUKONU\",\n\t\t\t\t\"value\":
208
+ 5\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_CROSSBOWMAN\",\n\t\t\t\t\"value\":
209
+ 43\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_KNIGHT\",\n\t\t\t\t\"value\":
210
+ 64\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_LANDSKNECHT\",\n\t\t\t\t\"value\":
211
+ 2\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_LONGBOWMAN\",\n\t\t\t\t\"value\":
212
+ 12\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_LONGSWORDSMAN\",\n\t\t\t\t\"value\":
213
+ 15\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_MANDEKALUCAVALRY\",\n\t\t\t\t\"value\":
214
+ 7\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_PIKEMAN\",\n\t\t\t\t\"value\":
215
+ 34\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_NARESUANSELEPHANT\",\n\t\t\t\t\"value\":
216
+ 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_SAMURAI\",\n\t\t\t\t\"value\":
217
+ 5\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_TREBUCHET\",\n\t\t\t\t\"value\":
218
+ 39\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_CANNON\",\n\t\t\t\t\"value\":
219
+ 97\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_CARAVEL\",\n\t\t\t\t\"value\":
220
+ 22\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_COSSACK\",\n\t\t\t\t\"value\":
221
+ 9\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_FRIGATE\",\n\t\t\t\t\"value\":
222
+ 99\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_JANISSARY\",\n\t\t\t\t\"value\":
223
+ 2\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_LANCER\",\n\t\t\t\t\"value\":
224
+ 6\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_MINUTEMAN\",\n\t\t\t\t\"value\":
225
+ 4\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_MUSKETEER\",\n\t\t\t\t\"value\":
226
+ 7\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_MUSKETMAN\",\n\t\t\t\t\"value\":
227
+ 47\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_RIFLEMAN\",\n\t\t\t\t\"value\":
228
+ 39\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_SHIPOFTHELINE\",\n\t\t\t\t\"value\":
229
+ 37\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_SIPAHI\",\n\t\t\t\t\"value\":
230
+ 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_ANTIAIRCRAFTGUN\",\n\t\t\t\t\"value\":
231
+ 7\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_ANTITANKGUN\",\n\t\t\t\t\"value\":
232
+ 7\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_ARTILLERY\",\n\t\t\t\t\"value\":
233
+ 165\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_BATTLESHIP\",\n\t\t\t\t\"value\":
234
+ 43\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_CARRIER\",\n\t\t\t\t\"value\":
235
+ 15\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_DESTROYER\",\n\t\t\t\t\"value\":
236
+ 34\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_FIGHTER\",\n\t\t\t\t\"value\":
237
+ 3\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_FOREIGNLEGION\",\n\t\t\t\t\"value\":
238
+ 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_INFANTRY\",\n\t\t\t\t\"value\":
239
+ 7\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_IRONCLAD\",\n\t\t\t\t\"value\":
240
+ 3\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_PANZER\",\n\t\t\t\t\"value\":
241
+ 8\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_SUBMARINE\",\n\t\t\t\t\"value\":
242
+ 88\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_TANK\",\n\t\t\t\t\"value\":
243
+ 15\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_ZERO\",\n\t\t\t\t\"value\":
244
+ 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_ATOMICBOMB\",\n\t\t\t\t\"value\":
245
+ 25\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_B17\",\n\t\t\t\t\"value\":
246
+ 4\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_BOMBER\",\n\t\t\t\t\"value\":
247
+ 63\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_GUIDEDMISSILE\",\n\t\t\t\t\"value\":
248
+ 3\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_HELICOPTERGUNSHIP\",\n\t\t\t\t\"value\":
249
+ 7\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_JETFIGHTER\",\n\t\t\t\t\"value\":
250
+ 5\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_MECHANIZEDINFANTRY\",\n\t\t\t\t\"value\":
251
+ 6\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_MISSILECRUISER\",\n\t\t\t\t\"value\":
252
+ 6\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_MOBILESAM\",\n\t\t\t\t\"value\":
253
+ 9\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_MODERNARMOR\",\n\t\t\t\t\"value\":
254
+ 12\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_NUCLEARMISSILE\",\n\t\t\t\t\"value\":
255
+ 3\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_NUCLEARSUBMARINE\",\n\t\t\t\t\"value\":
256
+ 19\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_PARATROOPER\",\n\t\t\t\t\"value\":
257
+ 15\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_ROCKETARTILLERY\",\n\t\t\t\t\"value\":
258
+ 27\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_SSBOOSTER\",\n\t\t\t\t\"value\":
259
+ 11\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_SSCOCKPIT\",\n\t\t\t\t\"value\":
260
+ 4\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_STEALTHBOMBER\",\n\t\t\t\t\"value\":
261
+ 2\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_GIANTDEATHROBOT\",\n\t\t\t\t\"value\":
262
+ 2\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_SSENGINE\",\n\t\t\t\t\"value\":
263
+ 4\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_SSSTASISCHAMBER\",\n\t\t\t\t\"value\":
264
+ 4\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_ANGKORWAT\",\n\t\t\t\t\"value\":
265
+ 12\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_BIGBEN\",\n\t\t\t\t\"value\":
266
+ 12\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_BRANDENBURGGATE\",\n\t\t\t\t\"value\":
267
+ 20\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_CHICHENITZA\",\n\t\t\t\t\"value\":
268
+ 11\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_CRISTOREDENTOR\",\n\t\t\t\t\"value\":
269
+ 12\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_EIFFELTOWER\",\n\t\t\t\t\"value\":
270
+ 20\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_HIMEJICASTLE\",\n\t\t\t\t\"value\":
271
+ 10\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_MACHUPICCHU\",\n\t\t\t\t\"value\":
272
+ 8\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_NOTREDAME\",\n\t\t\t\t\"value\":
273
+ 8\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_PENTAGON\",\n\t\t\t\t\"value\":
274
+ 9\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_SISTINECHAPEL\",\n\t\t\t\t\"value\":
275
+ 24\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_STATUEOFLIBERTY\",\n\t\t\t\t\"value\":
276
+ 8\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_STONEHENGE\",\n\t\t\t\t\"value\":
277
+ 36\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_SYDNEYOPERAHOUSE\",\n\t\t\t\t\"value\":
278
+ 10\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_TAJMAHAL\",\n\t\t\t\t\"value\":
279
+ 10\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_COLOSSUS\",\n\t\t\t\t\"value\":
280
+ 19\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_FORBIDDENPALACE\",\n\t\t\t\t\"value\":
281
+ 3\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_GREATLIBRARY\",\n\t\t\t\t\"value\":
282
+ 29\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_GREATLIGHTHOUSE\",\n\t\t\t\t\"value\":
283
+ 12\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_GREATWALL\",\n\t\t\t\t\"value\":
284
+ 7\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_HAGIASOPHIA\",\n\t\t\t\t\"value\":
285
+ 18\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_HANGINGGARDENS\",\n\t\t\t\t\"value\":
286
+ 35\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_KREMLIN\",\n\t\t\t\t\"value\":
287
+ 6\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_LOUVRE\",\n\t\t\t\t\"value\":
288
+ 17\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_ORACLE\",\n\t\t\t\t\"value\":
289
+ 37\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_PORCELAINTOWER\",\n\t\t\t\t\"value\":
290
+ 12\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_PYRAMIDS\",\n\t\t\t\t\"value\":
291
+ 40\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_UNITEDNATION\",\n\t\t\t\t\"value\":
292
+ 1\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_HERMITAGE\",\n\t\t\t\t\"value\":
293
+ 16\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_HEROICEPIC\",\n\t\t\t\t\"value\":
294
+ 27\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_IRONWORKS\",\n\t\t\t\t\"value\":
295
+ 49\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_NATIONALCOLLEGE\",\n\t\t\t\t\"value\":
296
+ 59\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_NATIONALEPIC\",\n\t\t\t\t\"value\":
297
+ 69\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_OXFORDUNIVERSITY\",\n\t\t\t\t\"value\":
298
+ 36\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_BARBARIANCAMPS\",\n\t\t\t\t\"value\":
299
+ 791\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_BEATWONDERS\",\n\t\t\t\t\"value\":
300
+ 1633\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_NATURALWONDERS\",\n\t\t\t\t\"value\":
301
+ 351\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_ROADS\",\n\t\t\t\t\"value\":
302
+ 1511\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_MINES\",\n\t\t\t\t\"value\":
303
+ 1576\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_RESOURCESTRADED\",\n\t\t\t\t\"value\":
304
+ 1289\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_FORESTS\",\n\t\t\t\t\"value\":
305
+ 966\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_TEMPLES\",\n\t\t\t\t\"value\":
306
+ 463\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_GREATGENERALS\",\n\t\t\t\t\"value\":
307
+ 192\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_STANDINGARMY\",\n\t\t\t\t\"value\":
308
+ 122\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_CAVALRY\",\n\t\t\t\t\"value\":
309
+ 25\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_TILESPURCHASED\",\n\t\t\t\t\"value\":
310
+ 626\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_TILESDISCOVERED\",\n\t\t\t\t\"value\":
311
+ 255200\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_BARBSCONVERTED\",\n\t\t\t\t\"value\":
312
+ 70\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_BRITISHNAVY\",\n\t\t\t\t\"value\":
313
+ 283\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_STATUEOFZEUS\",\n\t\t\t\t\"value\":
314
+ 24\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_TEMPLEOFARTEMIS\",\n\t\t\t\t\"value\":
315
+ 18\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_MAUSOLEUMOFHALICARNASSUS\",\n\t\t\t\t\"value\":
316
+ 46\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_HALICARNASSUSGOLDEARNED\",\n\t\t\t\t\"value\":
317
+ 67600\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"name\": \"ESTEAMSTAT_BULLIEDGOLD\",\n\t\t\t\t\"value\":
318
+ 2590\n\t\t\t}\n\t\t]\n\t\t\n\t}\n}"
319
+ http_version:
320
+ recorded_at: Tue, 06 Jan 2015 08:28:03 GMT
321
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,37 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v0002?appid=4760&format=json&key=<API_KEY>&steamid=76561198046174695
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.9.0
12
+ Accept-Encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ Accept:
15
+ - "*/*"
16
+ response:
17
+ status:
18
+ code: 400
19
+ message: Bad Request
20
+ headers:
21
+ Date:
22
+ - Tue, 06 Jan 2015 08:30:29 GMT
23
+ Expires:
24
+ - Tue, 06 Jan 2015 08:30:29 GMT
25
+ Content-Type:
26
+ - application/json; charset=UTF-8
27
+ Content-Length:
28
+ - '4'
29
+ body:
30
+ encoding: UTF-8
31
+ string: |-
32
+ {
33
+
34
+ }
35
+ http_version:
36
+ recorded_at: Tue, 06 Jan 2015 08:30:29 GMT
37
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,45 @@
1
+ require "codeclimate-test-reporter"
2
+ CodeClimate::TestReporter.start
3
+ require "dotenv"
4
+ Dotenv.load
5
+ require "steam_web_api"
6
+ require "webmock/rspec"
7
+ require "vcr"
8
+
9
+ WebMock.disable_net_connect!(allow_localhost: true, allow: 'codeclimate.com')
10
+
11
+ RSpec.configure do |config|
12
+
13
+
14
+ VCR.configure do |c|
15
+ c.ignore_hosts 'codeclimate.com'
16
+ c.cassette_library_dir = 'spec/fixtures/vcr'
17
+ c.filter_sensitive_data("<API_KEY>") { ENV["STEAM_WEB_API_KEY"] }
18
+ c.hook_into :webmock
19
+ end
20
+
21
+ config.expect_with :rspec do |expectations|
22
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
23
+ end
24
+
25
+ config.mock_with :rspec do |mocks|
26
+ mocks.verify_partial_doubles = true
27
+ end
28
+
29
+ config.filter_run :focus
30
+ config.run_all_when_everything_filtered = true
31
+
32
+ config.disable_monkey_patching!
33
+ config.warnings = true
34
+
35
+ if config.files_to_run.one?
36
+ config.default_formatter = 'doc'
37
+ end
38
+
39
+ config.profile_examples = 10
40
+
41
+ config.order = :random
42
+
43
+ Kernel.srand config.seed
44
+
45
+ end
@@ -0,0 +1,94 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe SteamWebApi do
4
+
5
+ let(:base) { SteamWebApi::Base.new }
6
+ let(:raw_body) { '{"response":{"someData":"hello","numbers":["1", "2", "3"],"objects":[{"a":1},{"b":2}]}}' }
7
+ let(:response) { OpenStruct.new(status: 200, body: raw_body) }
8
+ let(:response_not_successful) { OpenStruct.new(status: 403, body: '{}') }
9
+
10
+ describe '#get' do
11
+
12
+ before do
13
+ stub_request(:get, "http://api.steampowered.comiplayerservice/GetOwnedGames/v0001?format=json&key1=somevalue&key2=2")
14
+ .to_return(status: 200)
15
+ end
16
+
17
+ it 'returns proper url' do
18
+ response = base.get 'IPlayerService/GetOwnedGames/v0001', key1: 'somevalue', key2: 2
19
+ expect(response).to an_instance_of Faraday::Response
20
+ end
21
+
22
+ end
23
+
24
+ describe '#parse_response' do
25
+
26
+ it 'returns parsed json' do
27
+ base.response = OpenStruct.new(status: 200, body: '{"response":{"someData":"hello","numbers":["1", "2", "3"]}}')
28
+ data = base.parse_response['response']
29
+ expect(data['someData']).to eq 'hello'
30
+ expect(data['numbers']).to eq(["1", "2", "3"])
31
+ end
32
+
33
+ end
34
+
35
+ describe '.build_response' do
36
+
37
+ context 'when response is successful' do
38
+
39
+ it 'returns correct object' do
40
+ data = SteamWebApi::Base.build_response(response, 'response') { |data| { some_data: data['someData'], my_numbers: data['numbers'], objects: data['objects'] } }
41
+ expect(data.success).to be true
42
+ expect(data.some_data).to eq 'hello'
43
+ expect(data.my_numbers).to match_array ['1','2','3']
44
+ expect(data.objects).to eq([{"a" => 1}, {"b" => 2}])
45
+ end
46
+
47
+ end
48
+
49
+ context 'when response is not successful' do
50
+
51
+ it 'returns correct object' do
52
+ data = SteamWebApi::Base.build_response(response_not_successful, 'response') { |data| { some_data: data['someData'], my_numbers: data['numbers'], objects: data['objects'] } }
53
+ expect(data.success).to be false
54
+ end
55
+
56
+ end
57
+
58
+ end
59
+
60
+ describe '#build_response' do
61
+
62
+ context 'when response is successful' do
63
+
64
+ before do
65
+ base.response = response
66
+ end
67
+
68
+ it 'returns correct object' do
69
+ response = base.build_response('response') { |data| { some_data: data['someData'], my_numbers: data['numbers'], objects: data['objects'] } }
70
+ expect(response.success).to be true
71
+ expect(response.some_data).to eq 'hello'
72
+ expect(response.my_numbers).to match_array(['1','2','3'])
73
+ expect(response.objects.first).to eq({"a" => 1})
74
+ expect(response.objects.last).to eq({"b" => 2})
75
+ end
76
+
77
+ end
78
+
79
+ context 'when response is not successful' do
80
+
81
+ before do
82
+ base.response = response_not_successful
83
+ end
84
+
85
+ it 'returns correct object' do
86
+ response = base.build_response('response') { |data| { same_data: data['someData'], my_numbers: data['numbers'], objects: data['objects'] } }
87
+ expect(response.success).to be false
88
+ end
89
+
90
+ end
91
+
92
+ end
93
+
94
+ end
@@ -0,0 +1,16 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe SteamWebApi::Configuration do
4
+
5
+ describe '#api_key' do
6
+
7
+ let(:config) { SteamWebApi::Configuration.new }
8
+
9
+ it 'sets Steam Web API key' do
10
+ config.api_key = 'Some key'
11
+ expect(config.api_key).to eq 'Some key'
12
+ end
13
+
14
+ end
15
+
16
+ end