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,152 @@
|
|
|
1
|
+
module NBA
|
|
2
|
+
# Represents player estimated metrics
|
|
3
|
+
class EstimatedMetricsStat < Shale::Mapper
|
|
4
|
+
include Equalizer.new(:player_id)
|
|
5
|
+
|
|
6
|
+
# @!attribute [rw] player_id
|
|
7
|
+
# Returns the player ID
|
|
8
|
+
# @api public
|
|
9
|
+
# @example
|
|
10
|
+
# stat.player_id #=> 201939
|
|
11
|
+
# @return [Integer] the player ID
|
|
12
|
+
attribute :player_id, Shale::Type::Integer
|
|
13
|
+
|
|
14
|
+
# @!attribute [rw] player_name
|
|
15
|
+
# Returns the player name
|
|
16
|
+
# @api public
|
|
17
|
+
# @example
|
|
18
|
+
# stat.player_name #=> "Stephen Curry"
|
|
19
|
+
# @return [String] the player name
|
|
20
|
+
attribute :player_name, Shale::Type::String
|
|
21
|
+
|
|
22
|
+
# @!attribute [rw] gp
|
|
23
|
+
# Returns games played
|
|
24
|
+
# @api public
|
|
25
|
+
# @example
|
|
26
|
+
# stat.gp #=> 74
|
|
27
|
+
# @return [Integer] games played
|
|
28
|
+
attribute :gp, Shale::Type::Integer
|
|
29
|
+
|
|
30
|
+
# @!attribute [rw] w
|
|
31
|
+
# Returns wins
|
|
32
|
+
# @api public
|
|
33
|
+
# @example
|
|
34
|
+
# stat.w #=> 46
|
|
35
|
+
# @return [Integer] wins
|
|
36
|
+
attribute :w, Shale::Type::Integer
|
|
37
|
+
|
|
38
|
+
# @!attribute [rw] l
|
|
39
|
+
# Returns losses
|
|
40
|
+
# @api public
|
|
41
|
+
# @example
|
|
42
|
+
# stat.l #=> 28
|
|
43
|
+
# @return [Integer] losses
|
|
44
|
+
attribute :l, Shale::Type::Integer
|
|
45
|
+
|
|
46
|
+
# @!attribute [rw] w_pct
|
|
47
|
+
# Returns win percentage
|
|
48
|
+
# @api public
|
|
49
|
+
# @example
|
|
50
|
+
# stat.w_pct #=> 0.622
|
|
51
|
+
# @return [Float] win percentage
|
|
52
|
+
attribute :w_pct, Shale::Type::Float
|
|
53
|
+
|
|
54
|
+
# @!attribute [rw] min
|
|
55
|
+
# Returns minutes per game
|
|
56
|
+
# @api public
|
|
57
|
+
# @example
|
|
58
|
+
# stat.min #=> 32.7
|
|
59
|
+
# @return [Float] minutes
|
|
60
|
+
attribute :min, Shale::Type::Float
|
|
61
|
+
|
|
62
|
+
# @!attribute [rw] e_off_rating
|
|
63
|
+
# Returns estimated offensive rating
|
|
64
|
+
# @api public
|
|
65
|
+
# @example
|
|
66
|
+
# stat.e_off_rating #=> 117.5
|
|
67
|
+
# @return [Float] estimated offensive rating
|
|
68
|
+
attribute :e_off_rating, Shale::Type::Float
|
|
69
|
+
|
|
70
|
+
# @!attribute [rw] e_def_rating
|
|
71
|
+
# Returns estimated defensive rating
|
|
72
|
+
# @api public
|
|
73
|
+
# @example
|
|
74
|
+
# stat.e_def_rating #=> 110.2
|
|
75
|
+
# @return [Float] estimated defensive rating
|
|
76
|
+
attribute :e_def_rating, Shale::Type::Float
|
|
77
|
+
|
|
78
|
+
# @!attribute [rw] e_net_rating
|
|
79
|
+
# Returns estimated net rating
|
|
80
|
+
# @api public
|
|
81
|
+
# @example
|
|
82
|
+
# stat.e_net_rating #=> 7.3
|
|
83
|
+
# @return [Float] estimated net rating
|
|
84
|
+
attribute :e_net_rating, Shale::Type::Float
|
|
85
|
+
|
|
86
|
+
# @!attribute [rw] e_ast_ratio
|
|
87
|
+
# Returns estimated assist ratio
|
|
88
|
+
# @api public
|
|
89
|
+
# @example
|
|
90
|
+
# stat.e_ast_ratio #=> 25.5
|
|
91
|
+
# @return [Float] estimated assist ratio
|
|
92
|
+
attribute :e_ast_ratio, Shale::Type::Float
|
|
93
|
+
|
|
94
|
+
# @!attribute [rw] e_oreb_pct
|
|
95
|
+
# Returns estimated offensive rebound percentage
|
|
96
|
+
# @api public
|
|
97
|
+
# @example
|
|
98
|
+
# stat.e_oreb_pct #=> 2.5
|
|
99
|
+
# @return [Float] estimated offensive rebound percentage
|
|
100
|
+
attribute :e_oreb_pct, Shale::Type::Float
|
|
101
|
+
|
|
102
|
+
# @!attribute [rw] e_dreb_pct
|
|
103
|
+
# Returns estimated defensive rebound percentage
|
|
104
|
+
# @api public
|
|
105
|
+
# @example
|
|
106
|
+
# stat.e_dreb_pct #=> 15.5
|
|
107
|
+
# @return [Float] estimated defensive rebound percentage
|
|
108
|
+
attribute :e_dreb_pct, Shale::Type::Float
|
|
109
|
+
|
|
110
|
+
# @!attribute [rw] e_reb_pct
|
|
111
|
+
# Returns estimated rebound percentage
|
|
112
|
+
# @api public
|
|
113
|
+
# @example
|
|
114
|
+
# stat.e_reb_pct #=> 9.5
|
|
115
|
+
# @return [Float] estimated rebound percentage
|
|
116
|
+
attribute :e_reb_pct, Shale::Type::Float
|
|
117
|
+
|
|
118
|
+
# @!attribute [rw] e_tov_pct
|
|
119
|
+
# Returns estimated turnover percentage
|
|
120
|
+
# @api public
|
|
121
|
+
# @example
|
|
122
|
+
# stat.e_tov_pct #=> 11.5
|
|
123
|
+
# @return [Float] estimated turnover percentage
|
|
124
|
+
attribute :e_tov_pct, Shale::Type::Float
|
|
125
|
+
|
|
126
|
+
# @!attribute [rw] e_usg_pct
|
|
127
|
+
# Returns estimated usage percentage
|
|
128
|
+
# @api public
|
|
129
|
+
# @example
|
|
130
|
+
# stat.e_usg_pct #=> 31.5
|
|
131
|
+
# @return [Float] estimated usage percentage
|
|
132
|
+
attribute :e_usg_pct, Shale::Type::Float
|
|
133
|
+
|
|
134
|
+
# @!attribute [rw] e_pace
|
|
135
|
+
# Returns estimated pace
|
|
136
|
+
# @api public
|
|
137
|
+
# @example
|
|
138
|
+
# stat.e_pace #=> 101.5
|
|
139
|
+
# @return [Float] estimated pace
|
|
140
|
+
attribute :e_pace, Shale::Type::Float
|
|
141
|
+
|
|
142
|
+
# Returns the player object
|
|
143
|
+
#
|
|
144
|
+
# @api public
|
|
145
|
+
# @example
|
|
146
|
+
# stat.player #=> #<NBA::Player>
|
|
147
|
+
# @return [Player, nil] the player object
|
|
148
|
+
def player
|
|
149
|
+
Players.find(player_id)
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
require "equalizer"
|
|
2
|
+
require "shale"
|
|
3
|
+
require_relative "players"
|
|
4
|
+
|
|
5
|
+
module NBA
|
|
6
|
+
# Represents a player's fantasy profile statistics
|
|
7
|
+
#
|
|
8
|
+
# @api public
|
|
9
|
+
class FantasyProfileStat < Shale::Mapper
|
|
10
|
+
include Equalizer.new(:player_id, :player_name)
|
|
11
|
+
|
|
12
|
+
# @!attribute [rw] player_id
|
|
13
|
+
# Returns the player ID
|
|
14
|
+
# @api public
|
|
15
|
+
# @example
|
|
16
|
+
# stat.player_id #=> 201939
|
|
17
|
+
# @return [Integer, nil] the player's ID
|
|
18
|
+
attribute :player_id, Shale::Type::Integer
|
|
19
|
+
|
|
20
|
+
# @!attribute [rw] player_name
|
|
21
|
+
# Returns the player name
|
|
22
|
+
# @api public
|
|
23
|
+
# @example
|
|
24
|
+
# stat.player_name #=> "Stephen Curry"
|
|
25
|
+
# @return [String, nil] the player's name
|
|
26
|
+
attribute :player_name, Shale::Type::String
|
|
27
|
+
|
|
28
|
+
# @!attribute [rw] team_id
|
|
29
|
+
# Returns the team ID
|
|
30
|
+
# @api public
|
|
31
|
+
# @example
|
|
32
|
+
# stat.team_id #=> 1610612744
|
|
33
|
+
# @return [Integer, nil] the team's ID
|
|
34
|
+
attribute :team_id, Shale::Type::Integer
|
|
35
|
+
|
|
36
|
+
# @!attribute [rw] team_abbreviation
|
|
37
|
+
# Returns the team abbreviation
|
|
38
|
+
# @api public
|
|
39
|
+
# @example
|
|
40
|
+
# stat.team_abbreviation #=> "GSW"
|
|
41
|
+
# @return [String, nil] the team's abbreviation
|
|
42
|
+
attribute :team_abbreviation, Shale::Type::String
|
|
43
|
+
|
|
44
|
+
# @!attribute [rw] fan_duel_pts
|
|
45
|
+
# Returns FanDuel fantasy points
|
|
46
|
+
# @api public
|
|
47
|
+
# @example
|
|
48
|
+
# stat.fan_duel_pts #=> 45.2
|
|
49
|
+
# @return [Float, nil] FanDuel fantasy points
|
|
50
|
+
attribute :fan_duel_pts, Shale::Type::Float
|
|
51
|
+
|
|
52
|
+
# @!attribute [rw] nba_fantasy_pts
|
|
53
|
+
# Returns NBA Fantasy points
|
|
54
|
+
# @api public
|
|
55
|
+
# @example
|
|
56
|
+
# stat.nba_fantasy_pts #=> 52.1
|
|
57
|
+
# @return [Float, nil] NBA Fantasy points
|
|
58
|
+
attribute :nba_fantasy_pts, Shale::Type::Float
|
|
59
|
+
|
|
60
|
+
# @!attribute [rw] pts
|
|
61
|
+
# Returns points per game
|
|
62
|
+
# @api public
|
|
63
|
+
# @example
|
|
64
|
+
# stat.pts #=> 26.4
|
|
65
|
+
# @return [Float, nil] points per game
|
|
66
|
+
attribute :pts, Shale::Type::Float
|
|
67
|
+
|
|
68
|
+
# @!attribute [rw] reb
|
|
69
|
+
# Returns rebounds per game
|
|
70
|
+
# @api public
|
|
71
|
+
# @example
|
|
72
|
+
# stat.reb #=> 5.7
|
|
73
|
+
# @return [Float, nil] rebounds per game
|
|
74
|
+
attribute :reb, Shale::Type::Float
|
|
75
|
+
|
|
76
|
+
# @!attribute [rw] ast
|
|
77
|
+
# Returns assists per game
|
|
78
|
+
# @api public
|
|
79
|
+
# @example
|
|
80
|
+
# stat.ast #=> 6.1
|
|
81
|
+
# @return [Float, nil] assists per game
|
|
82
|
+
attribute :ast, Shale::Type::Float
|
|
83
|
+
|
|
84
|
+
# @!attribute [rw] fg3m
|
|
85
|
+
# Returns 3-point field goals made
|
|
86
|
+
# @api public
|
|
87
|
+
# @example
|
|
88
|
+
# stat.fg3m #=> 4.8
|
|
89
|
+
# @return [Float, nil] 3-point field goals made
|
|
90
|
+
attribute :fg3m, Shale::Type::Float
|
|
91
|
+
|
|
92
|
+
# @!attribute [rw] fg_pct
|
|
93
|
+
# Returns field goal percentage
|
|
94
|
+
# @api public
|
|
95
|
+
# @example
|
|
96
|
+
# stat.fg_pct #=> 0.472
|
|
97
|
+
# @return [Float, nil] field goal percentage
|
|
98
|
+
attribute :fg_pct, Shale::Type::Float
|
|
99
|
+
|
|
100
|
+
# @!attribute [rw] ft_pct
|
|
101
|
+
# Returns free throw percentage
|
|
102
|
+
# @api public
|
|
103
|
+
# @example
|
|
104
|
+
# stat.ft_pct #=> 0.908
|
|
105
|
+
# @return [Float, nil] free throw percentage
|
|
106
|
+
attribute :ft_pct, Shale::Type::Float
|
|
107
|
+
|
|
108
|
+
# @!attribute [rw] stl
|
|
109
|
+
# Returns steals per game
|
|
110
|
+
# @api public
|
|
111
|
+
# @example
|
|
112
|
+
# stat.stl #=> 1.2
|
|
113
|
+
# @return [Float, nil] steals per game
|
|
114
|
+
attribute :stl, Shale::Type::Float
|
|
115
|
+
|
|
116
|
+
# @!attribute [rw] blk
|
|
117
|
+
# Returns blocks per game
|
|
118
|
+
# @api public
|
|
119
|
+
# @example
|
|
120
|
+
# stat.blk #=> 0.3
|
|
121
|
+
# @return [Float, nil] blocks per game
|
|
122
|
+
attribute :blk, Shale::Type::Float
|
|
123
|
+
|
|
124
|
+
# @!attribute [rw] tov
|
|
125
|
+
# Returns turnovers per game
|
|
126
|
+
# @api public
|
|
127
|
+
# @example
|
|
128
|
+
# stat.tov #=> 3.1
|
|
129
|
+
# @return [Float, nil] turnovers per game
|
|
130
|
+
attribute :tov, Shale::Type::Float
|
|
131
|
+
|
|
132
|
+
# Returns the player
|
|
133
|
+
#
|
|
134
|
+
# @api public
|
|
135
|
+
# @example
|
|
136
|
+
# stat.player #=> #<NBA::Player id=201939 ...>
|
|
137
|
+
# @return [Player, nil] the player object
|
|
138
|
+
def player
|
|
139
|
+
Players.find(player_id)
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
require "json"
|
|
2
|
+
require_relative "client"
|
|
3
|
+
require_relative "collection"
|
|
4
|
+
require_relative "fantasy_widget_player"
|
|
5
|
+
require_relative "league"
|
|
6
|
+
require_relative "response_parser"
|
|
7
|
+
require_relative "utils"
|
|
8
|
+
|
|
9
|
+
module NBA
|
|
10
|
+
# Provides methods to retrieve NBA fantasy widget statistics
|
|
11
|
+
module FantasyWidget
|
|
12
|
+
# Result set name for fantasy widget
|
|
13
|
+
# @return [String] the result set name
|
|
14
|
+
RESULT_SET = "FantasyWidgetResult".freeze
|
|
15
|
+
|
|
16
|
+
# Retrieves fantasy widget player statistics
|
|
17
|
+
#
|
|
18
|
+
# @api public
|
|
19
|
+
# @example
|
|
20
|
+
# players = NBA::FantasyWidget.all(season: 2023)
|
|
21
|
+
# players.each { |p| puts "#{p.player_name}: #{p.fan_duel_pts}" }
|
|
22
|
+
# @param season [Integer] the season year (defaults to current season)
|
|
23
|
+
# @param season_type [String] the season type (Regular Season, Playoffs, etc.)
|
|
24
|
+
# @param active_players [String] active players filter (Y, N)
|
|
25
|
+
# @param last_n_games [Integer] filter to last N games
|
|
26
|
+
# @param league [String, League] the league ID or League object
|
|
27
|
+
# @param client [Client] the API client to use
|
|
28
|
+
# @return [Collection] a collection of fantasy widget players
|
|
29
|
+
def self.all(season: Utils.current_season, season_type: "Regular Season",
|
|
30
|
+
active_players: "Y", last_n_games: 0, league: League::NBA, client: CLIENT)
|
|
31
|
+
league_id = Utils.extract_league_id(league)
|
|
32
|
+
opts = {season: season, season_type: season_type, active_players: active_players,
|
|
33
|
+
last_n_games: last_n_games, league_id: league_id}
|
|
34
|
+
ResponseParser.parse(client.get(build_path(opts)), result_set: RESULT_SET) do |data|
|
|
35
|
+
build_player(data)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Builds the API request path
|
|
40
|
+
# @api private
|
|
41
|
+
# @return [String] the request path
|
|
42
|
+
def self.build_path(opts)
|
|
43
|
+
"fantasywidget?ActivePlayers=#{opts[:active_players]}&LastNGames=#{opts[:last_n_games]}" \
|
|
44
|
+
"&LeagueID=#{opts[:league_id]}&Season=#{Utils.format_season(opts[:season])}" \
|
|
45
|
+
"&SeasonType=#{opts[:season_type]}"
|
|
46
|
+
end
|
|
47
|
+
private_class_method :build_path
|
|
48
|
+
|
|
49
|
+
# Builds a FantasyWidgetPlayer object from raw data
|
|
50
|
+
# @api private
|
|
51
|
+
# @param data [Hash] the row data
|
|
52
|
+
# @return [FantasyWidgetPlayer] the player object
|
|
53
|
+
def self.build_player(data)
|
|
54
|
+
FantasyWidgetPlayer.new(**player_attributes(data))
|
|
55
|
+
end
|
|
56
|
+
private_class_method :build_player
|
|
57
|
+
|
|
58
|
+
# Extracts player attributes from data
|
|
59
|
+
# @api private
|
|
60
|
+
# @param data [Hash] the row data
|
|
61
|
+
# @return [Hash] player attributes
|
|
62
|
+
def self.player_attributes(data)
|
|
63
|
+
{player_id: data["PLAYER_ID"], player_name: data["PLAYER_NAME"],
|
|
64
|
+
player_position: data["PLAYER_POSITION"], team_id: data["TEAM_ID"],
|
|
65
|
+
team_abbreviation: data["TEAM_ABBREVIATION"], gp: data["GP"],
|
|
66
|
+
min: data["MIN"], fan_duel_pts: data["FAN_DUEL_PTS"],
|
|
67
|
+
nba_fantasy_pts: data["NBA_FANTASY_PTS"], pts: data["PTS"],
|
|
68
|
+
reb: data["REB"], ast: data["AST"]}
|
|
69
|
+
end
|
|
70
|
+
private_class_method :player_attributes
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
require "equalizer"
|
|
2
|
+
require "shale"
|
|
3
|
+
|
|
4
|
+
module NBA
|
|
5
|
+
# Represents a player's fantasy statistics from the fantasy widget
|
|
6
|
+
#
|
|
7
|
+
# @api public
|
|
8
|
+
# @example
|
|
9
|
+
# player.player_name #=> "Stephen Curry"
|
|
10
|
+
# player.fan_duel_pts #=> 45.2
|
|
11
|
+
class FantasyWidgetPlayer < Shale::Mapper
|
|
12
|
+
include Equalizer.new(:player_id)
|
|
13
|
+
|
|
14
|
+
# Returns the player ID
|
|
15
|
+
# @api public
|
|
16
|
+
# @example
|
|
17
|
+
# player.player_id #=> 201939
|
|
18
|
+
# @return [Integer, nil] the player ID
|
|
19
|
+
attribute :player_id, Shale::Type::Integer
|
|
20
|
+
|
|
21
|
+
# Returns the player name
|
|
22
|
+
# @api public
|
|
23
|
+
# @example
|
|
24
|
+
# player.player_name #=> "Stephen Curry"
|
|
25
|
+
# @return [String, nil] the player name
|
|
26
|
+
attribute :player_name, Shale::Type::String
|
|
27
|
+
|
|
28
|
+
# Returns the player position
|
|
29
|
+
# @api public
|
|
30
|
+
# @example
|
|
31
|
+
# player.player_position #=> "G"
|
|
32
|
+
# @return [String, nil] the player position
|
|
33
|
+
attribute :player_position, Shale::Type::String
|
|
34
|
+
|
|
35
|
+
# Returns the team ID
|
|
36
|
+
# @api public
|
|
37
|
+
# @example
|
|
38
|
+
# player.team_id #=> 1610612744
|
|
39
|
+
# @return [Integer, nil] the team ID
|
|
40
|
+
attribute :team_id, Shale::Type::Integer
|
|
41
|
+
|
|
42
|
+
# Returns the team abbreviation
|
|
43
|
+
# @api public
|
|
44
|
+
# @example
|
|
45
|
+
# player.team_abbreviation #=> "GSW"
|
|
46
|
+
# @return [String, nil] the team abbreviation
|
|
47
|
+
attribute :team_abbreviation, Shale::Type::String
|
|
48
|
+
|
|
49
|
+
# Returns games played
|
|
50
|
+
# @api public
|
|
51
|
+
# @example
|
|
52
|
+
# player.gp #=> 74
|
|
53
|
+
# @return [Integer, nil] games played
|
|
54
|
+
attribute :gp, Shale::Type::Integer
|
|
55
|
+
|
|
56
|
+
# Returns minutes played
|
|
57
|
+
# @api public
|
|
58
|
+
# @example
|
|
59
|
+
# player.min #=> 32.7
|
|
60
|
+
# @return [Float, nil] minutes played
|
|
61
|
+
attribute :min, Shale::Type::Float
|
|
62
|
+
|
|
63
|
+
# Returns FanDuel points
|
|
64
|
+
# @api public
|
|
65
|
+
# @example
|
|
66
|
+
# player.fan_duel_pts #=> 45.2
|
|
67
|
+
# @return [Float, nil] FanDuel points
|
|
68
|
+
attribute :fan_duel_pts, Shale::Type::Float
|
|
69
|
+
|
|
70
|
+
# Returns NBA fantasy points
|
|
71
|
+
# @api public
|
|
72
|
+
# @example
|
|
73
|
+
# player.nba_fantasy_pts #=> 52.8
|
|
74
|
+
# @return [Float, nil] NBA fantasy points
|
|
75
|
+
attribute :nba_fantasy_pts, Shale::Type::Float
|
|
76
|
+
|
|
77
|
+
# Returns points
|
|
78
|
+
# @api public
|
|
79
|
+
# @example
|
|
80
|
+
# player.pts #=> 26.4
|
|
81
|
+
# @return [Float, nil] points
|
|
82
|
+
attribute :pts, Shale::Type::Float
|
|
83
|
+
|
|
84
|
+
# Returns rebounds
|
|
85
|
+
# @api public
|
|
86
|
+
# @example
|
|
87
|
+
# player.reb #=> 5.1
|
|
88
|
+
# @return [Float, nil] rebounds
|
|
89
|
+
attribute :reb, Shale::Type::Float
|
|
90
|
+
|
|
91
|
+
# Returns assists
|
|
92
|
+
# @api public
|
|
93
|
+
# @example
|
|
94
|
+
# player.ast #=> 6.3
|
|
95
|
+
# @return [Float, nil] assists
|
|
96
|
+
attribute :ast, Shale::Type::Float
|
|
97
|
+
end
|
|
98
|
+
end
|