Skip to contents

Goals of a game with scorer, assists, strength and the jerseys on ice for both teams.

Usage

vhl_goals(season, game_id, stage = "regular", return_parsed = TRUE)

Arguments

season

Season END year (2026 = 2025/26; the calendar covers 2010/11 on). With stage it is mapped to the site's tournament id, see vhl_tn().

game_id

Required. Game id (game_id in vhl_schedule; the report's and the broadcast's idgame), e.g. 899223.

stage

Season stage: "regular" (default) or "playoff".

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 goal:

col_nametypedescription
game_idintegerGame id (the calendar's game_id; the report's and the broadcast's idgame). The report and broadcast pages do not print it: it comes from the request.
seasonintegerSeason END year (2026 = 2025/26).
stagecharacterSeason stage: regular or playoff.
game_numberintegerOfficial game number (from 'No.984'); checked against the request.
team_sidecharacterSide of the game the row belongs to: home or away.
team_page_idintegerTeam page id (vhlru.ru /en/teams/{team_page_id}/), stable across seasons; for report rows the page id of the row's side.
goal_numberintegerGoal number in the game (G).
periodcharacterPeriod (Per) as printed: '1', '2', '3', overtime unverified, 'RB' (Cyrillic even on /en/: shootout, reshayushchiy brosok).
timecharacterElapsed game time 'mm:ss' from the opening faceoff (Time); the shootout row says '65:00'.
scorecharacterScore after the goal 'home:away' (Score).
strengthcharacterGoal strength code (PMG): eq (even), ppg (power play), shg (shorthanded); null on the shootout row.
scorer_idintegerPlayer id of the scorer: the {player_id} of /en/players/{player_id}/, stable across seasons and teams; also the photo id on img.khl.ru. Same numeric sequence as khl.ru player ids; whether it equals the same person's khl.ru id is unverified.
scorercharacterGoal scorer's name, 'Surname Given' as the report prints it.
scorer_jerseyintegerScorer jersey number.
scorer_season_totalintegerThe scorer's season goal count after this goal (the '(13)' suffix); null on the shootout row.
assist1_idintegerPlayer id of the first assist; null when unassisted.
assist1characterFirst assist name; null when unassisted.
assist1_jerseyintegerFirst assist jersey number.
assist1_season_totalintegerThe first assist's season assist count after this goal (the '(14)' suffix).
assist2_idintegerPlayer id of the second assist; null when none.
assist2characterSecond assist name; null when none.
assist2_jerseyintegerSecond assist jersey number.
assist2_season_totalintegerThe second assist's season assist count after this goal.
home_on_icelist of integerJersey numbers of the home players on ice at the goal (goalie included); the column header is the home team's short name. Shootout row: the goalie only.
away_on_icelist of integerJersey numbers of the away players on ice at the goal (goalie included); the column header is the away team's short name. Empty on the shootout row.

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

Details

One report page feeds vhl_game_info(), vhl_goals(), vhl_penalties(), vhl_player_box() and vhl_goalie_box(). Each call fetches it (and, for the first game of a season, that season's calendar, cached for the R session). Use return_parsed = FALSE to keep the page's record.

Source: GET https://www.vhlru.ru/en/report/{season}/ (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

if (FALSE) { # interactive()
# \donttest{
  try(vhl_goals(season = 2026, game_id = 899223))
# }
}