nhl-api-py 3.2.3__tar.gz → 3.4.0__tar.gz
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.
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/PKG-INFO +35 -1
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/README.md +34 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/edge.py +195 -0
- nhl_api_py-3.4.0/nhlpy/api/game_center.py +214 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/helpers.py +63 -12
- nhl_api_py-3.4.0/nhlpy/api/misc.py +108 -0
- nhl_api_py-3.4.0/nhlpy/api/players.py +68 -0
- nhl_api_py-3.4.0/nhlpy/api/records.py +446 -0
- nhl_api_py-3.4.0/nhlpy/api/schedule.py +302 -0
- nhl_api_py-3.4.0/nhlpy/api/standings.py +94 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/stats.py +100 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/teams.py +71 -19
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/http_client.py +1 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/nhl_client.py +2 -1
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/pyproject.toml +1 -1
- nhl_api_py-3.2.3/nhlpy/api/game_center.py +0 -100
- nhl_api_py-3.2.3/nhlpy/api/misc.py +0 -52
- nhl_api_py-3.2.3/nhlpy/api/players.py +0 -35
- nhl_api_py-3.2.3/nhlpy/api/schedule.py +0 -164
- nhl_api_py-3.2.3/nhlpy/api/standings.py +0 -65
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/LICENSE +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/__init__.py +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/__init__.py +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/__init__.py +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/builder.py +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/__init__.py +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/decision.py +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/draft.py +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/experience.py +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/franchise.py +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/game_type.py +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/home_road.py +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/nationality.py +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/opponent.py +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/position.py +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/season.py +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/shoot_catch.py +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/filters/status.py +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/sorting/__init__.py +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/api/query/sorting/sorting_options.py +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/config.py +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/data/seasonal_information_manifest.json +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/data/team_stat_ids.json +0 -0
- {nhl_api_py-3.2.3 → nhl_api_py-3.4.0}/nhlpy/data/teams_20232024.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: nhl-api-py
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.4.0
|
|
4
4
|
Summary: NHL API (Updated for 2025/2026) and EDGE Stats. For standings, team stats, outcomes, player information. Contains each individual API endpoint as well as convience methods as well as pythonic query builder for more indepth EDGE stats.
|
|
5
5
|
Home-page: https://github.com/coreyjs/nhl-api-py
|
|
6
6
|
License: Apache-2.0
|
|
@@ -43,6 +43,7 @@ Description-Content-Type: text/markdown
|
|
|
43
43
|
- [Standings](#standings)
|
|
44
44
|
- [Game Center](#game-center)
|
|
45
45
|
- [Misc](#misc)
|
|
46
|
+
- [Records](#records)
|
|
46
47
|
- [Advanced Usage](#advanced-usage)
|
|
47
48
|
- [Query Builder](#stats-with-querybuilder)
|
|
48
49
|
- [Examples & Wiki](#examples--wiki)
|
|
@@ -59,6 +60,12 @@ Note: I created this to help me with some machine learning
|
|
|
59
60
|
projects around the NHL and the NHL data sets. Special thanks to https://github.com/erunion/sport-api-specifications/tree/master/nhl,
|
|
60
61
|
https://gitlab.com/dword4/nhlapi/-/blob/master/stats-api.md and https://github.com/Zmalski/NHL-API-Reference.
|
|
61
62
|
|
|
63
|
+
### AI Note:
|
|
64
|
+
|
|
65
|
+
This library was written by hand before the advent of agentic coding. Going forward this repo will continue to be
|
|
66
|
+
developed with an engineer first approach. Any agentic tools will be used for architectural reviews or general code reviews.
|
|
67
|
+
AI heavy PRs will not be accepted, but we are open to any discussion that makes this library better for the user.
|
|
68
|
+
|
|
62
69
|
### Developer Note: This is being updated with the new, also undocumented, NHL API.
|
|
63
70
|
|
|
64
71
|
This started as a project around the old NHL API, that got deprecated in 2023(?). This project has evolved
|
|
@@ -135,6 +142,7 @@ They are grouped by function to make the library easier to navigate and use. Th
|
|
|
135
142
|
- **`game_center`**: Contains endpoints related to game center data, including box scores, play-by-play data, and game summaries.
|
|
136
143
|
- **`misc`**: Contains miscellaneous endpoints that don't fit into the other categories, such as glossary terms, configuration data, and country information.
|
|
137
144
|
- **`players`**: Get Players by team and prospects.
|
|
145
|
+
- **`records`**: Historical data from the NHL Records API: franchise history, the full draft history, attendance, venues, and hundreds of record lists (streaks, fastest goals, etc.).
|
|
138
146
|
### Helpers Module
|
|
139
147
|
- **`helpers`**: Contains helper functions and utilities for working with the NHL API, such as getting game IDs by season or calculating player statistics. These are experimental and often times make many requests, can return DataFrames or do calculations. Stuff I find myself doing over and over I tend to move into helpers for convenience. They are often cross domain, involve many sub requests, may integrate more machine learning techniques, or just make it easier to get the data you want. These will have built in sleeping to avoid hitting the API too hard, but you can override this by setting the `sleep` parameter to `False` in the function call.
|
|
140
148
|
|
|
@@ -717,6 +725,32 @@ for term in stat_terms:
|
|
|
717
725
|
continue
|
|
718
726
|
```
|
|
719
727
|
|
|
728
|
+
---
|
|
729
|
+
|
|
730
|
+
# Records
|
|
731
|
+
|
|
732
|
+
Historical data from the NHL Records API (`records.nhl.com`). Curated methods return a list of rows; `query()` reaches any of the ~445 records endpoints by name. See [docs/records.md](docs/records.md) for every method and the full endpoint catalog.
|
|
733
|
+
|
|
734
|
+
```python
|
|
735
|
+
# Franchise history
|
|
736
|
+
franchises = client.records.franchises()
|
|
737
|
+
sabres = client.records.franchise_detail(team_id=7)
|
|
738
|
+
totals = client.records.franchise_totals(game_type_id=2, sort="wins")
|
|
739
|
+
seasons = client.records.franchise_season_results(franchise_id=19, game_type_id=2)
|
|
740
|
+
|
|
741
|
+
# Draft history (back to 1963)
|
|
742
|
+
first_round = client.records.draft(draft_year=2024, round_number=1, sort=[("overallPickNumber", "ASC")])
|
|
743
|
+
sabres_picks = client.records.draft_by_team(team_id=7)
|
|
744
|
+
|
|
745
|
+
# Any records endpoint, with Cayenne filters, sorting and pagination
|
|
746
|
+
top_scorers = client.records.query(
|
|
747
|
+
"skater-career-scoring-regular-season", cayenne_exp="franchiseId=19", sort="points", limit=10
|
|
748
|
+
)
|
|
749
|
+
streaks = client.records.query("goalie-shutout-streak", limit=10)
|
|
750
|
+
```
|
|
751
|
+
|
|
752
|
+
Note: without a `limit`, records endpoints return every row, which can be large (e.g. the full draft is ~8 MB).
|
|
753
|
+
|
|
720
754
|
---
|
|
721
755
|
# Advanced Usage
|
|
722
756
|
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
- [Standings](#standings)
|
|
16
16
|
- [Game Center](#game-center)
|
|
17
17
|
- [Misc](#misc)
|
|
18
|
+
- [Records](#records)
|
|
18
19
|
- [Advanced Usage](#advanced-usage)
|
|
19
20
|
- [Query Builder](#stats-with-querybuilder)
|
|
20
21
|
- [Examples & Wiki](#examples--wiki)
|
|
@@ -31,6 +32,12 @@ Note: I created this to help me with some machine learning
|
|
|
31
32
|
projects around the NHL and the NHL data sets. Special thanks to https://github.com/erunion/sport-api-specifications/tree/master/nhl,
|
|
32
33
|
https://gitlab.com/dword4/nhlapi/-/blob/master/stats-api.md and https://github.com/Zmalski/NHL-API-Reference.
|
|
33
34
|
|
|
35
|
+
### AI Note:
|
|
36
|
+
|
|
37
|
+
This library was written by hand before the advent of agentic coding. Going forward this repo will continue to be
|
|
38
|
+
developed with an engineer first approach. Any agentic tools will be used for architectural reviews or general code reviews.
|
|
39
|
+
AI heavy PRs will not be accepted, but we are open to any discussion that makes this library better for the user.
|
|
40
|
+
|
|
34
41
|
### Developer Note: This is being updated with the new, also undocumented, NHL API.
|
|
35
42
|
|
|
36
43
|
This started as a project around the old NHL API, that got deprecated in 2023(?). This project has evolved
|
|
@@ -107,6 +114,7 @@ They are grouped by function to make the library easier to navigate and use. Th
|
|
|
107
114
|
- **`game_center`**: Contains endpoints related to game center data, including box scores, play-by-play data, and game summaries.
|
|
108
115
|
- **`misc`**: Contains miscellaneous endpoints that don't fit into the other categories, such as glossary terms, configuration data, and country information.
|
|
109
116
|
- **`players`**: Get Players by team and prospects.
|
|
117
|
+
- **`records`**: Historical data from the NHL Records API: franchise history, the full draft history, attendance, venues, and hundreds of record lists (streaks, fastest goals, etc.).
|
|
110
118
|
### Helpers Module
|
|
111
119
|
- **`helpers`**: Contains helper functions and utilities for working with the NHL API, such as getting game IDs by season or calculating player statistics. These are experimental and often times make many requests, can return DataFrames or do calculations. Stuff I find myself doing over and over I tend to move into helpers for convenience. They are often cross domain, involve many sub requests, may integrate more machine learning techniques, or just make it easier to get the data you want. These will have built in sleeping to avoid hitting the API too hard, but you can override this by setting the `sleep` parameter to `False` in the function call.
|
|
112
120
|
|
|
@@ -689,6 +697,32 @@ for term in stat_terms:
|
|
|
689
697
|
continue
|
|
690
698
|
```
|
|
691
699
|
|
|
700
|
+
---
|
|
701
|
+
|
|
702
|
+
# Records
|
|
703
|
+
|
|
704
|
+
Historical data from the NHL Records API (`records.nhl.com`). Curated methods return a list of rows; `query()` reaches any of the ~445 records endpoints by name. See [docs/records.md](docs/records.md) for every method and the full endpoint catalog.
|
|
705
|
+
|
|
706
|
+
```python
|
|
707
|
+
# Franchise history
|
|
708
|
+
franchises = client.records.franchises()
|
|
709
|
+
sabres = client.records.franchise_detail(team_id=7)
|
|
710
|
+
totals = client.records.franchise_totals(game_type_id=2, sort="wins")
|
|
711
|
+
seasons = client.records.franchise_season_results(franchise_id=19, game_type_id=2)
|
|
712
|
+
|
|
713
|
+
# Draft history (back to 1963)
|
|
714
|
+
first_round = client.records.draft(draft_year=2024, round_number=1, sort=[("overallPickNumber", "ASC")])
|
|
715
|
+
sabres_picks = client.records.draft_by_team(team_id=7)
|
|
716
|
+
|
|
717
|
+
# Any records endpoint, with Cayenne filters, sorting and pagination
|
|
718
|
+
top_scorers = client.records.query(
|
|
719
|
+
"skater-career-scoring-regular-season", cayenne_exp="franchiseId=19", sort="points", limit=10
|
|
720
|
+
)
|
|
721
|
+
streaks = client.records.query("goalie-shutout-streak", limit=10)
|
|
722
|
+
```
|
|
723
|
+
|
|
724
|
+
Note: without a `limit`, records endpoints return every row, which can be large (e.g. the full draft is ~8 MB).
|
|
725
|
+
|
|
692
726
|
---
|
|
693
727
|
# Advanced Usage
|
|
694
728
|
|
|
@@ -27,6 +27,19 @@ class Edge:
|
|
|
27
27
|
Returns:
|
|
28
28
|
dict: Dictionary containing detailed EDGE statistics for the skater
|
|
29
29
|
|
|
30
|
+
Key Response Fields:
|
|
31
|
+
player.firstName.default (str): Player first name
|
|
32
|
+
player.lastName.default (str): Player last name
|
|
33
|
+
player.goals (int): Total goals scored
|
|
34
|
+
player.points (int): Total points
|
|
35
|
+
topShotSpeed.imperial (float): Top shot speed in mph
|
|
36
|
+
skatingSpeed.speedMax.imperial (float): Maximum skating speed in mph
|
|
37
|
+
totalDistanceSkated.imperial (float): Total distance skated in miles
|
|
38
|
+
zoneTimeDetails.offensiveZonePctg (float): Offensive zone time percentage
|
|
39
|
+
|
|
40
|
+
Response Docs:
|
|
41
|
+
docs/edge.md
|
|
42
|
+
|
|
30
43
|
Example:
|
|
31
44
|
client.edge.skater_detail(player_id=8478402)
|
|
32
45
|
client.edge.skater_detail(player_id=8478402, season=20232024, game_type=2)
|
|
@@ -47,6 +60,14 @@ class Edge:
|
|
|
47
60
|
|
|
48
61
|
Returns:
|
|
49
62
|
dict: Shot speed statistics including maximum and average speeds
|
|
63
|
+
|
|
64
|
+
Key Response Fields:
|
|
65
|
+
shotSpeedData (list): Shot speed entries with percentiles
|
|
66
|
+
topShotSpeed.imperial (float): Top shot speed in mph
|
|
67
|
+
averageShotSpeed.imperial (float): Average shot speed in mph
|
|
68
|
+
|
|
69
|
+
Response Docs:
|
|
70
|
+
docs/edge.md
|
|
50
71
|
"""
|
|
51
72
|
if season is None:
|
|
52
73
|
resource = f"edge/skater-shot-speed-detail/{player_id}/now"
|
|
@@ -64,6 +85,14 @@ class Edge:
|
|
|
64
85
|
|
|
65
86
|
Returns:
|
|
66
87
|
dict: Skating speed statistics including burst speed and average speed
|
|
88
|
+
|
|
89
|
+
Key Response Fields:
|
|
90
|
+
skatingSpeedData (list): Skating speed entries with burst counts
|
|
91
|
+
speedMax.imperial (float): Maximum skating speed in mph
|
|
92
|
+
burstCount (int): Number of speed bursts
|
|
93
|
+
|
|
94
|
+
Response Docs:
|
|
95
|
+
docs/edge.md
|
|
67
96
|
"""
|
|
68
97
|
if season is None:
|
|
69
98
|
resource = f"edge/skater-skating-speed-detail/{player_id}/now"
|
|
@@ -81,6 +110,14 @@ class Edge:
|
|
|
81
110
|
|
|
82
111
|
Returns:
|
|
83
112
|
dict: Shot location data including shooting patterns and heat maps
|
|
113
|
+
|
|
114
|
+
Key Response Fields:
|
|
115
|
+
shotLocations (list): Shot data grouped by area
|
|
116
|
+
area (str): Ice zone identifier
|
|
117
|
+
shotCount (int): Number of shots from each area
|
|
118
|
+
|
|
119
|
+
Response Docs:
|
|
120
|
+
docs/edge.md
|
|
84
121
|
"""
|
|
85
122
|
if season is None:
|
|
86
123
|
resource = f"edge/skater-shot-location-detail/{player_id}/now"
|
|
@@ -98,6 +135,14 @@ class Edge:
|
|
|
98
135
|
|
|
99
136
|
Returns:
|
|
100
137
|
dict: Distance traveled statistics per game and per shift
|
|
138
|
+
|
|
139
|
+
Key Response Fields:
|
|
140
|
+
distanceData (list): Distance entries per game
|
|
141
|
+
totalDistance.imperial (float): Total distance skated in miles
|
|
142
|
+
gameMax.imperial (float): Maximum distance skated in a single game in miles
|
|
143
|
+
|
|
144
|
+
Response Docs:
|
|
145
|
+
docs/edge.md
|
|
101
146
|
"""
|
|
102
147
|
if season is None:
|
|
103
148
|
resource = f"edge/skater-skating-distance-detail/{player_id}/now"
|
|
@@ -115,6 +160,14 @@ class Edge:
|
|
|
115
160
|
|
|
116
161
|
Returns:
|
|
117
162
|
dict: Comparison data relative to league averages
|
|
163
|
+
|
|
164
|
+
Key Response Fields:
|
|
165
|
+
comparisonData (list): Comparison metrics vs league
|
|
166
|
+
leagueAverage (float): League average value for each metric
|
|
167
|
+
playerValue (float): Player value for each metric
|
|
168
|
+
|
|
169
|
+
Response Docs:
|
|
170
|
+
docs/edge.md
|
|
118
171
|
"""
|
|
119
172
|
if season is None:
|
|
120
173
|
resource = f"edge/skater-comparison/{player_id}/now"
|
|
@@ -132,6 +185,14 @@ class Edge:
|
|
|
132
185
|
|
|
133
186
|
Returns:
|
|
134
187
|
dict: Time spent in offensive, defensive, and neutral zones
|
|
188
|
+
|
|
189
|
+
Key Response Fields:
|
|
190
|
+
offensiveZonePctg (float): Offensive zone time percentage
|
|
191
|
+
defensiveZonePctg (float): Defensive zone time percentage
|
|
192
|
+
neutralZonePctg (float): Neutral zone time percentage
|
|
193
|
+
|
|
194
|
+
Response Docs:
|
|
195
|
+
docs/edge.md
|
|
135
196
|
"""
|
|
136
197
|
if season is None:
|
|
137
198
|
resource = f"edge/skater-zone-time/{player_id}/now"
|
|
@@ -150,6 +211,14 @@ class Edge:
|
|
|
150
211
|
|
|
151
212
|
Returns:
|
|
152
213
|
dict: Overview of league-wide skater EDGE statistics
|
|
214
|
+
|
|
215
|
+
Key Response Fields:
|
|
216
|
+
leaders.hardestShot (list): League leaders for hardest shot
|
|
217
|
+
leaders.maxSkatingSpeed (list): League leaders for max skating speed
|
|
218
|
+
leaders.totalDistanceSkated (list): League leaders for total distance skated
|
|
219
|
+
|
|
220
|
+
Response Docs:
|
|
221
|
+
docs/edge.md
|
|
153
222
|
"""
|
|
154
223
|
if season is None:
|
|
155
224
|
resource = "edge/skater-landing/now"
|
|
@@ -167,6 +236,14 @@ class Edge:
|
|
|
167
236
|
|
|
168
237
|
Returns:
|
|
169
238
|
dict: CAT EDGE statistics for the skater
|
|
239
|
+
|
|
240
|
+
Key Response Fields:
|
|
241
|
+
player (dict): Compact player summary with EDGE highlights
|
|
242
|
+
shotSpeed (dict): Condensed shot speed data
|
|
243
|
+
skatingSpeed (dict): Condensed skating speed data
|
|
244
|
+
|
|
245
|
+
Response Docs:
|
|
246
|
+
docs/edge.md
|
|
170
247
|
"""
|
|
171
248
|
if season is None:
|
|
172
249
|
resource = f"cat/edge/skater-detail/{player_id}/now"
|
|
@@ -194,6 +271,16 @@ class Edge:
|
|
|
194
271
|
Returns:
|
|
195
272
|
dict: Dictionary containing detailed EDGE statistics for the goalie
|
|
196
273
|
|
|
274
|
+
Key Response Fields:
|
|
275
|
+
player.wins (int): Total wins
|
|
276
|
+
player.savePctg (float): Overall save percentage
|
|
277
|
+
stats.goalsAgainstAvg.value (float): Goals against average
|
|
278
|
+
stats.gamesAbove900.value (float): Games with save pct above .900
|
|
279
|
+
shotLocationSummary (list): Save data grouped by shot area
|
|
280
|
+
|
|
281
|
+
Response Docs:
|
|
282
|
+
docs/edge.md
|
|
283
|
+
|
|
197
284
|
Example:
|
|
198
285
|
client.edge.goalie_detail(player_id=8476945)
|
|
199
286
|
client.edge.goalie_detail(player_id=8476945, season=20232024, game_type=2)
|
|
@@ -214,6 +301,14 @@ class Edge:
|
|
|
214
301
|
|
|
215
302
|
Returns:
|
|
216
303
|
dict: Shot location data faced by the goalie including save percentages by zone
|
|
304
|
+
|
|
305
|
+
Key Response Fields:
|
|
306
|
+
shotLocations (list): Save data grouped by shot location
|
|
307
|
+
area (str): Ice zone identifier
|
|
308
|
+
savePctg (float): Save percentage for each area
|
|
309
|
+
|
|
310
|
+
Response Docs:
|
|
311
|
+
docs/edge.md
|
|
217
312
|
"""
|
|
218
313
|
if season is None:
|
|
219
314
|
resource = f"edge/goalie-shot-location-detail/{player_id}/now"
|
|
@@ -231,6 +326,14 @@ class Edge:
|
|
|
231
326
|
|
|
232
327
|
Returns:
|
|
233
328
|
dict: 5-on-5 performance statistics and save percentages
|
|
329
|
+
|
|
330
|
+
Key Response Fields:
|
|
331
|
+
fiveOnFiveStats (dict): 5-on-5 performance metrics
|
|
332
|
+
savePctg5v5 (float): Save percentage at 5-on-5
|
|
333
|
+
goalsAgainstAvg5v5 (float): Goals against average at 5-on-5
|
|
334
|
+
|
|
335
|
+
Response Docs:
|
|
336
|
+
docs/edge.md
|
|
234
337
|
"""
|
|
235
338
|
if season is None:
|
|
236
339
|
resource = f"edge/goalie-5v5-detail/{player_id}/now"
|
|
@@ -248,6 +351,14 @@ class Edge:
|
|
|
248
351
|
|
|
249
352
|
Returns:
|
|
250
353
|
dict: Comparison data relative to league averages
|
|
354
|
+
|
|
355
|
+
Key Response Fields:
|
|
356
|
+
comparisonData (list): Comparison metrics vs league
|
|
357
|
+
leagueAverage (float): League average value for each metric
|
|
358
|
+
playerValue (float): Player value for each metric
|
|
359
|
+
|
|
360
|
+
Response Docs:
|
|
361
|
+
docs/edge.md
|
|
251
362
|
"""
|
|
252
363
|
if season is None:
|
|
253
364
|
resource = f"edge/goalie-comparison/{player_id}/now"
|
|
@@ -265,6 +376,14 @@ class Edge:
|
|
|
265
376
|
|
|
266
377
|
Returns:
|
|
267
378
|
dict: Detailed save percentage breakdowns by situation and location
|
|
379
|
+
|
|
380
|
+
Key Response Fields:
|
|
381
|
+
savePctgBreakdown (list): Save percentage by situation type
|
|
382
|
+
overallSavePctg (float): Overall save percentage
|
|
383
|
+
highDangerSavePctg (float): Save percentage on high-danger chances
|
|
384
|
+
|
|
385
|
+
Response Docs:
|
|
386
|
+
docs/edge.md
|
|
268
387
|
"""
|
|
269
388
|
if season is None:
|
|
270
389
|
resource = f"edge/goalie-save-percentage-detail/{player_id}/now"
|
|
@@ -283,6 +402,14 @@ class Edge:
|
|
|
283
402
|
|
|
284
403
|
Returns:
|
|
285
404
|
dict: Overview of league-wide goalie EDGE statistics
|
|
405
|
+
|
|
406
|
+
Key Response Fields:
|
|
407
|
+
leaders (dict): League leaders for goalie EDGE stats
|
|
408
|
+
topSavePctg (list): Leaders by save percentage
|
|
409
|
+
topGamesAbove900 (list): Leaders by games above .900
|
|
410
|
+
|
|
411
|
+
Response Docs:
|
|
412
|
+
docs/edge.md
|
|
286
413
|
"""
|
|
287
414
|
if season is None:
|
|
288
415
|
resource = "edge/goalie-landing/now"
|
|
@@ -300,6 +427,14 @@ class Edge:
|
|
|
300
427
|
|
|
301
428
|
Returns:
|
|
302
429
|
dict: CAT EDGE statistics for the goalie
|
|
430
|
+
|
|
431
|
+
Key Response Fields:
|
|
432
|
+
player (dict): Compact goalie summary with EDGE highlights
|
|
433
|
+
savePctg (float): Condensed save percentage data
|
|
434
|
+
goalsAgainstAvg (float): Condensed goals against average
|
|
435
|
+
|
|
436
|
+
Response Docs:
|
|
437
|
+
docs/edge.md
|
|
303
438
|
"""
|
|
304
439
|
if season is None:
|
|
305
440
|
resource = f"cat/edge/goalie-detail/{player_id}/now"
|
|
@@ -327,6 +462,18 @@ class Edge:
|
|
|
327
462
|
Returns:
|
|
328
463
|
dict: Dictionary containing detailed EDGE statistics for the team
|
|
329
464
|
|
|
465
|
+
Key Response Fields:
|
|
466
|
+
team.abbrev (str): Team abbreviation
|
|
467
|
+
team.wins (int): Total wins
|
|
468
|
+
team.points (int): Total points
|
|
469
|
+
shotSpeed.topShotSpeed.imperial (float): Top shot speed in mph
|
|
470
|
+
skatingSpeed.speedMax.imperial (float): Maximum skating speed in mph
|
|
471
|
+
distanceSkated.total.imperial (float): Total distance skated in miles
|
|
472
|
+
zoneTimeDetails.offensiveZonePctg (float): Offensive zone time percentage
|
|
473
|
+
|
|
474
|
+
Response Docs:
|
|
475
|
+
docs/edge.md
|
|
476
|
+
|
|
330
477
|
Example:
|
|
331
478
|
client.edge.team_detail(team_id=10)
|
|
332
479
|
client.edge.team_detail(team_id=10, season=20232024, game_type=2)
|
|
@@ -347,6 +494,14 @@ class Edge:
|
|
|
347
494
|
|
|
348
495
|
Returns:
|
|
349
496
|
dict: Team skating distance statistics per game and per player
|
|
497
|
+
|
|
498
|
+
Key Response Fields:
|
|
499
|
+
distanceData (list): Distance entries per game and per player
|
|
500
|
+
totalDistance.imperial (float): Total team distance skated in miles
|
|
501
|
+
perGameAvg.imperial (float): Average distance per game in miles
|
|
502
|
+
|
|
503
|
+
Response Docs:
|
|
504
|
+
docs/edge.md
|
|
350
505
|
"""
|
|
351
506
|
if season is None:
|
|
352
507
|
resource = f"edge/team-skating-distance-detail/{team_id}/now"
|
|
@@ -364,6 +519,14 @@ class Edge:
|
|
|
364
519
|
|
|
365
520
|
Returns:
|
|
366
521
|
dict: Team time spent in offensive, defensive, and neutral zones
|
|
522
|
+
|
|
523
|
+
Key Response Fields:
|
|
524
|
+
offensiveZonePctg (float): Offensive zone time percentage
|
|
525
|
+
defensiveZonePctg (float): Defensive zone time percentage
|
|
526
|
+
neutralZonePctg (float): Neutral zone time percentage
|
|
527
|
+
|
|
528
|
+
Response Docs:
|
|
529
|
+
docs/edge.md
|
|
367
530
|
"""
|
|
368
531
|
if season is None:
|
|
369
532
|
resource = f"edge/team-zone-time-details/{team_id}/now"
|
|
@@ -381,6 +544,14 @@ class Edge:
|
|
|
381
544
|
|
|
382
545
|
Returns:
|
|
383
546
|
dict: Team shot location data including shooting patterns and heat maps
|
|
547
|
+
|
|
548
|
+
Key Response Fields:
|
|
549
|
+
shotLocations (list): Shot data grouped by area
|
|
550
|
+
area (str): Ice zone identifier
|
|
551
|
+
shotCount (int): Number of shots from each area
|
|
552
|
+
|
|
553
|
+
Response Docs:
|
|
554
|
+
docs/edge.md
|
|
384
555
|
"""
|
|
385
556
|
if season is None:
|
|
386
557
|
resource = f"edge/team-shot-location-detail/{team_id}/now"
|
|
@@ -399,6 +570,14 @@ class Edge:
|
|
|
399
570
|
|
|
400
571
|
Returns:
|
|
401
572
|
dict: Overview of league-wide team EDGE statistics
|
|
573
|
+
|
|
574
|
+
Key Response Fields:
|
|
575
|
+
leaders (dict): Team EDGE leaders across categories
|
|
576
|
+
topShotSpeed (list): Leaders by team shot speed
|
|
577
|
+
topSkatingSpeed (list): Leaders by team skating speed
|
|
578
|
+
|
|
579
|
+
Response Docs:
|
|
580
|
+
docs/edge.md
|
|
402
581
|
"""
|
|
403
582
|
if season is None:
|
|
404
583
|
resource = "edge/team-landing/now"
|
|
@@ -416,6 +595,14 @@ class Edge:
|
|
|
416
595
|
|
|
417
596
|
Returns:
|
|
418
597
|
dict: Team shot speed statistics including maximum and average speeds
|
|
598
|
+
|
|
599
|
+
Key Response Fields:
|
|
600
|
+
shotSpeedData (list): Shot speed entries by player
|
|
601
|
+
topShotSpeed.imperial (float): Top team shot speed in mph
|
|
602
|
+
averageShotSpeed.imperial (float): Average team shot speed in mph
|
|
603
|
+
|
|
604
|
+
Response Docs:
|
|
605
|
+
docs/edge.md
|
|
419
606
|
"""
|
|
420
607
|
if season is None:
|
|
421
608
|
resource = f"edge/team-shot-speed-detail/{team_id}/now"
|
|
@@ -433,6 +620,14 @@ class Edge:
|
|
|
433
620
|
|
|
434
621
|
Returns:
|
|
435
622
|
dict: Team skating speed statistics including burst speed and average speed
|
|
623
|
+
|
|
624
|
+
Key Response Fields:
|
|
625
|
+
skatingSpeedData (list): Skating speed entries by player
|
|
626
|
+
speedMax.imperial (float): Maximum team skating speed in mph
|
|
627
|
+
averageSpeed.imperial (float): Average team skating speed in mph
|
|
628
|
+
|
|
629
|
+
Response Docs:
|
|
630
|
+
docs/edge.md
|
|
436
631
|
"""
|
|
437
632
|
if season is None:
|
|
438
633
|
resource = f"edge/team-skating-speed-detail/{team_id}/now"
|