sportradar-api 0.12.3 → 0.13.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 +4 -4
- data/.gitignore +1 -0
- data/Gemfile.lock +1 -1
- data/README.md +3 -3
- data/lib/sportradar/api/baseball/game.rb +6 -2
- data/lib/sportradar/api/baseball/mlb.rb +1 -1
- data/lib/sportradar/api/baseball/pitch.rb +5 -0
- data/lib/sportradar/api/basketball/game.rb +14 -2
- data/lib/sportradar/api/basketball/nba/player.rb +2 -2
- data/lib/sportradar/api/basketball/nba.rb +1 -1
- data/lib/sportradar/api/basketball/plays/base.rb +1 -1
- data/lib/sportradar/api/data.rb +2 -1
- data/lib/sportradar/api/error.rb +1 -1
- data/lib/sportradar/api/images.rb +1 -1
- data/lib/sportradar/api/request.rb +22 -1
- data/lib/sportradar/api/soccer/api.rb +66 -0
- data/lib/sportradar/api/soccer/event.rb +45 -0
- data/lib/sportradar/api/soccer/fact.rb +56 -53
- data/lib/sportradar/api/soccer/group.rb +70 -0
- data/lib/sportradar/api/soccer/lineup.rb +31 -0
- data/lib/sportradar/api/soccer/match.rb +224 -44
- data/lib/sportradar/api/soccer/player.rb +54 -67
- data/lib/sportradar/api/soccer/season.rb +58 -7
- data/lib/sportradar/api/soccer/standing.rb +43 -6
- data/lib/sportradar/api/soccer/team.rb +155 -53
- data/lib/sportradar/api/soccer/team_group.rb +57 -0
- data/lib/sportradar/api/soccer/tournament.rb +302 -14
- data/lib/sportradar/api/soccer/venue.rb +14 -13
- data/lib/sportradar/api/{soccer → soccer-old}/boxscore.rb +0 -0
- data/lib/sportradar/api/{soccer → soccer-old}/category.rb +0 -0
- data/lib/sportradar/api/soccer-old/fact.rb +61 -0
- data/lib/sportradar/api/{soccer → soccer-old}/hierarchy.rb +0 -0
- data/lib/sportradar/api/soccer-old/match.rb +55 -0
- data/lib/sportradar/api/soccer-old/player.rb +88 -0
- data/lib/sportradar/api/{soccer → soccer-old}/ranking.rb +0 -0
- data/lib/sportradar/api/{soccer → soccer-old}/schedule.rb +0 -0
- data/lib/sportradar/api/soccer-old/season.rb +14 -0
- data/lib/sportradar/api/soccer-old/standing.rb +13 -0
- data/lib/sportradar/api/{soccer → soccer-old}/statistic.rb +0 -0
- data/lib/sportradar/api/{soccer → soccer-old}/summary.rb +0 -0
- data/lib/sportradar/api/soccer-old/team.rb +63 -0
- data/lib/sportradar/api/soccer-old/tournament.rb +20 -0
- data/lib/sportradar/api/{soccer → soccer-old}/tournament_group.rb +0 -0
- data/lib/sportradar/api/soccer-old/venue.rb +21 -0
- data/lib/sportradar/api/soccer-old.rb +158 -0
- data/lib/sportradar/api/soccer.rb +18 -152
- data/lib/sportradar/api/version.rb +1 -1
- data/lib/sportradar/api.rb +17 -18
- data/soccer-old/boxscore_test.rb +14 -0
- data/soccer-old/hierarchy_test.rb +14 -0
- data/soccer-old/match_test.rb +23 -0
- data/soccer-old/player_test.rb +40 -0
- data/soccer-old/ranking_test.rb +16 -0
- data/soccer-old/schedule_test.rb +24 -0
- data/soccer-old/standing_test.rb +14 -0
- data/soccer-old/summary_test.rb +14 -0
- data/soccer-old/team_test.rb +21 -0
- data/soccer-old_test.rb +184 -0
- metadata +34 -10
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 587f83481b5cb0170503a6da85810f7f9635d094
|
|
4
|
+
data.tar.gz: 00e7a832708e4a37ae8fe8738e5d4522e384c4f9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c7fb85e9a377c6fd7f0e907306444ea2a7bda6275dbea4072fa50f56a38823dab471a3fc997cb08a51e018be89b467a3d5653432869a2226d459b098d43c739d
|
|
7
|
+
data.tar.gz: 265cd0efa942c1efde1ac51d714804b58f2a2a14adf98335113fa0a2fb00d9a173169fdc9722a9cee0a7284e0d4dd2d72c1a4c0286363baaf18c1cc4f7dcab73
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -26,9 +26,9 @@ Our goal is to incrementally integrate with them. **Contributions are welcome**
|
|
|
26
26
|
| NFL | 1 | [📚](http://developer.sportradar.us/page/NFL_Official) | ✅ | 👍 |
|
|
27
27
|
| MLB | 6 | [📚](https://developer.sportradar.com/files/indexBaseball.html#major-league-baseball-api-v6) | ✅ | 👍 |
|
|
28
28
|
| NHL | 3 | [📚](http://developer.sportradar.us/docs/NHL_API) | - | - |
|
|
29
|
-
| NBA | 3 | [📚](http://developer.sportradar.us/docs/NBA_API) | ✅ |
|
|
30
|
-
| NCAAMB | 3 | [📚](http://developer.sportradar.us/docs/NCAA_Mens_Basketball) | ✅ |
|
|
31
|
-
| NCAAFB |
|
|
29
|
+
| NBA | 3 | [📚](http://developer.sportradar.us/docs/NBA_API) | ✅ | 👍 |
|
|
30
|
+
| NCAAMB | 3 | [📚](http://developer.sportradar.us/docs/NCAA_Mens_Basketball) | ✅ | 👍 |
|
|
31
|
+
| NCAAFB | 3 | [📚](http://developer.sportradar.us/docs/NCAA_Football_API) | ✅ | 👍 |
|
|
32
32
|
| Golf | 2 | [📚](http://developer.sportradar.us/docs/Golf_API) | - | - |
|
|
33
33
|
| NASCAR | 3 | [📚](http://developer.sportradar.us/page/NASCAR_Official) | - | - |
|
|
34
34
|
| Odds | 1 | [📚](http://developer.sportradar.us/docs/Odds_API) | 🙋 | 👍 |
|
|
@@ -316,7 +316,7 @@ module Sportradar
|
|
|
316
316
|
if !count.empty?
|
|
317
317
|
inning_half = self.count['inning_half']
|
|
318
318
|
inning = self.count['inning']
|
|
319
|
-
"#{half_short} #{(inning || 1)
|
|
319
|
+
"#{half_short} #{ordinalize_inning(inning || 1)}" # TODO remove AS dependency
|
|
320
320
|
end
|
|
321
321
|
end
|
|
322
322
|
|
|
@@ -324,10 +324,14 @@ module Sportradar
|
|
|
324
324
|
if !count.empty?
|
|
325
325
|
inning_half = self.count['inning_half']
|
|
326
326
|
inning = self.count['inning']
|
|
327
|
-
"#{half_word} #{(inning || 1)
|
|
327
|
+
"#{half_word} #{ordinalize_inning(inning || 1)}"
|
|
328
328
|
end
|
|
329
329
|
end
|
|
330
330
|
|
|
331
|
+
def ordinalize_inning(i)
|
|
332
|
+
Sportradar.ordinalize_period(i)
|
|
333
|
+
end
|
|
334
|
+
|
|
331
335
|
def half_word
|
|
332
336
|
{
|
|
333
337
|
'B' => 'Bottom',
|
|
@@ -25,6 +25,7 @@ module Sportradar
|
|
|
25
25
|
end
|
|
26
26
|
@description = data['description'] if data['description']
|
|
27
27
|
@status = data['status'] if data['status']
|
|
28
|
+
@created_at = data['created_at'] if data['created_at']
|
|
28
29
|
|
|
29
30
|
parse_hit(data)
|
|
30
31
|
parse_runners(data['runners']) if data['runners']
|
|
@@ -36,6 +37,10 @@ module Sportradar
|
|
|
36
37
|
parse_errors(data['errors']) if data['errors']
|
|
37
38
|
end
|
|
38
39
|
|
|
40
|
+
def updated
|
|
41
|
+
@created_at
|
|
42
|
+
end
|
|
43
|
+
|
|
39
44
|
def pitches
|
|
40
45
|
@pitches_hash.values
|
|
41
46
|
end
|
|
@@ -204,18 +204,30 @@ module Sportradar
|
|
|
204
204
|
'Final'
|
|
205
205
|
elsif postponed?
|
|
206
206
|
'Postponed'
|
|
207
|
-
|
|
208
|
-
|
|
207
|
+
elsif halftime?
|
|
208
|
+
'Halftime'
|
|
209
209
|
else
|
|
210
210
|
clock_display
|
|
211
211
|
end
|
|
212
212
|
end
|
|
213
213
|
|
|
214
|
+
def halftime?
|
|
215
|
+
clock == '0:00' && quarter == 2
|
|
216
|
+
end
|
|
214
217
|
def clock_display
|
|
215
218
|
if clock && period
|
|
216
219
|
"#{clock} #{period_display}"
|
|
217
220
|
end
|
|
218
221
|
end
|
|
222
|
+
def period_display_long
|
|
223
|
+
if period > 5
|
|
224
|
+
"Overtime #{period - 4}"
|
|
225
|
+
elsif period == 5
|
|
226
|
+
'Overtime'
|
|
227
|
+
else
|
|
228
|
+
"#{Sportradar.ordinalize_period(period)} Quarter"
|
|
229
|
+
end
|
|
230
|
+
end
|
|
219
231
|
def period_display
|
|
220
232
|
if period > 5
|
|
221
233
|
"#{period - 4}OT"
|
|
@@ -85,9 +85,9 @@ module Sportradar
|
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
def age
|
|
88
|
-
if birth_date
|
|
88
|
+
if birth_date
|
|
89
89
|
now = Time.now.utc.to_date
|
|
90
|
-
dob = birth_date
|
|
90
|
+
dob = Date.parse(birth_date)
|
|
91
91
|
now.year - dob.year - ((now.month > dob.month || (now.month == dob.month && now.day >= dob.day)) ? 0 : 1)
|
|
92
92
|
end
|
|
93
93
|
end
|
|
@@ -80,7 +80,7 @@ module Sportradar
|
|
|
80
80
|
def update(data, **opts)
|
|
81
81
|
@event_type = data['event_type'] # "lineupchange",
|
|
82
82
|
@clock = data['clock'] # "12:00",
|
|
83
|
-
@updated = data['updated'] # "2016-10-26T00:07:52+00:00",
|
|
83
|
+
@updated = Time.parse(data['updated']) if data['updated'] # "2016-10-26T00:07:52+00:00",
|
|
84
84
|
@description = data['description'] # "Cavaliers lineup change (Richard Jefferson, Kyrie Irving, Mike Dunleavy, Channing Frye, LeBron James)",
|
|
85
85
|
@attribution = data['attribution'] # {"name"=>"Cavaliers", "market"=>"Cleveland", "id"=>"583ec773-fb46-11e1-82cb-f4ce4684ea4c", "team_basket"=>"left"},
|
|
86
86
|
@team_id = data.dig('attribution', "id")
|
data/lib/sportradar/api/data.rb
CHANGED
data/lib/sportradar/api/error.rb
CHANGED
|
@@ -11,7 +11,7 @@ module Sportradar
|
|
|
11
11
|
@nfl_premium = nfl_premium
|
|
12
12
|
@usat_premium = usat_premium
|
|
13
13
|
@event_id = event_id
|
|
14
|
-
@date = date.strftime("%Y/%m/%d") if date
|
|
14
|
+
@date = date.strftime("%Y/%m/%d") if date
|
|
15
15
|
raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? access_level
|
|
16
16
|
@access_level = access_level
|
|
17
17
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
module Sportradar
|
|
2
2
|
module Api
|
|
3
3
|
class Request
|
|
4
|
+
attr_reader :qps_allotted, :qps_current, :quota_allotted, :quota_current
|
|
4
5
|
|
|
5
6
|
include HTTParty
|
|
6
7
|
|
|
@@ -17,11 +18,28 @@ module Sportradar
|
|
|
17
18
|
puts request_url(url)
|
|
18
19
|
puts
|
|
19
20
|
puts data.inspect
|
|
20
|
-
raise
|
|
21
|
+
raise data
|
|
21
22
|
end
|
|
23
|
+
parse_usage(data.headers)
|
|
22
24
|
data
|
|
23
25
|
end
|
|
24
26
|
|
|
27
|
+
def usage
|
|
28
|
+
{
|
|
29
|
+
qps_allotted: @qps_allotted,
|
|
30
|
+
qps_current: @qps_current,
|
|
31
|
+
quota_allotted: @quota_allotted,
|
|
32
|
+
quota_current: @quota_current,
|
|
33
|
+
}
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def parse_usage(headers)
|
|
37
|
+
@qps_allotted = (headers['x-plan-qps-allotted'] || headers['x-packagekey-qps-allotted']).to_i
|
|
38
|
+
@qps_current = (headers['x-plan-qps-current'] || headers['x-packagekey-qps-current']).to_i
|
|
39
|
+
@quota_allotted = (headers['x-plan-quota-allotted'] || headers['x-packagekey-quota-allotted']).to_i
|
|
40
|
+
@quota_current = (headers['x-plan-quota-current'] || headers['x-packagekey-quota-current']).to_i
|
|
41
|
+
end
|
|
42
|
+
|
|
25
43
|
def get(path, options={})
|
|
26
44
|
url, headers, options, timeout = base_setup(path, options)
|
|
27
45
|
begin
|
|
@@ -62,6 +80,9 @@ module Sportradar
|
|
|
62
80
|
url += path
|
|
63
81
|
end
|
|
64
82
|
|
|
83
|
+
def default_date
|
|
84
|
+
Date.today
|
|
85
|
+
end
|
|
65
86
|
|
|
66
87
|
def date_path(date)
|
|
67
88
|
"#{date.year}/#{date.month}/#{date.day}"
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
module Soccer
|
|
4
|
+
class Api < Request
|
|
5
|
+
attr_accessor :league_group, :access_level, :language_code, :error
|
|
6
|
+
|
|
7
|
+
def initialize(access_level: default_access_level, league_group:, language_code: 'en')
|
|
8
|
+
@league_group = league_group
|
|
9
|
+
@language_code = language_code
|
|
10
|
+
@access_level = access_level
|
|
11
|
+
raise Sportradar::Api::Error::InvalidLeague unless allowed_leagues.include? @league_group
|
|
12
|
+
raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? @access_level
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def default_year
|
|
16
|
+
(Date.today - 210).year # TODO
|
|
17
|
+
end
|
|
18
|
+
def default_season
|
|
19
|
+
'reg'
|
|
20
|
+
end
|
|
21
|
+
def default_access_level
|
|
22
|
+
if (ENV['SPORTRADAR_ENV'] || ENV['RACK_ENV'] || ENV['RAILS_ENV']) == 'production'
|
|
23
|
+
'x'
|
|
24
|
+
else
|
|
25
|
+
'xt'
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def content_format
|
|
30
|
+
'json'
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def request_url(path)
|
|
36
|
+
"/soccer-#{access_level}#{version}/#{league_group}/#{language_code}/#{path}"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def api_key
|
|
40
|
+
if !['xt', 'sim'].include?(access_level) || (access_level == 'sim' && default_access_level == 'x')
|
|
41
|
+
Sportradar::Api.api_key_params("soccer-#{@league_group}", 'production')
|
|
42
|
+
else
|
|
43
|
+
Sportradar::Api.api_key_params("soccer-#{@league_group}")
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def version
|
|
48
|
+
Sportradar::Api.version('soccer')
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def allowed_access_levels
|
|
52
|
+
%w[x xt sim]
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def allowed_leagues
|
|
56
|
+
["eu", "am", "as", "intl", "other", "global"]
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# def allowed_seasons
|
|
60
|
+
# ["pre", "reg", "pst"]
|
|
61
|
+
# end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
module Soccer
|
|
4
|
+
class Event < Data
|
|
5
|
+
attr_reader :id, :type, :time, :period, :period_type, :period_name, :match_time, :team, :x, :y, :outcome, :home_score, :away_score, :goal_scorer, :stoppage_time, :player_out, :player_in, :player
|
|
6
|
+
|
|
7
|
+
def initialize(data, **opts)
|
|
8
|
+
@response = data
|
|
9
|
+
@id = data["id"]
|
|
10
|
+
|
|
11
|
+
update(data, **opts)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def update(data, **opts)
|
|
15
|
+
@type = data['type']
|
|
16
|
+
@time = Time.parse(data['time']) if data['time']
|
|
17
|
+
@period = data['period']
|
|
18
|
+
@period_type = data['period_type']
|
|
19
|
+
@period_name = data['period_name']
|
|
20
|
+
@match_time = data['match_time']
|
|
21
|
+
@team = data['team'] # home/away
|
|
22
|
+
@x = data['x']
|
|
23
|
+
@y = data['y']
|
|
24
|
+
@outcome = data['outcome']
|
|
25
|
+
@home_score = data['home_score']
|
|
26
|
+
@away_score = data['away_score']
|
|
27
|
+
@goal_scorer = OpenStruct.new(data['goal_scorer']) if data['goal_scorer']
|
|
28
|
+
@stoppage_time = data['stoppage_time'].to_i if data['stoppage_time']
|
|
29
|
+
@player_out = OpenStruct.new(data['player_out']) if data['player_out']
|
|
30
|
+
@player_in = OpenStruct.new(data['player_in']) if data['player_in']
|
|
31
|
+
@player = OpenStruct.new(data['player']) if data['player'] # red/yellow cards
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def updated_at
|
|
35
|
+
@time
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def minute
|
|
39
|
+
@match_time
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -1,61 +1,64 @@
|
|
|
1
1
|
module Sportradar
|
|
2
2
|
module Api
|
|
3
|
-
|
|
3
|
+
module Soccer
|
|
4
|
+
class Fact < Data
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
attr_reader :id, :type, :time, :updated_time, :scratch, :reference_id, :clock, :team_id, :description, :period, :x, :y, :player_id, :card, :injury_time, :home_score, :away_score, :player_out_id, :player_in_id, :penalty, :owngoal, :header, :assist1_id, :winner_id, :draw, :response
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
8
|
+
def initialize(data)
|
|
9
|
+
@response = data
|
|
10
|
+
@id = data["id"]
|
|
11
|
+
@type = data["type"]
|
|
12
|
+
@time = data["time"]
|
|
13
|
+
@updated_time = data["updated_time"]
|
|
14
|
+
@scratch = data["scratch"]
|
|
15
|
+
@reference_id = data["reference_id"]
|
|
16
|
+
@clock = data["clock"]
|
|
17
|
+
@team_id = data["team_id"]
|
|
18
|
+
@description = data["description"]
|
|
19
|
+
@period = data["period"]
|
|
20
|
+
@x = data["x"]
|
|
21
|
+
@y = data["y"]
|
|
22
|
+
@player_id = data["player_id"]
|
|
23
|
+
@card = data["card"]
|
|
24
|
+
@injury_time = data["injury_time"]
|
|
25
|
+
@home_score = data["home_score"]
|
|
26
|
+
@away_score = data["away_score"]
|
|
27
|
+
@player_out_id = data["player_out_id"]
|
|
28
|
+
@player_in_id = data["player_in_id"]
|
|
29
|
+
@penalty = data["penalty"]
|
|
30
|
+
@owngoal = data["owngoal"]
|
|
31
|
+
@header = data["header"]
|
|
32
|
+
@assist1_id = data["assist1_id"]
|
|
33
|
+
@winner_id = data["winner_id"]
|
|
34
|
+
@draw = data["draw"]
|
|
35
|
+
end
|
|
35
36
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
37
|
+
## Fact Types
|
|
38
|
+
# card
|
|
39
|
+
# corner_kick
|
|
40
|
+
# free_kick
|
|
41
|
+
# game_resumed
|
|
42
|
+
# goal
|
|
43
|
+
# goal_kick
|
|
44
|
+
# injury
|
|
45
|
+
# injury_return
|
|
46
|
+
# injury_time
|
|
47
|
+
# keeper_save
|
|
48
|
+
# match_ended
|
|
49
|
+
# match_started
|
|
50
|
+
# offside
|
|
51
|
+
# penalty_awarded
|
|
52
|
+
# penalty_missed
|
|
53
|
+
# period_over
|
|
54
|
+
# period_started
|
|
55
|
+
# shot_blocked
|
|
56
|
+
# shot_off_target
|
|
57
|
+
# shot_on_target
|
|
58
|
+
# substitution
|
|
59
|
+
# throwin
|
|
60
|
+
end
|
|
59
61
|
end
|
|
62
|
+
|
|
60
63
|
end
|
|
61
64
|
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
module Soccer
|
|
4
|
+
class Group < Data
|
|
5
|
+
attr_reader :league_group
|
|
6
|
+
|
|
7
|
+
def initialize(data = {}, league_group: nil, **opts)
|
|
8
|
+
@id = data['id']
|
|
9
|
+
|
|
10
|
+
@league_group = league_group || data['league_group']
|
|
11
|
+
|
|
12
|
+
@tournaments_hash = {}
|
|
13
|
+
# @daily_schedule = {}
|
|
14
|
+
|
|
15
|
+
update(data, **opts)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def update(data, **opts)
|
|
19
|
+
create_data(@tournaments_hash, data['tournaments'], klass: Tournament, api: api, league_group: @league_group) if data['tournaments']
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def tournaments
|
|
23
|
+
@tournaments_hash.values
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def tournament(id)
|
|
27
|
+
@tournaments_hash[id]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def api
|
|
31
|
+
@api ||= Sportradar::Api::Soccer::Api.new(league_group: @league_group)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def get_tournaments
|
|
35
|
+
data = api.get_data(path_tournaments).to_h
|
|
36
|
+
ingest_tournaments(data)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def ingest_tournaments(data)
|
|
40
|
+
update(data, source: :tournaments)
|
|
41
|
+
data
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def queue_tournaments
|
|
45
|
+
url, headers, options, timeout = api.get_request_info(path_tournaments)
|
|
46
|
+
{url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_tournaments)}
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def path_tournaments
|
|
50
|
+
'tournaments'
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def self.europe
|
|
54
|
+
self.new(league_group: 'eu')
|
|
55
|
+
end
|
|
56
|
+
def self.americas
|
|
57
|
+
self.new(league_group: 'am')
|
|
58
|
+
end
|
|
59
|
+
def self.north_america
|
|
60
|
+
self.new(league_group: 'na')
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def self.international
|
|
64
|
+
self.new(league_group: 'intl')
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
module Soccer
|
|
4
|
+
class Lineup < Data
|
|
5
|
+
attr_reader :id, :team, :manager, :jersey, :starting_lineup, :substitutes
|
|
6
|
+
|
|
7
|
+
def initialize(data, **opts)
|
|
8
|
+
@response = data
|
|
9
|
+
@id = data["team"]
|
|
10
|
+
|
|
11
|
+
@starting_hash = {}
|
|
12
|
+
@subs_hash = {}
|
|
13
|
+
|
|
14
|
+
update(data, **opts)
|
|
15
|
+
end
|
|
16
|
+
def update(data, **opts)
|
|
17
|
+
@team = data['team'] if data['team']
|
|
18
|
+
@manager = OpenStruct.new(data['manager']) if data['manager']
|
|
19
|
+
@jersey = OpenStruct.new(data['jersey']) if data['jersey']
|
|
20
|
+
# @starting_lineup = data['starting_lineup'] if data['starting_lineup']
|
|
21
|
+
# @substitutes = data['substitutes'] if data['substitutes']
|
|
22
|
+
|
|
23
|
+
create_data(@starting_hash, data['starting_lineup'], klass: Player, api: opts[:api], lineup: self) if data['starting_lineup']
|
|
24
|
+
create_data(@subs_hash, data['substitutes'], klass: Player, api: opts[:api], lineup: self) if data['substitutes']
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|