Goals of a game with scorer, assists, strength and the jerseys on ice for both teams.
Arguments
- season
Season END year (2026 = 2025/26; the calendar covers 2010/11 on). With
stageit is mapped to the site's tournament id, seevhl_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;FALSEreturns the page's parsed record (a named list, plus_requestwith the season, stage, tn and the ids asked for).
Value
A fastRhockey_data tibble with one row per goal:
| col_name | type | description |
game_id | integer | Game 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. |
season | integer | Season END year (2026 = 2025/26). |
stage | character | Season stage: regular or playoff. |
game_number | integer | Official game number (from 'No.984'); checked against the request. |
team_side | character | Side of the game the row belongs to: home or away. |
team_page_id | integer | Team page id (vhlru.ru /en/teams/{team_page_id}/), stable across seasons; for report rows the page id of the row's side. |
goal_number | integer | Goal number in the game (G). |
period | character | Period (Per) as printed: '1', '2', '3', overtime unverified, 'RB' (Cyrillic even on /en/: shootout, reshayushchiy brosok). |
time | character | Elapsed game time 'mm:ss' from the opening faceoff (Time); the shootout row says '65:00'. |
score | character | Score after the goal 'home:away' (Score). |
strength | character | Goal strength code (PMG): eq (even), ppg (power play), shg (shorthanded); null on the shootout row. |
scorer_id | integer | Player 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. |
scorer | character | Goal scorer's name, 'Surname Given' as the report prints it. |
scorer_jersey | integer | Scorer jersey number. |
scorer_season_total | integer | The scorer's season goal count after this goal (the '(13)' suffix); null on the shootout row. |
assist1_id | integer | Player id of the first assist; null when unassisted. |
assist1 | character | First assist name; null when unassisted. |
assist1_jersey | integer | First assist jersey number. |
assist1_season_total | integer | The first assist's season assist count after this goal (the '(14)' suffix). |
assist2_id | integer | Player id of the second assist; null when none. |
assist2 | character | Second assist name; null when none. |
assist2_jersey | integer | Second assist jersey number. |
assist2_season_total | integer | The second assist's season assist count after this goal. |
home_on_ice | list of integer | Jersey 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_ice | list of integer | Jersey 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.
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 badseason/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))
# }
}
