Skip to contents

Player career by season stage and team (skater and goalie columns in one frame).

Usage

vhl_player_career(player_id, return_parsed = TRUE)

Arguments

player_id

Player id (player_id in any VHL frame), e.g. 34526.

return_parsed

TRUE (default) returns the parsed tibble; FALSE returns the page's parsed record (a named list, plus _request with the season, stage, tn and the ids asked for).

Value

A fastRhockey_data tibble with one row per season stage and team:

col_nametypedescription
player_idintegerPlayer id, read from the page's own /players/{id}/games/ tab link; equals the requested id or the capture refuses.
seasonintegerSeason END year (2026 = 2025/26).
stagecharacterSeason stage: regular or playoff.
tnintegerTournament id of the season stage (2025/26 regular season = 1374, playoffs = 1375); vhl_tn maps season + stage to it.
team_season_idintegerTeam-season id (khl/ terminology): one id per team per tournament, from the KHL's sequence (khl/: Spartak = 14934 in 1369; here Metallurg = 15017 in 1374). The {id} of /calendar/{tn}/0/{id}/ and /stats/players/{tn}/all/{id}/. Not the stable club id (*_club_id) and not the team page id. With tn, the bridge from a player to every tournament team he played for.
teamcharacterTeam short name (Latin; the report tables' form).
jerseyintegerJersey number worn for that team that season (#).
games_playedintegerGames played (GP).
goalsintegerGoals (G) the player scored in the row's scope: the game in a box score, the season stage in stats and career rows.
assistsintegerAssists (A) credited to the player in the row's scope: the game in a box score, the season stage in stats and career rows.
pointsintegerPoints, goals + assists (PTS).
plus_minusintegerPlus/minus (+/-).
penalty_minutesintegerPenalty minutes (PIM).
even_strength_goalsintegerEven-strength goals (ESG).
power_play_goalsintegerPower-play goals (PPG).
shorthanded_goalsintegerShorthanded goals (SHG).
overtime_goalsintegerOvertime goals (OTG).
game_winning_goalsintegerGame-winning goals (GWG).
shootout_deciding_goalsintegerShootout-deciding goals (SDS; the legend says 'Shootouts deciding shots').
shots_on_goalintegerShots on goal (SOG).
shot_pctnumericShooting percentage, goals / shots on goal x 100 (%SOG); 0-100 scale; null when the page shows '-'.
shots_per_gamenumericShots on goal per game (S/G).
faceoffsintegerFaceoffs taken (FO).
faceoffs_wonintegerFaceoffs won (FOW).
faceoff_pctnumericFaceoff win percentage (%FO); 0-100 scale; null when the page shows '-' (no faceoffs taken).
toi_per_gamecharacterAverage time on ice per game (TOI/G), 'm:ss' / 'mm:ss' string; null when the page shows '-'.
shifts_per_gamenumericAverage shifts per game (Sft/G); integer in a one-game report, decimal in season tables.
hitsintegerBody checks delivered (Hits).
blocked_shotsintegerBlocked shots (BLS).
winsintegerGoalie wins (W).
lossesintegerGoalie losses (L).
shootouts_playedintegerShootouts played (SOP).
shots_againstintegerShots on goal faced (the SOG column of goalie tables).
goals_againstintegerGoals allowed (GA).
savesintegerSaves (Sv): shots on goal the goalie stopped in the row's scope (the game, or the season stage in stats and career rows).
save_pctnumericSave percentage (%Sv); 0-100 scale (93.8 = 93.8 %); null when the page shows '-'.
gaanumericGoals-against average (GAA) = 60 x GA / TOI minutes; null when the page shows '-'.
shutoutsintegerShutouts (SO): games in the row's scope in which the goalie allowed no goal.
toicharacterTime on ice (TOI), 'mm:ss' string; minutes run past 59 over a season ('2314:48'); null when the page shows '-'.

With return_parsed = FALSE, the page's parsed record (a named list) instead.

Details

Source: GET https://www.vhlru.ru/en/players/{player_id}/ (server-rendered HTML, keyless; parsed with rvest). Unofficial use of a public source; payloads are not redistributed.

Terms of use

Check the provider's terms of use before redistributing this data.

Errors

  • fastRhockey_no_data: the VHL has nothing for the request (a season without that stage, a game not in the season's calendar, an unknown game, player or team page).

  • fastRhockey_bad_request: a bad season / stage / id, a missing argument, or HTTP 400 / 422.

  • fastRhockey_asset_fetch: the page could not be fetched, or it is not the page asked for (another season, game or player; a missing table or header drift).

Examples

# \donttest{
  try(vhl_player_career(player_id = 34526))
#> ── VHL Player Career Information from vhlru.ru ──────────── fastRhockey 1.1.0 ──
#> ℹ Data updated: 2026-11-02 03:53:35 UTC
#> # A tibble: 5 × 39
#>   player_id season stage      tn team_season_id team   jersey games_played goals
#>       <int>  <int> <chr>   <int>          <int> <chr>   <int>        <int> <int>
#> 1     34526   2027 regular  1430          15516 Dynam…     NA            0     0
#> 2     34526   2026 playoff  1375          15424 Magni…     31           11     3
#> 3     34526   2026 regular  1374          15016 Magni…     31           60    25
#> 4     34526   2025 regular  1306          14252 Omski…     94           57    14
#> 5     34526   2024 regular  1230          13642 Ryaza…     37           27     3
#> # ℹ 30 more variables: assists <int>, points <int>, plus_minus <int>,
#> #   penalty_minutes <int>, even_strength_goals <int>, power_play_goals <int>,
#> #   shorthanded_goals <int>, overtime_goals <int>, game_winning_goals <int>,
#> #   shootout_deciding_goals <int>, shots_on_goal <int>, shot_pct <dbl>,
#> #   shots_per_game <dbl>, faceoffs <int>, faceoffs_won <int>,
#> #   faceoff_pct <dbl>, toi_per_game <chr>, shifts_per_game <dbl>, hits <int>,
#> #   blocked_shots <int>, wins <int>, losses <int>, shootouts_played <int>, …
# }