Skip to contents

Shots of one match with rink coordinates and result, one row per shot.

Wraps GET https://s3.eu-west-1.amazonaws.com/de.hokejovyzapis.cz/visualization/shots/{match_id}.json of the DEL eSports bucket. Example: https://s3.eu-west-1.amazonaws.com/de.hokejovyzapis.cz/visualization/shots/4444.json. Seasons are END years (2027 = 2026/27); every request waits at least one second after the last one to the same host.

Usage

del_shots(match_id, return_parsed = TRUE)

Arguments

match_id

Match id (per-bucket match key space: match_id in del_schedule). Not the league website's game id.

return_parsed

Parse the payload into a tibble (default TRUE); FALSE returns the raw decoded JSON body (a nested list).

Value

A tibble::tibble() with one row per row of the file (zero rows, carrying the documented columns, for an empty frame); the raw JSON list when return_parsed = FALSE. Columns:

col_nametypedescription
match_idintegerMatch id (per-bucket match key space); joins to the {match_id} path param of the game wrappers.
datecharacterGame date YYYY-MM-DD.
home_idintegerTeam id (team key space, per bucket, stable across seasons); joins to league-matches home.id / guest.id and the {team_id} path param.
home_namecharacterTeam display name.
home_shortcutcharacterThree-letter team code.
visitor_idintegerTeam id (team key space, per bucket, stable across seasons); joins to league-matches home.id / guest.id and the {team_id} path param.
visitor_namecharacterTeam display name.
visitor_shortcutcharacterThree-letter team code.
shot_idintegerShot id within the shot files.
player_idintegerPlayer id (player key space, per bucket, stable across games and seasons); joins to playerId in rosters, events, boxscores and leaderboards.
jerseyintegerJersey number.
first_namecharacterFirst name of the shooter.
last_namecharacterLast name of the shooter.
team_idintegerTeam id (team key space, per bucket, stable across seasons); joins to league-matches home.id / guest.id and the {team_id} path param.
match_shot_resutl_idintegerShot result code (the provider's typo kept): 4 = goal; 1 / 2 / 3 probably on goal / missed / blocked (unverified). A code, not a joinable id.
coordinate_xnumericShot x along the rink LENGTH, centre ice = 0, about -100..100 (units unverified, plausibly percent of half-length). Normalised to the attacking direction: each team keeps one sign for the whole game, the home team positive in the three sample games. DEL sends two-decimal floats, ICEHL and EIHL whole numbers (-71.0).
coordinate_ynumericShot y across the rink WIDTH, centre line = 0, about -100..100 (units and which board is positive unverified). DEL two-decimal floats, ICEHL and EIHL whole numbers.
real_datecharacterWall-clock local time, YYYY-MM-DD HH:MM:SS.
polygoncharacterRink area of the shot, {home/away}_{top/center/bottom/defense}_polygon (DEL).
timeintegerSeconds of game time from the opening face-off (0-3600 in regulation, continuing through overtime).
shot_result_idintegerShot result code, the same value as match_shot_resutl_id: 4 = goal (verified); 1, 2 and 3 (on goal / missed / blocked in the widgets) are unverified.
is_goallogicalTrue when the shot result code is 4 (goal).
team_sidecharacterTeam of the row: home or visitor.
xgnumericExpected-goals value of the shot (ICEHL and EIHL only; null elsewhere).
xg_typecharacterShot-danger class from the xG model, e.g. LD / MD / HD (ICEHL and EIHL only; null elsewhere).

Errors

Signalled as classed conditions: fastRhockey_no_data when the bucket has no such key (S3 404 NoSuchKey: unknown season, competition, match or team) or the file holds no rows (an unplayed game, an empty shot shell); fastRhockey_asset_fetch for any other non-2xx answer (403 AccessDenied), a connection failure after retries, an empty or unreadable 200 body, an error envelope, a body of the wrong shape, or a body for another season or game; fastRhockey_bad_request for an HTTP 400/422 or an invalid argument. All three also inherit fastRhockey_error. Wrappers raise; they never warn and return an empty frame.

See also

DEL (the league site whose widgets read this public eSports bucket)

Other DEL eSports functions: del_faceoffs(), del_game_info(), del_goalie_box(), del_pbp(), del_player_box(), del_roster(), del_schedule(), del_shifts(), del_standings(), del_team_player_stats(), del_top_scorers()

Examples

# \donttest{
  try(del_shots(match_id = 4444))
#> ── DEL shots from the eSports hokejovyzapis bucket ─── fastRhockey 1.0.0.9000 ──
#> ℹ Data updated: 2026-10-13 01:51:37 UTC
#> # A tibble: 99 × 25
#>    match_id date       home_id home_name home_shortcut visitor_id visitor_name
#>       <int> <chr>        <int> <chr>     <chr>              <int> <chr>       
#>  1     4444 2026-10-11      15 SWW       SWW                   12 RBM         
#>  2     4444 2026-10-11      15 SWW       SWW                   12 RBM         
#>  3     4444 2026-10-11      15 SWW       SWW                   12 RBM         
#>  4     4444 2026-10-11      15 SWW       SWW                   12 RBM         
#>  5     4444 2026-10-11      15 SWW       SWW                   12 RBM         
#>  6     4444 2026-10-11      15 SWW       SWW                   12 RBM         
#>  7     4444 2026-10-11      15 SWW       SWW                   12 RBM         
#>  8     4444 2026-10-11      15 SWW       SWW                   12 RBM         
#>  9     4444 2026-10-11      15 SWW       SWW                   12 RBM         
#> 10     4444 2026-10-11      15 SWW       SWW                   12 RBM         
#> # ℹ 89 more rows
#> # ℹ 18 more variables: visitor_shortcut <chr>, shot_id <int>, player_id <int>,
#> #   jersey <int>, first_name <chr>, last_name <chr>, team_id <int>,
#> #   match_shot_resutl_id <int>, coordinate_x <dbl>, coordinate_y <dbl>,
#> #   real_date <chr>, polygon <chr>, time <int>, shot_result_id <int>,
#> #   is_goal <lgl>, team_side <chr>, xg <dbl>, xg_type <chr>
# }