rocketleague 0.0.1 → 0.0.3
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 +4 -4
- data/README.md +64 -30
- data/lib/rocketleague.rb +4 -3
- data/lib/rocketleague/api.rb +138 -0
- data/lib/rocketleague/version.rb +2 -2
- data/rocketleague.gemspec +3 -3
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ed39bb3ba4b136142265cf60efaa5fdf8d96f3c
|
4
|
+
data.tar.gz: 55a75d94479eeef90f327e296165ea13d6c01999
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5eeeeddf927edfd6b573c10a87921e4fdfab02b2587a7e1ea1be6c72a071d0132d89f5ab6f34d6e973854e624a4992b98b995b9da67c95b8e2c7e558ee7825ca
|
7
|
+
data.tar.gz: 8658ba7ac5be7cd8fe0139e2007b40dd30d0224a87e2e26dbd7de8d1e3570ee364c11e7a64a80f7ed60e20ca2d297a63bdce805e48a88783e725c06cbc73de72
|
data/README.md
CHANGED
@@ -1,41 +1,75 @@
|
|
1
|
-
#
|
1
|
+
# RocketLeague [](https://rubygems.org/gems/rocketleague)
|
2
2
|
|
3
|
-
|
3
|
+
*Who needs standards?* ¯\\\_(ツ)\_/¯
|
4
4
|
|
5
|
-
|
5
|
+
A work in progress ruby gem for the Rocket League API.
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
Add this line to your application's Gemfile:
|
10
|
-
|
11
|
-
```ruby
|
12
|
-
gem 'rocketleague'
|
7
|
+
```shell
|
8
|
+
gem install rocketleague
|
13
9
|
```
|
14
10
|
|
15
|
-
|
16
|
-
|
17
|
-
$ bundle
|
18
|
-
|
19
|
-
Or install it yourself as:
|
20
|
-
|
21
|
-
$ gem install rocketleague
|
22
|
-
|
23
|
-
## Usage
|
11
|
+
## Example usage
|
24
12
|
|
25
|
-
|
26
|
-
|
27
|
-
## Development
|
28
|
-
|
29
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
30
|
-
|
31
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
32
|
-
|
33
|
-
## Contributing
|
13
|
+
```ruby
|
14
|
+
require "rocketleague"
|
34
15
|
|
35
|
-
|
16
|
+
# these parameters seem to change very rarely
|
17
|
+
rl = RocketLeague::API.new "https://psyonix-rl.appspot.com", 342373649, "Steam", "dUe3SE4YsR8B0c30E6r7F2KqpZSbGiVx", "pX9pn8F4JnBpoO8Aa219QC6N7g18FJ0F"
|
36
18
|
|
19
|
+
# let's start a session!
|
20
|
+
rl.login 123456789, "MyUserName", "MyAuthCode"
|
37
21
|
|
38
|
-
|
22
|
+
# we want to get some generic info + game servers
|
23
|
+
payload = rl.procencode([["GetGenericDataAll"], ["GetGameServerPingList"]])
|
24
|
+
response = rl.request "/callproc105/", payload
|
39
25
|
|
40
|
-
|
26
|
+
# parse the response
|
27
|
+
result = rl.procparse(response.body)
|
28
|
+
```
|
41
29
|
|
30
|
+
The result looks like this:
|
31
|
+
```ruby
|
32
|
+
[
|
33
|
+
[
|
34
|
+
{
|
35
|
+
"DataKey" => "Analytics",
|
36
|
+
"DataValue" => "1"
|
37
|
+
}, {
|
38
|
+
"DataKey" => "BugReports",
|
39
|
+
"DataValue" => "0"
|
40
|
+
}, {
|
41
|
+
"DataKey" => "RankEnabled",
|
42
|
+
"DataValue" => "1"
|
43
|
+
}
|
44
|
+
], [
|
45
|
+
{
|
46
|
+
"Region" => "ASC",
|
47
|
+
"IP" => "103.16.26.248:7717"
|
48
|
+
}, {
|
49
|
+
"Region" => "EU",
|
50
|
+
"IP" => "104.238.188.227:7762"
|
51
|
+
}, {
|
52
|
+
"Region" => "JPN",
|
53
|
+
"IP" => "45.32.19.87:7798"
|
54
|
+
}, {
|
55
|
+
"Region" => "ME",
|
56
|
+
"IP" => "45.32.152.240:7906"
|
57
|
+
}, {
|
58
|
+
"Region" => "nrt",
|
59
|
+
"IP" => "103.16.26.248:7801"
|
60
|
+
}, {
|
61
|
+
"Region" => "OCE",
|
62
|
+
"IP" => "45.32.241.199:7874"
|
63
|
+
}, {
|
64
|
+
"Region" => "SAM",
|
65
|
+
"IP" => "185.50.104.101:7756"
|
66
|
+
}, {
|
67
|
+
"Region" => "USE",
|
68
|
+
"IP" => "104.238.137.154:7758"
|
69
|
+
}, {
|
70
|
+
"Region" => "USW",
|
71
|
+
"IP" => "45.32.206.103:7818"
|
72
|
+
}
|
73
|
+
]
|
74
|
+
]
|
75
|
+
```
|
data/lib/rocketleague.rb
CHANGED
@@ -0,0 +1,138 @@
|
|
1
|
+
require "uri"
|
2
|
+
require "net/http"
|
3
|
+
require "net/https"
|
4
|
+
|
5
|
+
module RocketLeague
|
6
|
+
class API
|
7
|
+
DEFAULT_HEADERS = {
|
8
|
+
"Content-Type" => "application/x-www-form-urlencoded",
|
9
|
+
"Environment" => "Prod",
|
10
|
+
"User-Agent" => "UE3-TA,UE3Ver(10897)",
|
11
|
+
"Cache-Control" => "no-cache"
|
12
|
+
}
|
13
|
+
|
14
|
+
# initializes the API
|
15
|
+
# api_url should be "https://psyonix-rl.appspot.com"
|
16
|
+
# build_id changes with every Rocket League update
|
17
|
+
# platform is one of "Steam", "PS4", "XboxOne"
|
18
|
+
# login_secret_key should be "dUe3SE4YsR8B0c30E6r7F2KqpZSbGiVx" (it's not very secret)
|
19
|
+
# call_proc_key should be "pX9pn8F4JnBpoO8Aa219QC6N7g18FJ0F"
|
20
|
+
def initialize(api_url, build_id, platform, login_secret_key, call_proc_key)
|
21
|
+
@api_url = api_url
|
22
|
+
@build_id = build_id
|
23
|
+
@platform = platform
|
24
|
+
@login_secret_key = login_secret_key
|
25
|
+
@call_proc_key = call_proc_key
|
26
|
+
end
|
27
|
+
|
28
|
+
# returns a Psyonix-Style www-form-urlencoded string
|
29
|
+
# which always starts with '&'
|
30
|
+
# and keys are not encoded (e.g. contain unencoded '[]')
|
31
|
+
def formencode obj
|
32
|
+
params = [""]
|
33
|
+
obj.each do |key, val|
|
34
|
+
if val.kind_of? Array
|
35
|
+
val.each do |v|
|
36
|
+
params << "#{key}=#{URI.encode_www_form_component(v)}"
|
37
|
+
end
|
38
|
+
else
|
39
|
+
params << "#{key}=#{URI.encode_www_form_component(val)}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
params.join("&")
|
43
|
+
end
|
44
|
+
|
45
|
+
# decodes a www-form-urlencoded string
|
46
|
+
# returns a key-value Hash, where values are either strings
|
47
|
+
# or Array of strings if the key is not unique
|
48
|
+
def formdecode str
|
49
|
+
result = {}
|
50
|
+
URI.decode_www_form(str).each do |pair|
|
51
|
+
key = pair.first
|
52
|
+
val = pair.last
|
53
|
+
if result.key? key
|
54
|
+
if result[key].kind_of? Array
|
55
|
+
result[key] << val
|
56
|
+
else
|
57
|
+
result[key] = [result[key], val]
|
58
|
+
end
|
59
|
+
else
|
60
|
+
result[key] = val
|
61
|
+
end
|
62
|
+
end
|
63
|
+
result
|
64
|
+
end
|
65
|
+
|
66
|
+
# creates a Psyonix-Style Proclist body
|
67
|
+
#
|
68
|
+
# `commands` is an array of arrays where the first item is the Proc name
|
69
|
+
# followed by option arguments
|
70
|
+
#
|
71
|
+
# returns a `formencode` string with 'Proc[]=' function names and 'P#P=' arguments, where '#' is the index of the Proc
|
72
|
+
def procencode commands
|
73
|
+
payload = {}
|
74
|
+
procs = []
|
75
|
+
commands.each_with_index do |cmd, i|
|
76
|
+
procs << cmd.shift
|
77
|
+
payload["P#{i}P[]"] = cmd
|
78
|
+
end
|
79
|
+
payload["Proc[]"] = procs
|
80
|
+
formencode payload
|
81
|
+
end
|
82
|
+
|
83
|
+
# parses the response to a Proc request
|
84
|
+
# returns an Array of results, which should be analogue to the `procencode` command order.
|
85
|
+
# each result is an Array of `formdecode` Hashes.
|
86
|
+
def procparse response
|
87
|
+
results = []
|
88
|
+
parts = response.split(/^\r\n/, -1) # Psyonix ¯\_(ツ)_/¯
|
89
|
+
parts.pop
|
90
|
+
parts.each do |part|
|
91
|
+
result = []
|
92
|
+
lines = part.split "\r\n"
|
93
|
+
lines.each do |line|
|
94
|
+
result << formdecode(line)
|
95
|
+
end
|
96
|
+
results << result
|
97
|
+
end
|
98
|
+
results
|
99
|
+
end
|
100
|
+
|
101
|
+
# performs a POST request to the Rocket League API
|
102
|
+
# with the `DEFAULT_HEADERS` and `extra_headers`
|
103
|
+
# SessionID and CallProcKey headers are added unless SessionID is unset
|
104
|
+
# returns HTTPResponse
|
105
|
+
def request(path, exra_headers = {}, payload)
|
106
|
+
uri = URI.parse(@api_url)
|
107
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
108
|
+
http.use_ssl = (uri.scheme == "https")
|
109
|
+
|
110
|
+
if @SessionID
|
111
|
+
# Used for all requests except initial auth call
|
112
|
+
exra_headers.merge!({
|
113
|
+
"SessionID" => @SessionID,
|
114
|
+
"CallProcKey" => @call_proc_key
|
115
|
+
})
|
116
|
+
end
|
117
|
+
|
118
|
+
req = Net::HTTP::Post.new(path, DEFAULT_HEADERS.merge(exra_headers))
|
119
|
+
req.body = payload
|
120
|
+
http.request(req)
|
121
|
+
end
|
122
|
+
|
123
|
+
# initiates a new session by authenticating against the API
|
124
|
+
# returns boolean whether a SessionID was returned
|
125
|
+
def login player_id, player_name, auth_code
|
126
|
+
payload = formencode({
|
127
|
+
"PlayerName" => player_name,
|
128
|
+
"PlayerID" => player_id,
|
129
|
+
"Platform" => @platform,
|
130
|
+
"BuildID" => @build_id,
|
131
|
+
"AuthCode" => auth_code,
|
132
|
+
"IssuerID" => 0
|
133
|
+
})
|
134
|
+
response = request("/auth/", {"LoginSecretKey" => @login_secret_key }, payload)
|
135
|
+
!!(@SessionID = response["sessionid"])
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
data/lib/rocketleague/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
module
|
2
|
-
VERSION = "0.0.
|
1
|
+
module RocketLeague
|
2
|
+
VERSION = "0.0.3"
|
3
3
|
end
|
data/rocketleague.gemspec
CHANGED
@@ -5,11 +5,11 @@ require 'rocketleague/version'
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "rocketleague"
|
8
|
-
spec.version =
|
8
|
+
spec.version = RocketLeague::VERSION
|
9
9
|
spec.author = "rltracker"
|
10
10
|
|
11
|
-
spec.summary = "
|
12
|
-
spec.description = "
|
11
|
+
spec.summary = "Rocket League API"
|
12
|
+
spec.description = "Rocket League API"
|
13
13
|
spec.homepage = "https://github.com/rltracker/rocketleague"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rocketleague
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- rltracker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-04-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,7 +52,7 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '5.0'
|
55
|
-
description:
|
55
|
+
description: Rocket League API
|
56
56
|
email:
|
57
57
|
executables: []
|
58
58
|
extensions: []
|
@@ -65,6 +65,7 @@ files:
|
|
65
65
|
- README.md
|
66
66
|
- Rakefile
|
67
67
|
- lib/rocketleague.rb
|
68
|
+
- lib/rocketleague/api.rb
|
68
69
|
- lib/rocketleague/version.rb
|
69
70
|
- rocketleague.gemspec
|
70
71
|
homepage: https://github.com/rltracker/rocketleague
|
@@ -90,5 +91,5 @@ rubyforge_project:
|
|
90
91
|
rubygems_version: 2.5.1
|
91
92
|
signing_key:
|
92
93
|
specification_version: 4
|
93
|
-
summary:
|
94
|
+
summary: Rocket League API
|
94
95
|
test_files: []
|