sportradar-api 0.9.24 → 0.9.25
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.env.sample +1 -1
- data/Gemfile.lock +2 -2
- data/README.md +1 -1
- data/lib/sportradar/api.rb +23 -1
- data/lib/sportradar/api/basketball.rb +21 -0
- data/lib/sportradar/api/basketball/bio.rb +33 -0
- data/lib/sportradar/api/basketball/broadcast.rb +15 -0
- data/lib/sportradar/api/basketball/nba.rb +123 -0
- data/lib/sportradar/api/basketball/nba/conference.rb +27 -0
- data/lib/sportradar/api/basketball/nba/division.rb +29 -0
- data/lib/sportradar/api/basketball/nba/game.rb +263 -0
- data/lib/sportradar/api/basketball/nba/hierarchy.rb +46 -0
- data/lib/sportradar/api/basketball/nba/overview.rb +64 -0
- data/lib/sportradar/api/basketball/nba/player.rb +146 -0
- data/lib/sportradar/api/basketball/nba/quarter.rb +51 -0
- data/lib/sportradar/api/basketball/nba/record.rb +34 -0
- data/lib/sportradar/api/basketball/nba/schedule.rb +32 -0
- data/lib/sportradar/api/basketball/nba/scoring.rb +89 -0
- data/lib/sportradar/api/basketball/nba/season.rb +42 -0
- data/lib/sportradar/api/basketball/nba/team.rb +166 -0
- data/lib/sportradar/api/basketball/overview.rb +74 -0
- data/lib/sportradar/api/basketball/play.rb +65 -0
- data/lib/sportradar/api/basketball/plays.rb +38 -0
- data/lib/sportradar/api/basketball/plays/assist.rb +11 -0
- data/lib/sportradar/api/basketball/plays/base.rb +88 -0
- data/lib/sportradar/api/basketball/plays/block.rb +11 -0
- data/lib/sportradar/api/basketball/plays/clear_path_foul.rb +9 -0
- data/lib/sportradar/api/basketball/plays/defensive_three_seconds.rb +8 -0
- data/lib/sportradar/api/basketball/plays/delay.rb +9 -0
- data/lib/sportradar/api/basketball/plays/ejection.rb +9 -0
- data/lib/sportradar/api/basketball/plays/end_period.rb +15 -0
- data/lib/sportradar/api/basketball/plays/flagrant_one.rb +9 -0
- data/lib/sportradar/api/basketball/plays/flagrant_two.rb +9 -0
- data/lib/sportradar/api/basketball/plays/foul.rb +14 -0
- data/lib/sportradar/api/basketball/plays/free_throw_made.rb +20 -0
- data/lib/sportradar/api/basketball/plays/free_throw_miss.rb +20 -0
- data/lib/sportradar/api/basketball/plays/jumpball.rb +9 -0
- data/lib/sportradar/api/basketball/plays/kickball.rb +9 -0
- data/lib/sportradar/api/basketball/plays/lineup_change.rb +9 -0
- data/lib/sportradar/api/basketball/plays/offensive_foul.rb +9 -0
- data/lib/sportradar/api/basketball/plays/official_timeout.rb +9 -0
- data/lib/sportradar/api/basketball/plays/open_inbound.rb +9 -0
- data/lib/sportradar/api/basketball/plays/open_tip.rb +9 -0
- data/lib/sportradar/api/basketball/plays/personal_foul.rb +9 -0
- data/lib/sportradar/api/basketball/plays/rebound.rb +15 -0
- data/lib/sportradar/api/basketball/plays/review.rb +8 -0
- data/lib/sportradar/api/basketball/plays/shooting_foul.rb +9 -0
- data/lib/sportradar/api/basketball/plays/shot_made.rb +21 -0
- data/lib/sportradar/api/basketball/plays/shot_miss.rb +21 -0
- data/lib/sportradar/api/basketball/plays/steal.rb +11 -0
- data/lib/sportradar/api/basketball/plays/team_timeout.rb +9 -0
- data/lib/sportradar/api/basketball/plays/technical_foul.rb +11 -0
- data/lib/sportradar/api/basketball/plays/three_point_made.rb +11 -0
- data/lib/sportradar/api/basketball/plays/three_point_miss.rb +8 -0
- data/lib/sportradar/api/basketball/plays/timeout.rb +15 -0
- data/lib/sportradar/api/basketball/plays/turnover.rb +16 -0
- data/lib/sportradar/api/basketball/plays/tv_timeout.rb +9 -0
- data/lib/sportradar/api/basketball/plays/two_point_made.rb +11 -0
- data/lib/sportradar/api/basketball/plays/two_point_miss.rb +8 -0
- data/lib/sportradar/api/basketball/profile.rb +48 -0
- data/lib/sportradar/api/basketball/season.rb +20 -0
- data/lib/sportradar/api/basketball/venue.rb +53 -0
- data/lib/sportradar/api/data.rb +42 -0
- data/lib/sportradar/api/mma.rb +195 -0
- data/lib/sportradar/api/mma/event.rb +111 -0
- data/lib/sportradar/api/mma/fight.rb +107 -0
- data/lib/sportradar/api/mma/fighter.rb +95 -0
- data/lib/sportradar/api/mma/judge.rb +70 -0
- data/lib/sportradar/api/mma/league.rb +63 -0
- data/lib/sportradar/api/mma/referee.rb +70 -0
- data/lib/sportradar/api/mma/result.rb +68 -0
- data/lib/sportradar/api/mma/roster.rb +72 -0
- data/lib/sportradar/api/mma/schedule.rb +53 -0
- data/lib/sportradar/api/mma/score.rb +83 -0
- data/lib/sportradar/api/mma/venue.rb +72 -0
- data/lib/sportradar/api/ncaafb.rb +185 -0
- data/lib/sportradar/api/ncaafb/drive.rb +89 -0
- data/lib/sportradar/api/ncaafb/game.rb +161 -0
- data/lib/sportradar/api/ncaafb/play.rb +39 -0
- data/lib/sportradar/api/ncaafb/player.rb +61 -0
- data/lib/sportradar/api/ncaafb/quarter.rb +37 -0
- data/lib/sportradar/api/ncaafb/season.rb +71 -0
- data/lib/sportradar/api/ncaafb/team.rb +69 -0
- data/lib/sportradar/api/ncaafb/week.rb +33 -0
- data/lib/sportradar/api/nfl.rb +6 -0
- data/lib/sportradar/api/nfl/conference.rb +2 -1
- data/lib/sportradar/api/request.rb +1 -0
- data/lib/sportradar/api/version.rb +1 -1
- metadata +81 -2
@@ -0,0 +1,46 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
module Basketball
|
4
|
+
class Nba
|
5
|
+
class Hierarchy < Data
|
6
|
+
attr_accessor :response, :id, :name, :alias
|
7
|
+
def all_attributes
|
8
|
+
[:name, :alias, :conferences, :divisions, :teams]
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(data, **opts)
|
12
|
+
@response = data
|
13
|
+
@api = opts[:api]
|
14
|
+
|
15
|
+
@id = data["id"]
|
16
|
+
@name = data["name"]
|
17
|
+
@alias = data["alias"]
|
18
|
+
@conferences_hash = create_data({}, data['conference'], klass: Conference, hierarchy: self, api: @api)
|
19
|
+
end
|
20
|
+
def conferences
|
21
|
+
@conferences_hash.values
|
22
|
+
end
|
23
|
+
def divisions
|
24
|
+
conferences.flat_map(&:divisions)
|
25
|
+
end
|
26
|
+
def teams
|
27
|
+
divisions.flat_map(&:teams)
|
28
|
+
end
|
29
|
+
|
30
|
+
def api
|
31
|
+
@api || Sportradar::Api::Basketball::Nba.new
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
__END__
|
41
|
+
|
42
|
+
st = sr.standings;
|
43
|
+
sr = Sportradar::Api::Basketball::Nba.new
|
44
|
+
lh = sr.league_hierarchy;
|
45
|
+
t = lh.teams.first;
|
46
|
+
t.venue.id
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
module Basketball
|
4
|
+
class Nba
|
5
|
+
class Overview < Basketball::Overview
|
6
|
+
attr_accessor :response, :api, :id, :game, :home, :away
|
7
|
+
|
8
|
+
# def initialize(game: )
|
9
|
+
# @game = game
|
10
|
+
# end
|
11
|
+
|
12
|
+
# def points(team_id)
|
13
|
+
# team_id.is_a?(Symbol) ? @score[@team_ids[team_id]] : @score[team_id]
|
14
|
+
# end
|
15
|
+
# def set_score(score)
|
16
|
+
# @score.merge!(score)
|
17
|
+
# end
|
18
|
+
|
19
|
+
# def update(data, **opts)
|
20
|
+
|
21
|
+
# @score = { }
|
22
|
+
|
23
|
+
# @status = data['status'] if data['status']
|
24
|
+
# @coverage = data['coverage'] if data['coverage']
|
25
|
+
# @home_team = data['home_team'] if data['home_team'] # GUID
|
26
|
+
# @away_team = data['away_team'] if data['away_team'] # GUID
|
27
|
+
# @team_ids = { home: @home_team, away: @away_team}
|
28
|
+
# @scheduled = Time.parse(data["scheduled"]) if data["scheduled"]
|
29
|
+
# @venue = data['venue'] if data['venue']
|
30
|
+
# # @home = Team.new(data['home'], api: api, game: self) if data['home']
|
31
|
+
# # @away = Team.new(data['away'], api: api, game: self) if data['away']
|
32
|
+
# @broadcast = data['broadcast']
|
33
|
+
# @duration = data['duration'] if data['duration']
|
34
|
+
# @clock = data['clock'] if data['clock']
|
35
|
+
# @attendance = data['attendance'] if data['attendance']
|
36
|
+
# @lead_changes = data['lead_changes'] if data['lead_changes']
|
37
|
+
# @times_tied = data['times_tied'] if data['times_tied']
|
38
|
+
# @scoring = data['scoring'] if data['scoring']
|
39
|
+
|
40
|
+
# end
|
41
|
+
|
42
|
+
# def path_base
|
43
|
+
# "games/#{ id }"
|
44
|
+
# end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
__END__
|
53
|
+
|
54
|
+
ss = sr.schedule;
|
55
|
+
sr = Sportradar::Api::Basketball::Nba.new
|
56
|
+
sd = sr.daily_schedule;
|
57
|
+
g = sd.games.last;
|
58
|
+
box = g.get_box;
|
59
|
+
pbp = g.get_pbp;
|
60
|
+
g.quarters.size
|
61
|
+
g.plays.size
|
62
|
+
|
63
|
+
Sportradar::Api::Basketball::Nba::Team.all.size # => 32 - includes all star teams
|
64
|
+
|
@@ -0,0 +1,146 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
module Basketball
|
4
|
+
class Nba
|
5
|
+
class Player < Data
|
6
|
+
attr_accessor :response, :id, :number, :full_name, :position, :birth_date, :birth_place, :college
|
7
|
+
# @all_hash = {}
|
8
|
+
# def self.new(data, **opts)
|
9
|
+
# existing = @all_hash[data['id']]
|
10
|
+
# if existing
|
11
|
+
# existing.update(data, **opts)
|
12
|
+
# existing
|
13
|
+
# else
|
14
|
+
# @all_hash[data['id']] = super
|
15
|
+
# end
|
16
|
+
# end
|
17
|
+
# def self.all
|
18
|
+
# @all_hash.values
|
19
|
+
# end
|
20
|
+
|
21
|
+
|
22
|
+
def initialize(data, **opts)
|
23
|
+
@response = data
|
24
|
+
@api = opts[:api]
|
25
|
+
@team = opts[:team]
|
26
|
+
|
27
|
+
@id = data["id"]
|
28
|
+
|
29
|
+
update(data, **opts)
|
30
|
+
end
|
31
|
+
|
32
|
+
def bio
|
33
|
+
Bio.new(self)
|
34
|
+
end
|
35
|
+
|
36
|
+
def name # to match api for NFL::Player
|
37
|
+
full_name
|
38
|
+
end
|
39
|
+
|
40
|
+
def birth_date # to match api for NFL::Player
|
41
|
+
@birthdate
|
42
|
+
end
|
43
|
+
|
44
|
+
def update(data, **opts)
|
45
|
+
@status = data['status'] if data['status'] # "ACT",
|
46
|
+
@full_name = data['full_name'] if data['full_name'] # "Festus Ezeli",
|
47
|
+
@first_name = data['first_name'] if data['first_name'] # "Festus",
|
48
|
+
@last_name = data['last_name'] if data['last_name'] # "Ezeli",
|
49
|
+
@abbr_name = data['abbr_name'] if data['abbr_name'] # "F.Ezeli",
|
50
|
+
@height = data['height'] if data['height'] # "83",
|
51
|
+
@weight = data['weight'] if data['weight'] # "265",
|
52
|
+
@position = data['position'] if data['position'] # "C",
|
53
|
+
@primary_position = data['primary_position'] if data['primary_position'] # "C",
|
54
|
+
@jersey_number = data['jersey_number'] if data['jersey_number'] # "31",
|
55
|
+
@experience = data['experience'] if data['experience'] # "3",
|
56
|
+
@college = data['college'] if data['college'] # "Vanderbilt",
|
57
|
+
@birth_place = data['birth_place'] if data['birth_place'] # "Benin City,, NGA",
|
58
|
+
@birthdate = data['birthdate'] if data['birthdate'] # "1989-10-21",
|
59
|
+
@updated = data['updated'] if data['updated'] # "2016-07-08T12:11:59+00:00",
|
60
|
+
update_injuries(data)
|
61
|
+
update_draft(data)
|
62
|
+
|
63
|
+
@team.update_player_stats(self, data['statistics'], opts[:game]) if data['statistics']
|
64
|
+
@team.update_player_stats(self, data.dig('overall', 'average')) if data.dig('overall', 'average')
|
65
|
+
|
66
|
+
self
|
67
|
+
end
|
68
|
+
|
69
|
+
def age
|
70
|
+
if birth_date.present?
|
71
|
+
now = Time.now.utc.to_date
|
72
|
+
dob = birth_date.to_date
|
73
|
+
now.year - dob.year - ((now.month > dob.month || (now.month == dob.month && now.day >= dob.day)) ? 0 : 1)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# def stats
|
78
|
+
# {
|
79
|
+
# "played"=>"true",
|
80
|
+
# "active"=>"true",
|
81
|
+
# "starter"=>"true",
|
82
|
+
# "statistics"=>
|
83
|
+
# {"minutes"=>"33:23",
|
84
|
+
# "field_goals_made"=>"5",
|
85
|
+
# "field_goals_att"=>"11",
|
86
|
+
# "field_goals_pct"=>"45.5",
|
87
|
+
# "three_points_made"=>"1",
|
88
|
+
# "three_points_att"=>"5",
|
89
|
+
# "three_points_pct"=>"20.0",
|
90
|
+
# "two_points_made"=>"4",
|
91
|
+
# "two_points_att"=>"6",
|
92
|
+
# "two_points_pct"=>"66.667",
|
93
|
+
# "blocked_att"=>"0",
|
94
|
+
# "free_throws_made"=>"2",
|
95
|
+
# "free_throws_att"=>"2",
|
96
|
+
# "free_throws_pct"=>"100.0",
|
97
|
+
# "offensive_rebounds"=>"1",
|
98
|
+
# "defensive_rebounds"=>"3",
|
99
|
+
# "rebounds"=>"4",
|
100
|
+
# "assists"=>"6",
|
101
|
+
# "turnovers"=>"2",
|
102
|
+
# "steals"=>"0",
|
103
|
+
# "blocks"=>"0",
|
104
|
+
# "assists_turnover_ratio"=>"3.0",
|
105
|
+
# "personal_fouls"=>"1",
|
106
|
+
# "tech_fouls"=>"0",
|
107
|
+
# "flagrant_fouls"=>"0",
|
108
|
+
# "pls_min"=>"4",
|
109
|
+
# "points"=>"13"}}
|
110
|
+
# end
|
111
|
+
def update_draft(data)
|
112
|
+
@draft = data['draft'] # {"team_id"=>"583ec825-fb46-11e1-82cb-f4ce4684ea4c", "year"=>"2012", "round"=>"1", "pick"=>"30"},
|
113
|
+
end
|
114
|
+
def update_injuries(data)
|
115
|
+
@injuries = data['injuries'] #
|
116
|
+
# {"injury"=>
|
117
|
+
# {"id"=>"06423591-3fc1-4d2b-8c60-a3f30d735345",
|
118
|
+
# "comment"=>"Ezeli suffered a setback in his recovery from a procedure on his knee and there is no timetable for his return, according to Jason Quick of csnnw.com.",
|
119
|
+
# "desc"=>"Knee",
|
120
|
+
# "status"=>"Out",
|
121
|
+
# "start_date"=>"2016-10-25",
|
122
|
+
# "update_date"=>"2016-11-09"}}}
|
123
|
+
end
|
124
|
+
|
125
|
+
def api
|
126
|
+
@api || Sportradar::Api::Basketball::Nba.new
|
127
|
+
end
|
128
|
+
|
129
|
+
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
__END__
|
137
|
+
|
138
|
+
ss = sr.schedule;
|
139
|
+
sr = Sportradar::Api::Basketball::Nba.new
|
140
|
+
sd = sr.daily_schedule;
|
141
|
+
g = sd.games.last;
|
142
|
+
g2 = sd.games.first;
|
143
|
+
t = g.home;
|
144
|
+
t.get_roster;
|
145
|
+
t.players.first
|
146
|
+
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
module Basketball
|
4
|
+
class Nba
|
5
|
+
class Quarter < Data
|
6
|
+
attr_accessor :response, :id, :game, :number, :sequence, :home_points, :away_points, :drives
|
7
|
+
# @all_hash = {}
|
8
|
+
# def self.new(data, **opts)
|
9
|
+
# existing = @all_hash[data['id']]
|
10
|
+
# if existing
|
11
|
+
# existing.update(data, **opts)
|
12
|
+
# existing
|
13
|
+
# else
|
14
|
+
# @all_hash[data['id']] = super
|
15
|
+
# end
|
16
|
+
# end
|
17
|
+
# def self.all
|
18
|
+
# @all_hash.values
|
19
|
+
# end
|
20
|
+
|
21
|
+
def initialize(data, **opts)
|
22
|
+
@response = data
|
23
|
+
@api = opts[:api]
|
24
|
+
# @game = opts[:game]
|
25
|
+
|
26
|
+
@id = response["id"]
|
27
|
+
@number = response['number']
|
28
|
+
@sequence = response['sequence']
|
29
|
+
|
30
|
+
@plays_hash = {}
|
31
|
+
|
32
|
+
update(data)
|
33
|
+
end
|
34
|
+
def update(data, **opts)
|
35
|
+
create_data(@plays_hash, data.dig('events', 'event'), klass: Play, api: @api, quarter: self)
|
36
|
+
# rescue => e
|
37
|
+
# binding.pry
|
38
|
+
end
|
39
|
+
|
40
|
+
def plays
|
41
|
+
@plays_hash.values
|
42
|
+
end
|
43
|
+
alias :events :plays
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
module Basketball
|
4
|
+
class Nba
|
5
|
+
class Record < Data
|
6
|
+
attr_accessor :id, :team, :wins, :losses, :win_pct, :points_for, :points_against, :point_diff, :games_behind, :streak
|
7
|
+
|
8
|
+
def initialize(data, type: 'overall', **opts)
|
9
|
+
@team = opts[:team]
|
10
|
+
@type = type
|
11
|
+
|
12
|
+
update(data, **opts)
|
13
|
+
end
|
14
|
+
|
15
|
+
def profile
|
16
|
+
Profile.new(self)
|
17
|
+
end
|
18
|
+
|
19
|
+
def update(data, **opts)
|
20
|
+
@wins = data['wins'].to_i
|
21
|
+
@losses = data['losses'].to_i
|
22
|
+
@win_pct = data['win_pct'].to_f
|
23
|
+
@points_for = data['points_for']
|
24
|
+
@points_against = data['points_against']
|
25
|
+
@point_diff = data['point_diff']
|
26
|
+
@games_behind = data['games_behind']
|
27
|
+
@streak = data['streak']
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
module Basketball
|
4
|
+
class Nba
|
5
|
+
class Schedule < Data
|
6
|
+
attr_accessor :response, :matches
|
7
|
+
|
8
|
+
def initialize(data, **opts)
|
9
|
+
@response = data
|
10
|
+
@api = opts[:api]
|
11
|
+
@id = response['id']
|
12
|
+
@name = response['name']
|
13
|
+
@alias = response['alias']
|
14
|
+
@date = response.dig('daily_schedule', 'date')
|
15
|
+
|
16
|
+
@games_hash = {}
|
17
|
+
update_games(data.dig('daily_schedule', 'games', 'game'))
|
18
|
+
end
|
19
|
+
|
20
|
+
def games
|
21
|
+
@games_hash.values
|
22
|
+
end
|
23
|
+
|
24
|
+
def update_games(data)
|
25
|
+
create_data(@games_hash, data, klass: Game, api: @api, season: self)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
module Basketball
|
4
|
+
class Nba
|
5
|
+
class Scoring < Data
|
6
|
+
attr_accessor :response, :api, :id, :home, :away, :scores
|
7
|
+
|
8
|
+
def initialize(data, **opts)
|
9
|
+
@api = opts[:api]
|
10
|
+
@game = opts[:game]
|
11
|
+
|
12
|
+
@scores = {
|
13
|
+
1 => {},
|
14
|
+
2 => {},
|
15
|
+
3 => {},
|
16
|
+
4 => {},
|
17
|
+
}
|
18
|
+
@id = data['id']
|
19
|
+
|
20
|
+
update(data, **opts)
|
21
|
+
end
|
22
|
+
|
23
|
+
def update(data, source: nil, **opts)
|
24
|
+
new_scores = case source
|
25
|
+
when :box
|
26
|
+
parse_from_box(data)
|
27
|
+
when :pbp
|
28
|
+
parse_from_pbp(data)
|
29
|
+
when :summary
|
30
|
+
parse_from_box(data)
|
31
|
+
else
|
32
|
+
if data['quarter']
|
33
|
+
parse_from_pbp(data)
|
34
|
+
elsif data['team']
|
35
|
+
parse_from_box(data)
|
36
|
+
else # schedule requests
|
37
|
+
{}
|
38
|
+
end
|
39
|
+
end
|
40
|
+
# parse data structure
|
41
|
+
# handle data from team (all quarters)
|
42
|
+
# handle data from quarter (both teams)
|
43
|
+
# handle data from game?
|
44
|
+
@scores.each { |k, v| v.merge!(new_scores.fetch(k, {})) }
|
45
|
+
end
|
46
|
+
|
47
|
+
def points(team_id)
|
48
|
+
@score[team_id].to_i
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def parse_from_box(data)
|
55
|
+
id = data.dig('team', 0, 'id')
|
56
|
+
da = data.dig('team', 0, 'scoring', 'quarter')
|
57
|
+
a = [da].compact.flatten(1).each { |h| h[id] = h.delete('points').to_i }
|
58
|
+
id = data.dig('team', 1, 'id')
|
59
|
+
da = data.dig('team', 1, 'scoring', 'quarter')
|
60
|
+
b = [da].compact.flatten(1).each { |h| h[id] = h.delete('points').to_i }
|
61
|
+
a.zip(b).map{ |a, b| [a['number'].to_i, a.merge(b)] }.sort{ |(a,_), (b,_)| a <=> b }.to_h
|
62
|
+
rescue => e
|
63
|
+
binding.pry
|
64
|
+
end
|
65
|
+
|
66
|
+
def parse_from_pbp(data)
|
67
|
+
quarters = data['quarter'][1..-1]
|
68
|
+
quarters = quarters[0] if quarters.is_a?(Array)
|
69
|
+
data = quarters.map{|q| q['scoring'] }
|
70
|
+
data.map.with_index(1) { |h, i| [i, { h.dig('home', 'id') => h.dig('home', 'points').to_i, h.dig('away', 'id') => h.dig('away', 'points').to_i }] }.to_h
|
71
|
+
rescue => e
|
72
|
+
{}
|
73
|
+
end
|
74
|
+
|
75
|
+
def parse_from_summary(data)
|
76
|
+
#
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
KEYS_PBP = ["xmlns", "id", "status", "coverage", "home_team", "away_team", "scheduled", "duration", "attendance", "lead_changes", "times_tied", "clock", "quarter", "scoring"]
|
82
|
+
|
83
|
+
KEYS_BOX = ["xmlns", "id", "status", "coverage", "home_team", "away_team", "scheduled", "duration", "attendance", "lead_changes", "times_tied", "clock", "quarter", "team"]
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|