steam-api 1.0.0
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.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.travis.yml +6 -0
- data/Gemfile +5 -0
- data/LICENSE.txt +22 -0
- data/README.md +37 -0
- data/Rakefile +7 -0
- data/lib/steam-api.rb +20 -0
- data/lib/steam-api/client.rb +21 -0
- data/lib/steam-api/exceptions.rb +15 -0
- data/lib/steam-api/helpers.rb +12 -0
- data/lib/steam-api/response.rb +31 -0
- data/lib/steam-api/ruby/hash.rb +11 -0
- data/lib/steam-api/steam.rb +14 -0
- data/lib/steam-api/steam/apps.rb +50 -0
- data/lib/steam-api/steam/economy.rb +57 -0
- data/lib/steam-api/steam/news.rb +30 -0
- data/lib/steam-api/steam/player.rb +73 -0
- data/lib/steam-api/steam/remote_storage.rb +38 -0
- data/lib/steam-api/steam/user.rb +90 -0
- data/lib/steam-api/steam/user_stats.rb +84 -0
- data/lib/steam-api/version.rb +5 -0
- data/spec/spec_helper.rb +14 -0
- data/spec/steam/apps_spec.rb +55 -0
- data/spec/steam/economy_spec.rb +47 -0
- data/spec/steam/news_spec.rb +15 -0
- data/spec/steam/player_spec.rb +94 -0
- data/spec/steam/remote-storage_spec.rb +9 -0
- data/spec/steam/users-stats_spec.rb +85 -0
- data/spec/steam/users_spec.rb +86 -0
- data/spec/steam_spec.rb +33 -0
- data/steam-api.gemspec +30 -0
- metadata +182 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9d350bed9837ca990cd5f05a491423b01c0bac68
|
4
|
+
data.tar.gz: f24dcce0a76752b2eeb62fe5f3428226a4756e50
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f3e780148ded110562c84ca841f9b3ebd3cbdd0faf9412290c3916ffef1e819080416290bd2de87cd71b9d960920450fa41281aa1f01ec1413cbddbf9039e257
|
7
|
+
data.tar.gz: fbf62a14354948567b72b39cbcbf2a822a79775f3de79cec7fccfc79f3dd8a73c9838b128195f391a2b740ebb5fe66b4dc7e754ba6a36eaca467a685d4a306b2
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Brian Haberer
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# SteamAPI
|
2
|
+
|
3
|
+
[](http://badge.fury.io/rb/steam-api)
|
4
|
+
[](https://gemnasium.com/bhaberer/steam-api)
|
5
|
+
[](https://travis-ci.org/bhaberer/steam-api)
|
6
|
+
[](https://coveralls.io/r/bhaberer/steam-api?branch=master)
|
7
|
+
[](https://codeclimate.com/github/bhaberer/steam-api)
|
8
|
+
|
9
|
+
`steam-api` is a simple gem to expose the Steam WebApi directly.
|
10
|
+
|
11
|
+
The Gem is not quite finished, but once it is, I will tag v1, still have a lot of work to do (especially on the docs).
|
12
|
+
|
13
|
+
## Installation
|
14
|
+
|
15
|
+
Add this line to your application's Gemfile:
|
16
|
+
|
17
|
+
gem 'steam-api'
|
18
|
+
|
19
|
+
And then execute:
|
20
|
+
|
21
|
+
$ bundle
|
22
|
+
|
23
|
+
Or install it yourself as:
|
24
|
+
|
25
|
+
$ gem install steam-api
|
26
|
+
|
27
|
+
## Usage
|
28
|
+
|
29
|
+
TODO: Write usage instructions here
|
30
|
+
|
31
|
+
## Contributing
|
32
|
+
|
33
|
+
1. Fork it
|
34
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
35
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
36
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
37
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
data/lib/steam-api.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'weary'
|
3
|
+
require 'faraday'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
require 'steam-api/version'
|
7
|
+
require 'steam-api/steam'
|
8
|
+
require 'steam-api/client'
|
9
|
+
require 'steam-api/exceptions'
|
10
|
+
require 'steam-api/response'
|
11
|
+
require 'steam-api/helpers'
|
12
|
+
require 'steam-api/steam/apps'
|
13
|
+
require 'steam-api/steam/economy'
|
14
|
+
require 'steam-api/steam/news'
|
15
|
+
require 'steam-api/steam/player'
|
16
|
+
require 'steam-api/steam/remote_storage'
|
17
|
+
require 'steam-api/steam/user'
|
18
|
+
require 'steam-api/steam/user_stats'
|
19
|
+
|
20
|
+
include Steam::Helpers
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module Steam
|
3
|
+
# Client object used to communicate with the steam webapi
|
4
|
+
class Client
|
5
|
+
def initialize(url)
|
6
|
+
@conn = Faraday.new(url: url)
|
7
|
+
end
|
8
|
+
|
9
|
+
# overriding the get method of Faraday to make things simpler.
|
10
|
+
# @param [String] resource the resource you're targeting
|
11
|
+
# @param [Hash] params Hash of parameters to pass to the resource
|
12
|
+
# @param [String] key Steam API key
|
13
|
+
def get(resource, params: {}, key: Steam.apikey)
|
14
|
+
params[:key] = key
|
15
|
+
response = @conn.get resource, params
|
16
|
+
JSON.parse(response.body)
|
17
|
+
rescue JSON::ParserError
|
18
|
+
{ error: '500 Internal Server Error' }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Steam
|
2
|
+
# Error returning the requested object from the Steam API
|
3
|
+
class SteamError < StandardError
|
4
|
+
def initialize(error = 'The API request has failed')
|
5
|
+
super(error)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
# Error returning the requested object from the Steam API
|
10
|
+
class JSONError < StandardError
|
11
|
+
def initialize(error = 'The API returned an unexpected JSON response')
|
12
|
+
super(error)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Steam
|
2
|
+
module Helpers
|
3
|
+
# Conveniance method to build clients
|
4
|
+
# @param [String] api The endpoint of the API
|
5
|
+
# @param [String] base_url the root uri for steam's API
|
6
|
+
# @return [Steam::Client] The Client
|
7
|
+
def build_client(api, base_url: 'http://api.steampowered.com')
|
8
|
+
Steam::Client.new([base_url, api].join('/'))
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Steam
|
2
|
+
# Since the steam responses are so randomly inconsistant we're making a new
|
3
|
+
# class to manage the responses.
|
4
|
+
# FIXME move all hash extensions here once the gem is finished and make
|
5
|
+
class Response < Hash
|
6
|
+
# def parse_key(key)
|
7
|
+
# fail Steam::JSONError unless self.key?(key)
|
8
|
+
# self[key]
|
9
|
+
# end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class Hash
|
14
|
+
# Simple method to access a nested field, since Valve seems to like
|
15
|
+
# nesting their json a few levels on every request.
|
16
|
+
# @param [String] key The key to extract from the hash
|
17
|
+
def parse_key(key)
|
18
|
+
fail Steam::JSONError unless self.key?(key)
|
19
|
+
self[key]
|
20
|
+
end
|
21
|
+
|
22
|
+
# Many responses from the apis (but not all) include a success
|
23
|
+
# field, so this allows us to check it wiht minimal fuss.
|
24
|
+
# @param [String] success_condition what the success condition should be
|
25
|
+
# @return [Boolean] Returns true or raises an exception.
|
26
|
+
def check_success(success_condition: true)
|
27
|
+
success = self.parse_key('success')
|
28
|
+
fail Steam::SteamError unless success == success_condition
|
29
|
+
true
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# Takes a hash and converts it into a URL encoded parameter string.
|
2
|
+
# NOTE: this does not do any uri escaping at this point, since all args should be numeric.
|
3
|
+
# @param [Hash] params Hash of params you want broken up into a query string,
|
4
|
+
# escaped, and returned to you.
|
5
|
+
# @return [String] Escaped parameter string to append to a url.
|
6
|
+
class Hash
|
7
|
+
def to_params(params = {})
|
8
|
+
params[:format] = :json
|
9
|
+
return "?#{params.each.map{ |x| x.join('=') }.join('&')}"
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
# Base class def
|
3
|
+
module Steam
|
4
|
+
@apikey = ENV['STEAM_API_KEY']
|
5
|
+
|
6
|
+
def self.apikey
|
7
|
+
fail ArgumentError, 'Please set your Steam API key.' if @apikey.nil?
|
8
|
+
@apikey
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.apikey=(key)
|
12
|
+
@apikey = key
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module Steam
|
3
|
+
# A Ruby DSL for communicating with the Apps portion of the Steam Web API.
|
4
|
+
# @see https://developer.valvesoftware.com/wiki/Steam_Web_API
|
5
|
+
# @since 1.0.0
|
6
|
+
module Apps
|
7
|
+
# Get Steam Applications
|
8
|
+
# @return [Hash] A list of objects containing the title and app ID of each program
|
9
|
+
# available in the store.
|
10
|
+
# @see http://wiki.teamfortress.com/wiki/WebAPI/GetAppList
|
11
|
+
def self.get_all
|
12
|
+
response = client.get('GetApplist/v2')
|
13
|
+
.parse_key('applist')
|
14
|
+
.parse_key('apps')
|
15
|
+
response
|
16
|
+
end
|
17
|
+
|
18
|
+
# Get Servers at Address
|
19
|
+
# @param [String] addr IP or IP:queryport to list
|
20
|
+
# @return [Hash] A hash containing the API response
|
21
|
+
# @see http://wiki.teamfortress.com/wiki/WebAPI/GetServersAtAddress
|
22
|
+
def self.get_servers(addr: nil)
|
23
|
+
response = client.get 'GetServersAtAddress/v1',
|
24
|
+
params: { addr: URI.escape(addr) }
|
25
|
+
response = response.parse_key('response')
|
26
|
+
response.check_success
|
27
|
+
response.parse_key('servers')
|
28
|
+
end
|
29
|
+
|
30
|
+
# Check if a given version of an App is current
|
31
|
+
# @param [Fixnum] appid AppID of game
|
32
|
+
# @param [Fixnum] version The installed version of the game
|
33
|
+
# @return [Hash] A hash containing the API response
|
34
|
+
# @see http://wiki.teamfortress.com/wiki/WebAPI/UpToDateCheck
|
35
|
+
def self.up_to_date(appid: nil, version: nil)
|
36
|
+
response = client.get 'UpToDateCheck/v1',
|
37
|
+
params: { appid: appid, version: version }
|
38
|
+
response = response.parse_key('response')
|
39
|
+
response.check_success
|
40
|
+
response.delete('success')
|
41
|
+
response
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def self.client
|
47
|
+
build_client 'ISteamApps'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module Steam
|
3
|
+
# A Ruby DSL for communicating with the Steam Web API.
|
4
|
+
# @see https://developer.valvesoftware.com/wiki/Steam_Web_API
|
5
|
+
# @since 1.0.0
|
6
|
+
module Economy
|
7
|
+
# Get Asset Class Info
|
8
|
+
# @param [String] appid The application ID for the Steam Game.
|
9
|
+
# @param [Hash] params Parameters to pass to the API
|
10
|
+
# @option params [Fixnum] :class_count The number of classids passed to the request.
|
11
|
+
# @option params [Fixnum] :classidN Where N can be a series of sequential numbers to form a list of class IDs. [1] [2]
|
12
|
+
# @option params [Fixnum] :instanceidN Instance ID of the nth class. (Optional)
|
13
|
+
# @option params [String] :language The ISO639-1 language code for the language all localized
|
14
|
+
# strings should be returned in. Not all strings have been translated to every language.
|
15
|
+
# If a language does not have a string, the English string will be returned instead. If this
|
16
|
+
# parameter is omitted the string token will be returned for the strings. (Optional)
|
17
|
+
# @return [Hash] A hash containing the API response
|
18
|
+
# @see http://wiki.teamfortress.com/wiki/WebAPI/UpToDateCheck
|
19
|
+
def self.asset_info(appid, params: {})
|
20
|
+
params[:appid] = appid
|
21
|
+
response = client.get 'GetAssetClassInfo/v1',
|
22
|
+
params: params
|
23
|
+
parse_response(response)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Get Asset Prices
|
27
|
+
# @param [String] appid The application ID for the Steam Game.
|
28
|
+
# @param [String] language The ISO639-1 language code for the language all localized
|
29
|
+
# strings should be returned in. Not all strings have been translated to every language.
|
30
|
+
# If a language does not have a string, the English string will be returned instead. If this
|
31
|
+
# parameter is omitted the string token will be returned for the strings. (Optional)
|
32
|
+
# @param [String] currency The ISO 4217 code for currency specific filtering. (Optional)
|
33
|
+
# @return [Hash] A hash containing the API response
|
34
|
+
# @see http://wiki.teamfortress.com/wiki/WebAPI/GetAssetPrices
|
35
|
+
def self.asset_prices(appid, language: nil, currency: nil)
|
36
|
+
params = { appid: appid }
|
37
|
+
params[:language] = language unless language.nil?
|
38
|
+
params[:currency] = currency unless currency.nil?
|
39
|
+
response = client.get 'GetAssetPrices/v1',
|
40
|
+
params: params
|
41
|
+
parse_response(response)
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def self.client
|
47
|
+
build_client 'ISteamEconomy'
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.parse_response(response)
|
51
|
+
response = response.parse_key('result')
|
52
|
+
response.check_success
|
53
|
+
response.delete('success')
|
54
|
+
response
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module Steam
|
3
|
+
# A Ruby DSL for communicating with the Steam Web API.
|
4
|
+
# @see https://developer.valvesoftware.com/wiki/Steam_Web_API
|
5
|
+
# @since 1.0.0
|
6
|
+
module News
|
7
|
+
# Get News for App
|
8
|
+
# @param [Hash] params Parameters to pass to the API
|
9
|
+
# @option params [String] :appid The application ID for the Steam Game.
|
10
|
+
# @option params [String] :key Steam Api Key
|
11
|
+
# @option params [Fixnum] :count How many news enties you want to get returned. (Optional)
|
12
|
+
# @option params [Fixnum] :maxlength Maximum length of each news entry. (Optional)
|
13
|
+
# @option params [Fixnum] :enddate Unix timestamp, returns posts before this date. (Optional)
|
14
|
+
# @option params [String] :feeds Commma-seperated list of feed names to return news for. (Optional)
|
15
|
+
# @return [Hash] A hash object of the latest news items for a game specified by its appID.
|
16
|
+
# @see http://wiki.teamfortress.com/wiki/WebAPI/GetNewsForApp
|
17
|
+
def self.get(appid, params: {})
|
18
|
+
params[:appid] = appid
|
19
|
+
client.get('GetNewsForApp/v2', params: params)
|
20
|
+
.parse_key('appnews')
|
21
|
+
.parse_key('newsitems')
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def self.client
|
27
|
+
build_client 'ISteamNews'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module Steam
|
3
|
+
# A Ruby DSL for communicating with the Steam Web API.
|
4
|
+
# @see https://developer.valvesoftware.com/wiki/Steam_Web_API
|
5
|
+
# @since 1.0.0
|
6
|
+
module Player
|
7
|
+
# Get Owned Games
|
8
|
+
# @param [Hash] params Parameters to pass to the API
|
9
|
+
# @option params [Fixnum] :steamid The 64 bit ID of the player. (Optional)
|
10
|
+
# @option params [Boolean] :include_appinfo (false) Whether or not to include additional
|
11
|
+
# details of apps - name and images.
|
12
|
+
# @option params [Boolean] :include_played_free_games (false) Whether or not to list
|
13
|
+
# free-to-play games in the results.
|
14
|
+
# @option params [Array] :appids_filter You can optionally filter the list to a set of appids.
|
15
|
+
# Note that these cannot be passed as a URL parameter, instead you must use the JSON format
|
16
|
+
# described in Steam_Web_API#Calling_Service_interfaces. The expected input is an array of
|
17
|
+
# integers (in JSON: "appids_filter: [ 440, 500, 550 ]" )
|
18
|
+
# @see http://wiki.teamfortress.com/wiki/WebAPI/GetOwnedGames
|
19
|
+
def self.owned_games(steamid, params: {})
|
20
|
+
params[:steamid] = steamid
|
21
|
+
response = client.get 'GetOwnedGames/v1', params: params
|
22
|
+
response.parse_key('response')
|
23
|
+
end
|
24
|
+
|
25
|
+
# Get Recently Played Games
|
26
|
+
# @param [Hash] params Parameters to pass to the API
|
27
|
+
# @option params [String] :steamid The SteamID of the account.
|
28
|
+
# @option params [String] :count Optionally limit to a certain number of games (the number of
|
29
|
+
# games a person has played in the last 2 weeks is typically very small)
|
30
|
+
# @see http://wiki.teamfortress.com/wiki/WebAPI/GetRecentlyPlayedGames
|
31
|
+
def self.recently_played_games(steamid, params: {})
|
32
|
+
params[:steamid] = steamid
|
33
|
+
response = client.get 'GetRecentlyPlayedGames/v1',
|
34
|
+
params: params
|
35
|
+
response.parse_key('response')
|
36
|
+
end
|
37
|
+
|
38
|
+
# Get a player's Steam Level
|
39
|
+
# @param [Fixnum] steamid The SteamID of the account.
|
40
|
+
# @see http://wiki.teamfortress.com/wiki/WebAPI/GetSteamLevel
|
41
|
+
def self.steam_level(steamid)
|
42
|
+
response = client.get 'GetSteamLevel/v1',
|
43
|
+
params: { steamid: steamid }
|
44
|
+
response.parse_key('response')
|
45
|
+
.parse_key('player_level')
|
46
|
+
end
|
47
|
+
|
48
|
+
# Get a player's Steam badges
|
49
|
+
# @param [Fixnum] steamid The SteamID of the account.
|
50
|
+
# @see http://wiki.teamfortress.com/wiki/WebAPI/GetBadges
|
51
|
+
def self.badges(steamid)
|
52
|
+
response = client.get 'GetBadges/v1',
|
53
|
+
params: { steamid: steamid }
|
54
|
+
response.parse_key('response')
|
55
|
+
end
|
56
|
+
|
57
|
+
# Get a player's Steam Level
|
58
|
+
# @param [Fixnum] steamid The SteamID of the account.
|
59
|
+
# @see http://wiki.teamfortress.com/wiki/WebAPI/GetCommunityBadgeProgress
|
60
|
+
def self.community_badge_progress(steamid)
|
61
|
+
response = client.get 'GetCommunityBadgeProgress/v1',
|
62
|
+
params: { steamid: steamid }
|
63
|
+
response.parse_key('response')
|
64
|
+
.parse_key('quests')
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def self.client
|
70
|
+
build_client 'IPlayerService'
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|