Skip to contents

Play-by-play of one match: goals, penalties, goalie changes and timeouts, one row per event.

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

Usage

eihl_pbp(match_id, return_parsed = TRUE)

Arguments

match_id

Match id (per-bucket match key space: match_id in eihl_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
event_indexintegerRow order of the event within the game (0-based), across periods.
periodcharacterPeriod key as the body sends it: 1, 2, 3, OT (overtime) or SO (shootout).
period_numberintegerPeriod number: 1-3, 4 = overtime, 5 = shootout.
timeintegerGame second of the event from the opening face-off (0-3600 in regulation, continuing through overtime).
event_typecharacterEvent type: goal, penalty, goalkeeperChange, timeout, periodStart, periodEnd, videoReview, ...
event_idintegerEvent id within its event type.
team_sidecharacterTeam of the row: home or visitor.
goalie_player_idintegerPlayer id (playerId key space) of the goalie entering the game (goalkeeperChange).
goalie_jerseyintegerJersey number of the goalie entering the game (goalkeeperChange).
goalie_namecharacterFull name of the goalie entering the game (goalkeeperChange).
current_scorecharacterScore after the goal, as home:visitor text, e.g. 1:0.
real_timecharacterWall-clock local time, YYYY-MM-DD HH:MM:SS.
scoreboard_timeintegerSeconds of game time from the opening face-off (0-3600 in regulation, continuing through overtime).
balancecharacterGoal strength: EQ even, PP1 / PP2 power play, SH1 / SH2 shorthanded.
extra_attackerlogicalTrue when the scoring team had an extra attacker on (goalie pulled).
empty_netlogicalTrue when the goal went into an empty net.
shootinglogicalTrue for a goal scored on a penalty shot.
technicallogicalTrue for a technical penalty (unverified).
scorer_player_idintegerPlayer id (playerId key space) of the goal scorer.
scorer_jerseyintegerJersey number of the goal scorer.
scorer_namecharacterFull name of the goal scorer.
assist1_player_idintegerPlayer id (playerId key space) of the first assist.
assist1_jerseyintegerJersey number of the first assist.
assist1_namecharacterFull name of the first assist.
assist2_player_idintegerPlayer id (playerId key space) of the second assist.
assist2_jerseyintegerJersey number of the second assist.
assist2_namecharacterFull name of the second assist.
plus_player_idscharacterComma-separated player ids (playerId key space) of the scoring team's players on ice.
minus_player_idscharacterComma-separated player ids (playerId key space) of the conceding team's players on ice.
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.
team_shortcutcharacterThree-letter team code.
goal_reviewcharacterVideo review subject, e.g. a goal (EIHL videoReview events).
on_ice_decisioncharacterCall on the ice before the review.
reason_for_reviewcharacterWhy the play was reviewed (free text).
decision_after_reviewcharacterFinal call after the review.
outgoing_goalie_player_idintegerPlayer id (playerId key space) of the goalie leaving the game (goalkeeperChange).
outgoing_goalie_jerseyintegerJersey number of the goalie leaving the game (goalkeeperChange).
outgoing_goalie_namecharacterFull name of the goalie leaving the game (goalkeeperChange).
create_timeintegerGame second at which the event was entered (unverified).
penalized_player_idintegerPlayer id (playerId key space) of the penalized player.
penalized_jerseyintegerJersey number of the penalized player.
penalized_namecharacterFull name of the penalized player.
penalty_from_real_timecharacterPenalty start, local wall clock YYYY-MM-DD HH:MM:SS.
penalty_from_scoreboard_timeintegerPenalty start, game second.
penalty_to_real_timecharacterPenalty end, local wall clock YYYY-MM-DD HH:MM:SS.
penalty_to_scoreboard_timeintegerPenalty end, game second.
durationintegerPenalty length in seconds (120 = minor).
disciplined_functionarylogicalTrue when the penalty was assessed to a team official.
disciplined_bmlogicalTrue when the penalty was a bench minor.
codenamecharacterPenalty code, e.g. HOOK, TRIP, ROUGH, BOARD, DELAY.
replaced_player_idintegerPlayer id (playerId key space) of the player serving the penalty in the penalized player's place.
replaced_jerseyintegerJersey number of the player serving the penalty in the penalized player's place.
replaced_namecharacterFull name of the player serving the penalty in the penalized player's place.

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

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

Other EIHL eSports functions: eihl_game_info(), eihl_goalie_box(), eihl_player_box(), eihl_schedule(), eihl_shots(), eihl_standings(), eihl_team_player_stats(), eihl_top_scorers()

Examples

# \donttest{
  try(eihl_pbp(match_id = 4440))
#> ── EIHL pbp from the eSports hokejovyzapis bucket ──── fastRhockey 1.0.0.9000 ──
#> ℹ Data updated: 2026-10-13 01:51:47 UTC
#> # A tibble: 16 × 53
#>    event_index period period_number  time event_type       event_id team_side
#>          <int> <chr>          <int> <int> <chr>               <int> <chr>    
#>  1           0 1                  1     0 goalkeeperChange    21568 home     
#>  2           1 1                  1     0 goalkeeperChange    21569 visitor  
#>  3           2 1                  1   367 goal                17919 home     
#>  4           3 1                  1   427 goal                17921 home     
#>  5           4 2                  2  1382 goal                17924 visitor  
#>  6           5 2                  2  1479 goal                17925 visitor  
#>  7           6 3                  3  2551 goal                17938 visitor  
#>  8           7 3                  3  2919 goal                17939 visitor  
#>  9           8 3                  3  3148 videoReview           330 home     
#> 10           9 3                  3  3404 goalkeeperChange    21592 home     
#> 11          10 3                  3  3458 goal                17941 visitor  
#> 12          11 3                  3  3458 goalkeeperChange    21593 home     
#> 13          12 3                  3  3478 goalkeeperChange    21594 home     
#> 14          13 3                  3  3518 timeout              1664 home     
#> 15          14 3                  3  3537 goal                17944 visitor  
#> 16          15 3                  3  3537 goalkeeperChange    21596 home     
#> # ℹ 46 more variables: goalie_player_id <int>, goalie_jersey <int>,
#> #   goalie_name <chr>, current_score <chr>, real_time <chr>,
#> #   scoreboard_time <int>, balance <chr>, extra_attacker <lgl>,
#> #   empty_net <lgl>, shooting <lgl>, technical <lgl>, scorer_player_id <int>,
#> #   scorer_jersey <int>, scorer_name <chr>, assist1_player_id <int>,
#> #   assist1_jersey <int>, assist1_name <chr>, assist2_player_id <int>,
#> #   assist2_jersey <int>, assist2_name <chr>, plus_player_ids <chr>, …
# }