nba 0.1.1 → 0.2.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 +5 -5
- data/AGENTS.md +362 -0
- data/CHANGELOG.md +169 -0
- data/CLAUDE.md +1 -0
- data/LICENSE +21 -0
- data/README.md +501 -101
- data/bin/console +10 -0
- data/bin/setup +6 -0
- data/exe/nba +8 -0
- data/lib/nba/all_time_leader.rb +77 -0
- data/lib/nba/all_time_leaders.rb +185 -0
- data/lib/nba/assist_leader.rb +92 -0
- data/lib/nba/assist_leaders.rb +64 -0
- data/lib/nba/assist_tracker.rb +108 -0
- data/lib/nba/assist_tracker_entry.rb +206 -0
- data/lib/nba/award.rb +128 -0
- data/lib/nba/box_score.rb +2 -0
- data/lib/nba/box_score_advanced.rb +114 -0
- data/lib/nba/box_score_advanced_player_stat.rb +297 -0
- data/lib/nba/box_score_advanced_team_stat.rb +237 -0
- data/lib/nba/box_score_advanced_v3.rb +124 -0
- data/lib/nba/box_score_defensive_player_stat.rb +281 -0
- data/lib/nba/box_score_defensive_team_stat.rb +85 -0
- data/lib/nba/box_score_defensive_v2.rb +190 -0
- data/lib/nba/box_score_four_factors.rb +91 -0
- data/lib/nba/box_score_four_factors_player_stat.rb +185 -0
- data/lib/nba/box_score_four_factors_team_stat.rb +141 -0
- data/lib/nba/box_score_four_factors_v3.rb +133 -0
- data/lib/nba/box_score_hustle.rb +226 -0
- data/lib/nba/box_score_hustle_player_stat.rb +233 -0
- data/lib/nba/box_score_hustle_team_stat.rb +189 -0
- data/lib/nba/box_score_matchup_stat.rb +417 -0
- data/lib/nba/box_score_matchups_v3.rb +184 -0
- data/lib/nba/box_score_misc.rb +100 -0
- data/lib/nba/box_score_misc_player_stat.rb +217 -0
- data/lib/nba/box_score_misc_team_stat.rb +173 -0
- data/lib/nba/box_score_misc_v3.rb +163 -0
- data/lib/nba/box_score_player_stat.rb +273 -0
- data/lib/nba/box_score_player_track.rb +223 -0
- data/lib/nba/box_score_player_track_stat.rb +273 -0
- data/lib/nba/box_score_player_track_team_stat.rb +229 -0
- data/lib/nba/box_score_scoring.rb +103 -0
- data/lib/nba/box_score_scoring_player_stat.rb +241 -0
- data/lib/nba/box_score_scoring_team_stat.rb +197 -0
- data/lib/nba/box_score_scoring_v3.rb +170 -0
- data/lib/nba/box_score_similarity_score.rb +119 -0
- data/lib/nba/box_score_similarity_stat.rb +76 -0
- data/lib/nba/box_score_starter_bench_stat.rb +257 -0
- data/lib/nba/box_score_summary.rb +285 -0
- data/lib/nba/box_score_summary_v2.rb +202 -0
- data/lib/nba/box_score_summary_v3.rb +120 -0
- data/lib/nba/box_score_summary_v3_data.rb +419 -0
- data/lib/nba/box_score_team_stat.rb +229 -0
- data/lib/nba/box_score_traditional.rb +101 -0
- data/lib/nba/box_score_traditional_v3.rb +195 -0
- data/lib/nba/box_score_usage.rb +102 -0
- data/lib/nba/box_score_usage_player_stat.rb +265 -0
- data/lib/nba/box_score_usage_team_stat.rb +221 -0
- data/lib/nba/box_score_usage_v3.rb +169 -0
- data/lib/nba/box_score_v3_helpers.rb +144 -0
- data/lib/nba/career_stats.rb +217 -0
- data/lib/nba/cli/display/player_display.rb +98 -0
- data/lib/nba/cli/display.rb +178 -0
- data/lib/nba/cli/formatters/game_formatters.rb +86 -0
- data/lib/nba/cli/formatters/leaders_formatters.rb +26 -0
- data/lib/nba/cli/formatters/player_formatters.rb +52 -0
- data/lib/nba/cli/formatters/standings_formatters.rb +26 -0
- data/lib/nba/cli/formatters/team_formatters.rb +67 -0
- data/lib/nba/cli/formatters/time_formatters.rb +82 -0
- data/lib/nba/cli/formatters.rb +56 -0
- data/lib/nba/cli/helpers.rb +135 -0
- data/lib/nba/cli.rb +171 -20
- data/lib/nba/client.rb +35 -0
- data/lib/nba/collection.rb +89 -0
- data/lib/nba/college_player_stat.rb +200 -0
- data/lib/nba/common_player_info.rb +142 -0
- data/lib/nba/common_playoff_series.rb +90 -0
- data/lib/nba/common_team_years.rb +113 -0
- data/lib/nba/conference.rb +39 -0
- data/lib/nba/connection.rb +84 -0
- data/lib/nba/cume_stats_player.rb +358 -0
- data/lib/nba/cume_stats_player_game.rb +217 -0
- data/lib/nba/cume_stats_player_games.rb +99 -0
- data/lib/nba/cume_stats_player_games_entry.rb +25 -0
- data/lib/nba/cume_stats_player_total.rb +481 -0
- data/lib/nba/cume_stats_team.rb +349 -0
- data/lib/nba/cume_stats_team_games.rb +145 -0
- data/lib/nba/cume_stats_team_games_entry.rb +25 -0
- data/lib/nba/cume_stats_team_player.rb +485 -0
- data/lib/nba/cume_stats_team_total.rb +267 -0
- data/lib/nba/data.rb +73 -0
- data/lib/nba/defense_hub.rb +109 -0
- data/lib/nba/defense_hub_stat.rb +57 -0
- data/lib/nba/defensive_shot_stat.rb +102 -0
- data/lib/nba/division.rb +49 -0
- data/lib/nba/draft_board.rb +126 -0
- data/lib/nba/draft_board_pick.rb +173 -0
- data/lib/nba/draft_combine_anthro_measurement.rb +163 -0
- data/lib/nba/draft_combine_drill_result.rb +115 -0
- data/lib/nba/draft_combine_drill_results.rb +112 -0
- data/lib/nba/draft_combine_non_stationary_shooting.rb +268 -0
- data/lib/nba/draft_combine_non_stationary_shooting_result.rb +355 -0
- data/lib/nba/draft_combine_player_anthro.rb +133 -0
- data/lib/nba/draft_combine_spot_shooting.rb +243 -0
- data/lib/nba/draft_combine_spot_shooting_result.rb +419 -0
- data/lib/nba/draft_combine_stat.rb +211 -0
- data/lib/nba/draft_combine_stats.rb +160 -0
- data/lib/nba/draft_history.rb +142 -0
- data/lib/nba/draft_pick.rb +154 -0
- data/lib/nba/dunk_score_leader.rb +93 -0
- data/lib/nba/dunk_score_leaders.rb +77 -0
- data/lib/nba/estimated_metrics_stat.rb +152 -0
- data/lib/nba/fantasy_profile_stat.rb +142 -0
- data/lib/nba/fantasy_widget.rb +72 -0
- data/lib/nba/fantasy_widget_player.rb +98 -0
- data/lib/nba/found_game.rb +260 -0
- data/lib/nba/franchise.rb +136 -0
- data/lib/nba/franchise_history.rb +142 -0
- data/lib/nba/franchise_leader.rb +147 -0
- data/lib/nba/franchise_leaders.rb +162 -0
- data/lib/nba/franchise_player.rb +224 -0
- data/lib/nba/franchise_players.rb +147 -0
- data/lib/nba/game.rb +80 -64
- data/lib/nba/game_log.rb +349 -0
- data/lib/nba/game_rotation.rb +152 -0
- data/lib/nba/game_streak.rb +102 -0
- data/lib/nba/games.rb +46 -0
- data/lib/nba/home_page_leader.rb +99 -0
- data/lib/nba/home_page_leaders.rb +75 -0
- data/lib/nba/home_page_stat.rb +57 -0
- data/lib/nba/home_page_v2.rb +110 -0
- data/lib/nba/hustle_stats_box_score.rb +182 -0
- data/lib/nba/infographic_fan_duel_player.rb +139 -0
- data/lib/nba/infographic_fan_duel_player_stat.rb +311 -0
- data/lib/nba/ist_standing.rb +167 -0
- data/lib/nba/ist_standings.rb +81 -0
- data/lib/nba/leader.rb +103 -0
- data/lib/nba/leaders.rb +110 -0
- data/lib/nba/leaders_tile.rb +57 -0
- data/lib/nba/leaders_tiles.rb +90 -0
- data/lib/nba/league.rb +37 -0
- data/lib/nba/league_dash_lineup_stat.rb +270 -0
- data/lib/nba/league_dash_lineups.rb +177 -0
- data/lib/nba/league_dash_opp_pt_shot.rb +150 -0
- data/lib/nba/league_dash_player_bio_stat.rb +217 -0
- data/lib/nba/league_dash_player_bio_stats.rb +164 -0
- data/lib/nba/league_dash_player_clutch.rb +212 -0
- data/lib/nba/league_dash_player_clutch_stat.rb +271 -0
- data/lib/nba/league_dash_player_pt_shot.rb +152 -0
- data/lib/nba/league_dash_player_pt_shot_stat.rb +193 -0
- data/lib/nba/league_dash_player_shot_location_stat.rb +265 -0
- data/lib/nba/league_dash_player_shot_locations.rb +210 -0
- data/lib/nba/league_dash_player_stat.rb +306 -0
- data/lib/nba/league_dash_player_stats.rb +176 -0
- data/lib/nba/league_dash_pt_defend.rb +160 -0
- data/lib/nba/league_dash_pt_defend_stat.rb +145 -0
- data/lib/nba/league_dash_pt_stats.rb +152 -0
- data/lib/nba/league_dash_pt_stats_stat.rb +169 -0
- data/lib/nba/league_dash_pt_team_defend.rb +158 -0
- data/lib/nba/league_dash_pt_team_defend_stat.rb +110 -0
- data/lib/nba/league_dash_team_clutch.rb +211 -0
- data/lib/nba/league_dash_team_clutch_stat.rb +237 -0
- data/lib/nba/league_dash_team_pt_shot.rb +150 -0
- data/lib/nba/league_dash_team_pt_shot_stat.rb +166 -0
- data/lib/nba/league_dash_team_shot_location_stat.rb +230 -0
- data/lib/nba/league_dash_team_shot_locations.rb +208 -0
- data/lib/nba/league_dash_team_stat.rb +275 -0
- data/lib/nba/league_dash_team_stats.rb +172 -0
- data/lib/nba/league_game_finder.rb +170 -0
- data/lib/nba/league_game_log.rb +224 -0
- data/lib/nba/league_hustle_stats_player.rb +161 -0
- data/lib/nba/league_hustle_stats_player_stat.rb +253 -0
- data/lib/nba/league_hustle_stats_team.rb +157 -0
- data/lib/nba/league_hustle_stats_team_stat.rb +179 -0
- data/lib/nba/league_lineup_viz.rb +184 -0
- data/lib/nba/league_lineup_viz_stat.rb +214 -0
- data/lib/nba/league_player_on_details.rb +175 -0
- data/lib/nba/league_player_on_details_stat.rb +313 -0
- data/lib/nba/league_season_matchup_stat.rb +241 -0
- data/lib/nba/league_season_matchups.rb +181 -0
- data/lib/nba/league_standing.rb +284 -0
- data/lib/nba/league_standings.rb +159 -0
- data/lib/nba/league_wide_shot_stat.rb +62 -0
- data/lib/nba/live_action.rb +240 -0
- data/lib/nba/live_box_score.rb +143 -0
- data/lib/nba/live_connection.rb +84 -0
- data/lib/nba/live_game.rb +230 -0
- data/lib/nba/live_play_by_play.rb +120 -0
- data/lib/nba/live_player_stat.rb +276 -0
- data/lib/nba/live_scoreboard.rb +102 -0
- data/lib/nba/matchup_rollup.rb +98 -0
- data/lib/nba/matchups_rollup.rb +81 -0
- data/lib/nba/pass_stat.rb +209 -0
- data/lib/nba/play.rb +258 -0
- data/lib/nba/play_by_play.rb +85 -0
- data/lib/nba/play_by_play_v3.rb +91 -0
- data/lib/nba/play_type_stat.rb +206 -0
- data/lib/nba/player.rb +242 -24
- data/lib/nba/player_awards.rb +110 -0
- data/lib/nba/player_career_by_college.rb +86 -0
- data/lib/nba/player_career_by_college_rollup.rb +143 -0
- data/lib/nba/player_career_stats.rb +77 -0
- data/lib/nba/player_compare.rb +156 -0
- data/lib/nba/player_comparison_stat.rb +242 -0
- data/lib/nba/player_dash_pt_pass.rb +164 -0
- data/lib/nba/player_dash_pt_reb.rb +235 -0
- data/lib/nba/player_dash_pt_shot_defend.rb +119 -0
- data/lib/nba/player_dash_pt_shots.rb +279 -0
- data/lib/nba/player_dashboard.rb +259 -0
- data/lib/nba/player_dashboard_stat.rb +248 -0
- data/lib/nba/player_estimated_metrics.rb +84 -0
- data/lib/nba/player_fantasy_profile_bar_graph.rb +147 -0
- data/lib/nba/player_game_log.rb +72 -0
- data/lib/nba/player_game_logs.rb +117 -0
- data/lib/nba/player_game_streak_finder.rb +108 -0
- data/lib/nba/player_index.rb +135 -0
- data/lib/nba/player_index_entry.rb +266 -0
- data/lib/nba/player_info.rb +225 -0
- data/lib/nba/player_next_n_games.rb +64 -0
- data/lib/nba/player_profile_v2.rb +169 -0
- data/lib/nba/player_vs_player.rb +153 -0
- data/lib/nba/players.rb +107 -0
- data/lib/nba/playoff_matchup.rb +84 -0
- data/lib/nba/playoff_picture.rb +98 -0
- data/lib/nba/playoff_series.rb +76 -0
- data/lib/nba/position.rb +48 -0
- data/lib/nba/rebound_stat.rb +189 -0
- data/lib/nba/response_parser.rb +116 -0
- data/lib/nba/roster.rb +74 -0
- data/lib/nba/rotation_entry.rb +154 -0
- data/lib/nba/schedule.rb +183 -0
- data/lib/nba/schedule_international.rb +182 -0
- data/lib/nba/scheduled_game.rb +240 -0
- data/lib/nba/scoreboard.rb +183 -0
- data/lib/nba/scoreboard_v3.rb +104 -0
- data/lib/nba/shot.rb +208 -0
- data/lib/nba/shot_chart.rb +75 -0
- data/lib/nba/shot_chart_league_wide.rb +102 -0
- data/lib/nba/shot_chart_lineup_detail.rb +109 -0
- data/lib/nba/shot_stat.rb +174 -0
- data/lib/nba/standing.rb +129 -0
- data/lib/nba/standings.rb +75 -0
- data/lib/nba/static.rb +107 -0
- data/lib/nba/synergy_play_types.rb +211 -0
- data/lib/nba/team.rb +203 -127
- data/lib/nba/team_and_players_vs_players.rb +227 -0
- data/lib/nba/team_and_players_vs_players_stat.rb +155 -0
- data/lib/nba/team_dash_pt_pass.rb +157 -0
- data/lib/nba/team_dash_pt_reb.rb +216 -0
- data/lib/nba/team_dash_pt_shots.rb +244 -0
- data/lib/nba/team_dashboard.rb +275 -0
- data/lib/nba/team_dashboard_stat.rb +248 -0
- data/lib/nba/team_detail.rb +117 -0
- data/lib/nba/team_details.rb +173 -0
- data/lib/nba/team_estimated_metrics.rb +91 -0
- data/lib/nba/team_estimated_metrics_stat.rb +146 -0
- data/lib/nba/team_game_log.rb +143 -0
- data/lib/nba/team_game_log_entry.rb +246 -0
- data/lib/nba/team_game_log_stat.rb +275 -0
- data/lib/nba/team_game_logs.rb +163 -0
- data/lib/nba/team_game_streak.rb +111 -0
- data/lib/nba/team_game_streak_finder.rb +109 -0
- data/lib/nba/team_historical_leader.rb +207 -0
- data/lib/nba/team_historical_leaders.rb +98 -0
- data/lib/nba/team_historical_record.rb +139 -0
- data/lib/nba/team_info.rb +150 -0
- data/lib/nba/team_info_common.rb +177 -0
- data/lib/nba/team_on_off_overall_stat.rb +477 -0
- data/lib/nba/team_on_off_player_stat.rb +523 -0
- data/lib/nba/team_on_off_player_summary.rb +135 -0
- data/lib/nba/team_pass_stat.rb +183 -0
- data/lib/nba/team_player_dashboard.rb +212 -0
- data/lib/nba/team_player_on_off_details.rb +218 -0
- data/lib/nba/team_player_on_off_summary.rb +214 -0
- data/lib/nba/team_player_stat.rb +275 -0
- data/lib/nba/team_rebound_stat.rb +189 -0
- data/lib/nba/team_season_rank.rb +110 -0
- data/lib/nba/team_shot_stat.rb +173 -0
- data/lib/nba/team_vs_player.rb +151 -0
- data/lib/nba/team_vs_player_stat.rb +157 -0
- data/lib/nba/team_year.rb +55 -0
- data/lib/nba/team_year_by_year_stats.rb +152 -0
- data/lib/nba/team_year_stat.rb +282 -0
- data/lib/nba/teams.rb +33 -0
- data/lib/nba/upcoming_game.rb +115 -0
- data/lib/nba/utils.rb +94 -0
- data/lib/nba/version.rb +5 -2
- data/lib/nba/video_detail.rb +103 -0
- data/lib/nba/video_details.rb +118 -0
- data/lib/nba/video_details_asset.rb +115 -0
- data/lib/nba/video_details_asset_entry.rb +91 -0
- data/lib/nba/video_event.rb +83 -0
- data/lib/nba/video_event_asset.rb +91 -0
- data/lib/nba/video_events.rb +106 -0
- data/lib/nba/video_events_asset.rb +107 -0
- data/lib/nba/video_status.rb +129 -0
- data/lib/nba/video_status_entry.rb +161 -0
- data/lib/nba/vs_player_stat.rb +156 -0
- data/lib/nba/win_probability.rb +117 -0
- data/lib/nba/win_probability_point.rb +140 -0
- data/lib/nba.rb +249 -5
- data/sig/equalizer.rbs +3 -0
- data/sig/nba.rbs +7297 -0
- data/sig/shale.rbs +24 -0
- data/sig/thor.rbs +19 -0
- metadata +324 -95
- data/.gitignore +0 -18
- data/.travis.yml +0 -22
- data/Gemfile +0 -23
- data/LICENSE.md +0 -22
- data/Rakefile +0 -18
- data/bin/nba +0 -7
- data/cache/teams.json +0 -16529
- data/lib/faraday_middleware/scrape_game.rb +0 -41
- data/lib/nba/request.rb +0 -37
- data/nba.gemspec +0 -28
- data/spec/fixtures/games.html +0 -785
- data/spec/fixtures/teams.json +0 -16529
- data/spec/game_spec.rb +0 -40
- data/spec/spec_helper.rb +0 -25
- data/spec/team_spec.rb +0 -93
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
require "json"
|
|
2
|
+
require_relative "client"
|
|
3
|
+
require_relative "collection"
|
|
4
|
+
require_relative "utils"
|
|
5
|
+
|
|
6
|
+
require_relative "win_probability_point"
|
|
7
|
+
|
|
8
|
+
module NBA
|
|
9
|
+
# Provides methods to retrieve win probability data
|
|
10
|
+
module WinProbability
|
|
11
|
+
# Result set name for win probability
|
|
12
|
+
# @return [String] the result set name
|
|
13
|
+
WIN_PROB_PBP = "WinProbPBP".freeze
|
|
14
|
+
|
|
15
|
+
# Retrieves win probability data for a game
|
|
16
|
+
#
|
|
17
|
+
# @api public
|
|
18
|
+
# @example
|
|
19
|
+
# points = NBA::WinProbability.find(game: "0022400001")
|
|
20
|
+
# points.each { |p| puts "Period #{p.period}: Home #{(p.home_pct * 100).round}%" }
|
|
21
|
+
# @param game [String, Game] the game ID or Game object
|
|
22
|
+
# @param client [Client] the API client to use
|
|
23
|
+
# @return [Collection] a collection of win probability points
|
|
24
|
+
def self.find(game:, client: CLIENT)
|
|
25
|
+
game_id = Utils.extract_id(game)
|
|
26
|
+
path = "winprobabilitypbp?GameID=#{game_id}&LeagueID=00"
|
|
27
|
+
response = client.get(path)
|
|
28
|
+
parse_response(response, game_id)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Parses the API response into win probability point objects
|
|
32
|
+
#
|
|
33
|
+
# @api private
|
|
34
|
+
# @return [Collection] collection of win probability points
|
|
35
|
+
def self.parse_response(response, game_id)
|
|
36
|
+
return Collection.new unless response
|
|
37
|
+
|
|
38
|
+
data = JSON.parse(response)
|
|
39
|
+
result_set = find_result_set(data)
|
|
40
|
+
return Collection.new unless result_set
|
|
41
|
+
|
|
42
|
+
headers = result_set["headers"]
|
|
43
|
+
rows = result_set["rowSet"]
|
|
44
|
+
return Collection.new unless headers && rows
|
|
45
|
+
|
|
46
|
+
points = rows.map { |row| build_win_prob_point(headers, row, game_id) }
|
|
47
|
+
Collection.new(points)
|
|
48
|
+
end
|
|
49
|
+
private_class_method :parse_response
|
|
50
|
+
|
|
51
|
+
# Finds the result set in the response
|
|
52
|
+
#
|
|
53
|
+
# @api private
|
|
54
|
+
# @return [Hash, nil] the result set hash
|
|
55
|
+
def self.find_result_set(data)
|
|
56
|
+
result_sets = data["resultSets"]
|
|
57
|
+
return unless result_sets
|
|
58
|
+
|
|
59
|
+
result_sets.find { |rs| rs["name"].eql?(WIN_PROB_PBP) }
|
|
60
|
+
end
|
|
61
|
+
private_class_method :find_result_set
|
|
62
|
+
|
|
63
|
+
# Builds a WinProbabilityPoint object from raw data
|
|
64
|
+
#
|
|
65
|
+
# @api private
|
|
66
|
+
# @return [WinProbabilityPoint] the win probability point object
|
|
67
|
+
def self.build_win_prob_point(headers, row, game_id)
|
|
68
|
+
data = headers.zip(row).to_h
|
|
69
|
+
WinProbabilityPoint.new(**win_prob_attributes(data, game_id))
|
|
70
|
+
end
|
|
71
|
+
private_class_method :build_win_prob_point
|
|
72
|
+
|
|
73
|
+
# Combines all win probability attributes
|
|
74
|
+
#
|
|
75
|
+
# @api private
|
|
76
|
+
# @return [Hash] the combined attributes
|
|
77
|
+
def self.win_prob_attributes(data, game_id)
|
|
78
|
+
event_attributes(data, game_id)
|
|
79
|
+
.merge(score_attributes(data))
|
|
80
|
+
.merge(description_attributes(data))
|
|
81
|
+
end
|
|
82
|
+
private_class_method :win_prob_attributes
|
|
83
|
+
|
|
84
|
+
# Extracts event attributes from data
|
|
85
|
+
#
|
|
86
|
+
# @api private
|
|
87
|
+
# @return [Hash] event attributes
|
|
88
|
+
def self.event_attributes(data, game_id)
|
|
89
|
+
{game_id: game_id, event_num: data["EVENT_NUM"],
|
|
90
|
+
period: data["PERIOD"], seconds_remaining: data["SECONDS_REMAINING"],
|
|
91
|
+
location: data["LOCATION"]}
|
|
92
|
+
end
|
|
93
|
+
private_class_method :event_attributes
|
|
94
|
+
|
|
95
|
+
# Extracts score attributes from data
|
|
96
|
+
#
|
|
97
|
+
# @api private
|
|
98
|
+
# @return [Hash] score attributes
|
|
99
|
+
def self.score_attributes(data)
|
|
100
|
+
{home_pct: data["HOME_PCT"], visitor_pct: data["VISITOR_PCT"],
|
|
101
|
+
home_pts: data["HOME_PTS"], visitor_pts: data["VISITOR_PTS"],
|
|
102
|
+
home_score_by: data["HOME_SCORE_BY"], visitor_score_by: data["VISITOR_SCORE_BY"]}
|
|
103
|
+
end
|
|
104
|
+
private_class_method :score_attributes
|
|
105
|
+
|
|
106
|
+
# Extracts description attributes from data
|
|
107
|
+
#
|
|
108
|
+
# @api private
|
|
109
|
+
# @return [Hash] description attributes
|
|
110
|
+
def self.description_attributes(data)
|
|
111
|
+
{home_description: data["HOME_DESCRIPTION"],
|
|
112
|
+
neutral_description: data["NEUTRAL_DESCRIPTION"],
|
|
113
|
+
visitor_description: data["VISITOR_DESCRIPTION"]}
|
|
114
|
+
end
|
|
115
|
+
private_class_method :description_attributes
|
|
116
|
+
end
|
|
117
|
+
end
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
module NBA
|
|
2
|
+
# Represents a win probability data point
|
|
3
|
+
class WinProbabilityPoint < Shale::Mapper
|
|
4
|
+
include Equalizer.new(:game_id, :event_num)
|
|
5
|
+
|
|
6
|
+
# @!attribute [rw] game_id
|
|
7
|
+
# Returns the game ID
|
|
8
|
+
# @api public
|
|
9
|
+
# @example
|
|
10
|
+
# point.game_id #=> "0022400001"
|
|
11
|
+
# @return [String] the game ID
|
|
12
|
+
attribute :game_id, Shale::Type::String
|
|
13
|
+
|
|
14
|
+
# @!attribute [rw] event_num
|
|
15
|
+
# Returns the event number
|
|
16
|
+
# @api public
|
|
17
|
+
# @example
|
|
18
|
+
# point.event_num #=> 1
|
|
19
|
+
# @return [Integer] the event number
|
|
20
|
+
attribute :event_num, Shale::Type::Integer
|
|
21
|
+
|
|
22
|
+
# @!attribute [rw] home_pct
|
|
23
|
+
# Returns the home team win probability
|
|
24
|
+
# @api public
|
|
25
|
+
# @example
|
|
26
|
+
# point.home_pct #=> 0.52
|
|
27
|
+
# @return [Float] home win probability (0.0 to 1.0)
|
|
28
|
+
attribute :home_pct, Shale::Type::Float
|
|
29
|
+
|
|
30
|
+
# @!attribute [rw] visitor_pct
|
|
31
|
+
# Returns the visitor team win probability
|
|
32
|
+
# @api public
|
|
33
|
+
# @example
|
|
34
|
+
# point.visitor_pct #=> 0.48
|
|
35
|
+
# @return [Float] visitor win probability (0.0 to 1.0)
|
|
36
|
+
attribute :visitor_pct, Shale::Type::Float
|
|
37
|
+
|
|
38
|
+
# @!attribute [rw] home_pts
|
|
39
|
+
# Returns the home team points at this event
|
|
40
|
+
# @api public
|
|
41
|
+
# @example
|
|
42
|
+
# point.home_pts #=> 25
|
|
43
|
+
# @return [Integer] home team points
|
|
44
|
+
attribute :home_pts, Shale::Type::Integer
|
|
45
|
+
|
|
46
|
+
# @!attribute [rw] visitor_pts
|
|
47
|
+
# Returns the visitor team points at this event
|
|
48
|
+
# @api public
|
|
49
|
+
# @example
|
|
50
|
+
# point.visitor_pts #=> 23
|
|
51
|
+
# @return [Integer] visitor team points
|
|
52
|
+
attribute :visitor_pts, Shale::Type::Integer
|
|
53
|
+
|
|
54
|
+
# @!attribute [rw] home_score_by
|
|
55
|
+
# Returns points scored by home team on this event
|
|
56
|
+
# @api public
|
|
57
|
+
# @example
|
|
58
|
+
# point.home_score_by #=> 2
|
|
59
|
+
# @return [Integer] points scored
|
|
60
|
+
attribute :home_score_by, Shale::Type::Integer
|
|
61
|
+
|
|
62
|
+
# @!attribute [rw] visitor_score_by
|
|
63
|
+
# Returns points scored by visitor team on this event
|
|
64
|
+
# @api public
|
|
65
|
+
# @example
|
|
66
|
+
# point.visitor_score_by #=> 0
|
|
67
|
+
# @return [Integer] points scored
|
|
68
|
+
attribute :visitor_score_by, Shale::Type::Integer
|
|
69
|
+
|
|
70
|
+
# @!attribute [rw] period
|
|
71
|
+
# Returns the period
|
|
72
|
+
# @api public
|
|
73
|
+
# @example
|
|
74
|
+
# point.period #=> 1
|
|
75
|
+
# @return [Integer] the period number
|
|
76
|
+
attribute :period, Shale::Type::Integer
|
|
77
|
+
|
|
78
|
+
# @!attribute [rw] seconds_remaining
|
|
79
|
+
# Returns seconds remaining in the period
|
|
80
|
+
# @api public
|
|
81
|
+
# @example
|
|
82
|
+
# point.seconds_remaining #=> 420
|
|
83
|
+
# @return [Integer] seconds remaining
|
|
84
|
+
attribute :seconds_remaining, Shale::Type::Integer
|
|
85
|
+
|
|
86
|
+
# @!attribute [rw] home_description
|
|
87
|
+
# Returns the home team play description
|
|
88
|
+
# @api public
|
|
89
|
+
# @example
|
|
90
|
+
# point.home_description #=> "Curry 3PT Shot"
|
|
91
|
+
# @return [String] the description
|
|
92
|
+
attribute :home_description, Shale::Type::String
|
|
93
|
+
|
|
94
|
+
# @!attribute [rw] neutral_description
|
|
95
|
+
# Returns the neutral play description
|
|
96
|
+
# @api public
|
|
97
|
+
# @example
|
|
98
|
+
# point.neutral_description #=> "Jump Ball"
|
|
99
|
+
# @return [String] the description
|
|
100
|
+
attribute :neutral_description, Shale::Type::String
|
|
101
|
+
|
|
102
|
+
# @!attribute [rw] visitor_description
|
|
103
|
+
# Returns the visitor team play description
|
|
104
|
+
# @api public
|
|
105
|
+
# @example
|
|
106
|
+
# point.visitor_description #=> "James Layup"
|
|
107
|
+
# @return [String] the description
|
|
108
|
+
attribute :visitor_description, Shale::Type::String
|
|
109
|
+
|
|
110
|
+
# @!attribute [rw] location
|
|
111
|
+
# Returns the event location
|
|
112
|
+
# @api public
|
|
113
|
+
# @example
|
|
114
|
+
# point.location #=> "H"
|
|
115
|
+
# @return [String] the location
|
|
116
|
+
attribute :location, Shale::Type::String
|
|
117
|
+
|
|
118
|
+
# Returns the description for this event
|
|
119
|
+
#
|
|
120
|
+
# @api public
|
|
121
|
+
# @example
|
|
122
|
+
# point.description #=> "Curry 3PT Shot"
|
|
123
|
+
# @return [String, nil] the description
|
|
124
|
+
def description
|
|
125
|
+
home_description || neutral_description || visitor_description
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# Returns the score margin (positive = home leading)
|
|
129
|
+
#
|
|
130
|
+
# @api public
|
|
131
|
+
# @example
|
|
132
|
+
# point.margin #=> 5
|
|
133
|
+
# @return [Integer, nil] the score margin, or nil if either score is missing
|
|
134
|
+
def margin
|
|
135
|
+
return nil unless home_pts && visitor_pts
|
|
136
|
+
|
|
137
|
+
home_pts - visitor_pts
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
data/lib/nba.rb
CHANGED
|
@@ -1,5 +1,249 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
# NBA Stats API client library
|
|
2
|
+
#
|
|
3
|
+
# @api public
|
|
4
|
+
module NBA
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
require_relative "nba/version"
|
|
8
|
+
require_relative "nba/utils"
|
|
9
|
+
require_relative "nba/connection"
|
|
10
|
+
require_relative "nba/client"
|
|
11
|
+
require_relative "nba/collection"
|
|
12
|
+
require_relative "nba/response_parser"
|
|
13
|
+
require_relative "nba/conference"
|
|
14
|
+
require_relative "nba/division"
|
|
15
|
+
require_relative "nba/position"
|
|
16
|
+
require_relative "nba/team"
|
|
17
|
+
require_relative "nba/player"
|
|
18
|
+
require_relative "nba/game"
|
|
19
|
+
require_relative "nba/league"
|
|
20
|
+
require_relative "nba/games"
|
|
21
|
+
require_relative "nba/leader"
|
|
22
|
+
require_relative "nba/standing"
|
|
23
|
+
require_relative "nba/game_log"
|
|
24
|
+
require_relative "nba/career_stats"
|
|
25
|
+
require_relative "nba/data"
|
|
26
|
+
require_relative "nba/teams"
|
|
27
|
+
require_relative "nba/players"
|
|
28
|
+
require_relative "nba/roster"
|
|
29
|
+
require_relative "nba/scoreboard"
|
|
30
|
+
require_relative "nba/leaders"
|
|
31
|
+
require_relative "nba/standings"
|
|
32
|
+
require_relative "nba/player_game_log"
|
|
33
|
+
require_relative "nba/player_game_logs"
|
|
34
|
+
require_relative "nba/upcoming_game"
|
|
35
|
+
require_relative "nba/player_next_n_games"
|
|
36
|
+
require_relative "nba/player_profile_v2"
|
|
37
|
+
require_relative "nba/player_career_stats"
|
|
38
|
+
require_relative "nba/team_game_log"
|
|
39
|
+
require_relative "nba/franchise"
|
|
40
|
+
require_relative "nba/franchise_history"
|
|
41
|
+
require_relative "nba/franchise_leader"
|
|
42
|
+
require_relative "nba/franchise_leaders"
|
|
43
|
+
require_relative "nba/franchise_player"
|
|
44
|
+
require_relative "nba/franchise_players"
|
|
45
|
+
require_relative "nba/box_score"
|
|
46
|
+
require_relative "nba/box_score_traditional"
|
|
47
|
+
require_relative "nba/play"
|
|
48
|
+
require_relative "nba/play_by_play"
|
|
49
|
+
require_relative "nba/shot"
|
|
50
|
+
require_relative "nba/shot_chart"
|
|
51
|
+
require_relative "nba/box_score_advanced"
|
|
52
|
+
require_relative "nba/box_score_scoring"
|
|
53
|
+
require_relative "nba/box_score_misc"
|
|
54
|
+
require_relative "nba/box_score_usage"
|
|
55
|
+
require_relative "nba/box_score_four_factors"
|
|
56
|
+
require_relative "nba/player_awards"
|
|
57
|
+
require_relative "nba/player_compare"
|
|
58
|
+
require_relative "nba/draft_history"
|
|
59
|
+
require_relative "nba/draft_combine_spot_shooting_result"
|
|
60
|
+
require_relative "nba/draft_combine_spot_shooting"
|
|
61
|
+
require_relative "nba/draft_combine_stat"
|
|
62
|
+
require_relative "nba/draft_combine_stats"
|
|
63
|
+
require_relative "nba/draft_board_pick"
|
|
64
|
+
require_relative "nba/draft_board"
|
|
65
|
+
require_relative "nba/draft_combine_drill_result"
|
|
66
|
+
require_relative "nba/draft_combine_drill_results"
|
|
67
|
+
require_relative "nba/draft_combine_non_stationary_shooting_result"
|
|
68
|
+
require_relative "nba/draft_combine_non_stationary_shooting"
|
|
69
|
+
require_relative "nba/draft_combine_anthro_measurement"
|
|
70
|
+
require_relative "nba/draft_combine_player_anthro"
|
|
71
|
+
require_relative "nba/game_rotation"
|
|
72
|
+
require_relative "nba/league_game_log"
|
|
73
|
+
require_relative "nba/league_standings"
|
|
74
|
+
require_relative "nba/league_dash_player_stats"
|
|
75
|
+
require_relative "nba/team_details"
|
|
76
|
+
require_relative "nba/team_year_by_year_stats"
|
|
77
|
+
require_relative "nba/common_playoff_series"
|
|
78
|
+
require_relative "nba/schedule"
|
|
79
|
+
require_relative "nba/player_info"
|
|
80
|
+
require_relative "nba/common_player_info"
|
|
81
|
+
require_relative "nba/all_time_leader"
|
|
82
|
+
require_relative "nba/all_time_leaders"
|
|
83
|
+
require_relative "nba/league_dash_team_stat"
|
|
84
|
+
require_relative "nba/league_dash_team_stats"
|
|
85
|
+
require_relative "nba/box_score_hustle_player_stat"
|
|
86
|
+
require_relative "nba/box_score_hustle_team_stat"
|
|
87
|
+
require_relative "nba/box_score_hustle"
|
|
88
|
+
require_relative "nba/box_score_defensive_player_stat"
|
|
89
|
+
require_relative "nba/box_score_defensive_team_stat"
|
|
90
|
+
require_relative "nba/box_score_defensive_v2"
|
|
91
|
+
require_relative "nba/box_score_player_track_stat"
|
|
92
|
+
require_relative "nba/box_score_player_track_team_stat"
|
|
93
|
+
require_relative "nba/box_score_player_track"
|
|
94
|
+
require_relative "nba/box_score_summary"
|
|
95
|
+
require_relative "nba/box_score_summary_v2"
|
|
96
|
+
require_relative "nba/box_score_summary_v3_data"
|
|
97
|
+
require_relative "nba/box_score_summary_v3"
|
|
98
|
+
require_relative "nba/team_year"
|
|
99
|
+
require_relative "nba/common_team_years"
|
|
100
|
+
require_relative "nba/cume_stats_player_game"
|
|
101
|
+
require_relative "nba/cume_stats_player_total"
|
|
102
|
+
require_relative "nba/cume_stats_player"
|
|
103
|
+
require_relative "nba/cume_stats_player_games_entry"
|
|
104
|
+
require_relative "nba/cume_stats_player_games"
|
|
105
|
+
require_relative "nba/cume_stats_team_games_entry"
|
|
106
|
+
require_relative "nba/cume_stats_team_games"
|
|
107
|
+
require_relative "nba/cume_stats_team_player"
|
|
108
|
+
require_relative "nba/cume_stats_team_total"
|
|
109
|
+
require_relative "nba/cume_stats_team"
|
|
110
|
+
require_relative "nba/live_connection"
|
|
111
|
+
require_relative "nba/live_game"
|
|
112
|
+
require_relative "nba/live_scoreboard"
|
|
113
|
+
require_relative "nba/live_box_score"
|
|
114
|
+
require_relative "nba/live_play_by_play"
|
|
115
|
+
require_relative "nba/league_game_finder"
|
|
116
|
+
require_relative "nba/player_dashboard"
|
|
117
|
+
require_relative "nba/team_dashboard"
|
|
118
|
+
require_relative "nba/synergy_play_types"
|
|
119
|
+
require_relative "nba/win_probability"
|
|
120
|
+
require_relative "nba/shot_chart_league_wide"
|
|
121
|
+
require_relative "nba/box_score_starter_bench_stat"
|
|
122
|
+
require_relative "nba/box_score_traditional_v3"
|
|
123
|
+
require_relative "nba/box_score_advanced_v3"
|
|
124
|
+
require_relative "nba/box_score_scoring_v3"
|
|
125
|
+
require_relative "nba/box_score_misc_v3"
|
|
126
|
+
require_relative "nba/box_score_four_factors_v3"
|
|
127
|
+
require_relative "nba/box_score_usage_v3"
|
|
128
|
+
require_relative "nba/box_score_matchup_stat"
|
|
129
|
+
require_relative "nba/box_score_matchups_v3"
|
|
130
|
+
require_relative "nba/player_index"
|
|
131
|
+
require_relative "nba/player_career_by_college"
|
|
132
|
+
require_relative "nba/player_career_by_college_rollup"
|
|
133
|
+
require_relative "nba/player_estimated_metrics"
|
|
134
|
+
require_relative "nba/game_streak"
|
|
135
|
+
require_relative "nba/player_game_streak_finder"
|
|
136
|
+
require_relative "nba/pass_stat"
|
|
137
|
+
require_relative "nba/player_dash_pt_pass"
|
|
138
|
+
require_relative "nba/rebound_stat"
|
|
139
|
+
require_relative "nba/player_dash_pt_reb"
|
|
140
|
+
require_relative "nba/defensive_shot_stat"
|
|
141
|
+
require_relative "nba/player_dash_pt_shot_defend"
|
|
142
|
+
require_relative "nba/shot_stat"
|
|
143
|
+
require_relative "nba/player_dash_pt_shots"
|
|
144
|
+
require_relative "nba/fantasy_profile_stat"
|
|
145
|
+
require_relative "nba/player_fantasy_profile_bar_graph"
|
|
146
|
+
require_relative "nba/vs_player_stat"
|
|
147
|
+
require_relative "nba/player_vs_player"
|
|
148
|
+
require_relative "nba/team_info"
|
|
149
|
+
require_relative "nba/team_season_rank"
|
|
150
|
+
require_relative "nba/team_info_common"
|
|
151
|
+
require_relative "nba/team_estimated_metrics"
|
|
152
|
+
require_relative "nba/team_historical_leader"
|
|
153
|
+
require_relative "nba/team_historical_leaders"
|
|
154
|
+
require_relative "nba/team_game_streak"
|
|
155
|
+
require_relative "nba/team_game_streak_finder"
|
|
156
|
+
require_relative "nba/team_pass_stat"
|
|
157
|
+
require_relative "nba/team_dash_pt_pass"
|
|
158
|
+
require_relative "nba/team_rebound_stat"
|
|
159
|
+
require_relative "nba/team_dash_pt_reb"
|
|
160
|
+
require_relative "nba/team_shot_stat"
|
|
161
|
+
require_relative "nba/team_dash_pt_shots"
|
|
162
|
+
require_relative "nba/team_player_stat"
|
|
163
|
+
require_relative "nba/team_player_dashboard"
|
|
164
|
+
require_relative "nba/team_on_off_overall_stat"
|
|
165
|
+
require_relative "nba/team_on_off_player_stat"
|
|
166
|
+
require_relative "nba/team_player_on_off_details"
|
|
167
|
+
require_relative "nba/team_on_off_player_summary"
|
|
168
|
+
require_relative "nba/team_player_on_off_summary"
|
|
169
|
+
require_relative "nba/team_vs_player_stat"
|
|
170
|
+
require_relative "nba/team_vs_player"
|
|
171
|
+
require_relative "nba/team_and_players_vs_players_stat"
|
|
172
|
+
require_relative "nba/team_and_players_vs_players"
|
|
173
|
+
require_relative "nba/league_dash_player_clutch_stat"
|
|
174
|
+
require_relative "nba/league_dash_player_clutch"
|
|
175
|
+
require_relative "nba/league_dash_team_clutch_stat"
|
|
176
|
+
require_relative "nba/league_dash_team_clutch"
|
|
177
|
+
require_relative "nba/league_dash_player_pt_shot_stat"
|
|
178
|
+
require_relative "nba/league_dash_player_pt_shot"
|
|
179
|
+
require_relative "nba/league_dash_team_pt_shot_stat"
|
|
180
|
+
require_relative "nba/league_dash_team_pt_shot"
|
|
181
|
+
require_relative "nba/league_dash_opp_pt_shot"
|
|
182
|
+
require_relative "nba/league_dash_player_bio_stat"
|
|
183
|
+
require_relative "nba/league_dash_player_bio_stats"
|
|
184
|
+
require_relative "nba/league_dash_lineup_stat"
|
|
185
|
+
require_relative "nba/league_dash_lineups"
|
|
186
|
+
require_relative "nba/league_dash_player_shot_location_stat"
|
|
187
|
+
require_relative "nba/league_dash_player_shot_locations"
|
|
188
|
+
require_relative "nba/league_dash_team_shot_location_stat"
|
|
189
|
+
require_relative "nba/league_dash_team_shot_locations"
|
|
190
|
+
require_relative "nba/league_dash_pt_defend_stat"
|
|
191
|
+
require_relative "nba/league_dash_pt_defend"
|
|
192
|
+
require_relative "nba/league_dash_pt_team_defend_stat"
|
|
193
|
+
require_relative "nba/league_dash_pt_team_defend"
|
|
194
|
+
require_relative "nba/league_dash_pt_stats_stat"
|
|
195
|
+
require_relative "nba/league_dash_pt_stats"
|
|
196
|
+
require_relative "nba/league_lineup_viz_stat"
|
|
197
|
+
require_relative "nba/league_lineup_viz"
|
|
198
|
+
require_relative "nba/league_player_on_details_stat"
|
|
199
|
+
require_relative "nba/league_player_on_details"
|
|
200
|
+
require_relative "nba/league_season_matchup_stat"
|
|
201
|
+
require_relative "nba/league_season_matchups"
|
|
202
|
+
require_relative "nba/video_detail"
|
|
203
|
+
require_relative "nba/video_details_asset_entry"
|
|
204
|
+
require_relative "nba/video_details_asset"
|
|
205
|
+
require_relative "nba/video_details"
|
|
206
|
+
require_relative "nba/video_event"
|
|
207
|
+
require_relative "nba/video_events"
|
|
208
|
+
require_relative "nba/video_status_entry"
|
|
209
|
+
require_relative "nba/video_status"
|
|
210
|
+
require_relative "nba/assist_leader"
|
|
211
|
+
require_relative "nba/assist_leaders"
|
|
212
|
+
require_relative "nba/assist_tracker_entry"
|
|
213
|
+
require_relative "nba/assist_tracker"
|
|
214
|
+
require_relative "nba/ist_standing"
|
|
215
|
+
require_relative "nba/ist_standings"
|
|
216
|
+
require_relative "nba/play_by_play_v3"
|
|
217
|
+
require_relative "nba/scoreboard_v3"
|
|
218
|
+
require_relative "nba/playoff_matchup"
|
|
219
|
+
require_relative "nba/playoff_picture"
|
|
220
|
+
require_relative "nba/home_page_leader"
|
|
221
|
+
require_relative "nba/home_page_leaders"
|
|
222
|
+
require_relative "nba/defense_hub_stat"
|
|
223
|
+
require_relative "nba/defense_hub"
|
|
224
|
+
require_relative "nba/fantasy_widget_player"
|
|
225
|
+
require_relative "nba/fantasy_widget"
|
|
226
|
+
require_relative "nba/home_page_stat"
|
|
227
|
+
require_relative "nba/home_page_v2"
|
|
228
|
+
require_relative "nba/leaders_tile"
|
|
229
|
+
require_relative "nba/leaders_tiles"
|
|
230
|
+
require_relative "nba/matchup_rollup"
|
|
231
|
+
require_relative "nba/matchups_rollup"
|
|
232
|
+
require_relative "nba/shot_chart_lineup_detail"
|
|
233
|
+
require_relative "nba/box_score_similarity_score"
|
|
234
|
+
require_relative "nba/static"
|
|
235
|
+
require_relative "nba/league_hustle_stats_player_stat"
|
|
236
|
+
require_relative "nba/league_hustle_stats_player"
|
|
237
|
+
require_relative "nba/league_hustle_stats_team_stat"
|
|
238
|
+
require_relative "nba/league_hustle_stats_team"
|
|
239
|
+
require_relative "nba/hustle_stats_box_score"
|
|
240
|
+
require_relative "nba/team_game_log_stat"
|
|
241
|
+
require_relative "nba/team_game_logs"
|
|
242
|
+
require_relative "nba/infographic_fan_duel_player_stat"
|
|
243
|
+
require_relative "nba/infographic_fan_duel_player"
|
|
244
|
+
require_relative "nba/dunk_score_leader"
|
|
245
|
+
require_relative "nba/dunk_score_leaders"
|
|
246
|
+
require_relative "nba/video_event_asset"
|
|
247
|
+
require_relative "nba/video_events_asset"
|
|
248
|
+
require_relative "nba/schedule_international"
|
|
249
|
+
require_relative "nba/cli"
|
data/sig/equalizer.rbs
ADDED