tm_expiring_contracts()
returns additional date_of_birth
column. (0.6.6.0001) #355fb_league_stats()
not returning opponent
table. (0.6.5.0001) #355tm_player_bio()
not returning values in the player_valuation
, max_player_valuation
and max_player_valuation_date
fields. Unfortunately, max_player_valuation
and max_player_valuation_date
fields are no able to be scraped at this release (0.6.5.0002) #357fb_league_stats()
not returning player
table when hidden on page load. (0.6.5.0003) #351fb_season_team_stats()
failing due to change in FBRef table name. (0.6.5.0007, 0.6.5.0008) #395tm_player_injury_history()
in #375, the previously names column club
has been renamed club_missed_games_for
to better represent that this column will contain the games the player missed games for, as previously this column could have been misunderstood to be who they were playing for when they were injured (0.6.5.0004)understat_match_players
and understat_match_stats
added. (0.6.5.0006) #386fb_league_stats()
unreliable for team_or_player = "player"
. (0.6.6) #395fb_league_stats()
failing for playing_time
. (0.6.4.0001) #314fb_advanced_match_stats()
throwing errors when there were no stat tables available for matches (0.6.4.0002) #315fb_player_match_logs()
failing for players who have played on multiple teams/leagues in the same season (0.6.4.0006) #327fb_league_stats(team_or_player = "player")
returning duplicate player hrefs (0.6.4.0008) #331fb_league_stats(team_or_player = "player")
returning wrong season's data for Australian league (0.6.4.0009) #333tm_player_market_values()
returing the player name and valuation on separate rows in the player_name
column [#338] (https://github.com/JaseZiv/worldfootballR/issues/338) and also returning NA
s for the player_age
column (0.6.4.0010) #336fb_match_results()
returns NA
goals due to inconsistent iconv()
behavior on different systems (0.6.4.0011) #326tm_team_player_urls()
fixed after change to server-side loading (0.6.4.0013) #342fb_teams_urls()
fixed to remove lower division teams being returned as a result of playoff promotion games (0.6.4.0014) #344tm_player_bio()
column name and data structure change for player date of birth (0.6.4.0014)fb_player_season_stats()
now includes the ability to get a player's national team stats [https://github.com/JaseZiv/worldfootballR/pull/310/files] (0.6.4.0002)fb_league_stats()
now correctly scrapes non domestic competitions [https://github.com/JaseZiv/worldfootballR/pull/325] (0.6.4.0003)fb_team_match_stats()
and understat_available_teams()
(0.6.4.0004)fb_match_shooting()
, fb_advanced_match_stats()
, fb_league_stats(team_or_player = "player")
gain Player_Href
column (0.6.4.0005)load_fb_advanced_stats()
and load_fb_match_summary()
added (0.6.4.0007)tm_get_player_absence()
now available to get a list of absences through suspension for players from transfermarktfotmob_get_match_details()
failing due to change in teamColors
JSON element (0.6.3.0001) #271fotmob_get_league_ids()
failing due to addition of localizedName
JSON element (0.6.3.0003) #275fotmob_get_match_details()
failing (again) due to change in teamColors
JSON element (0.6.3.0003)fotmob_get_match_players()
failing due to addition of nested JSON elements in stat
element (0.6.3.0004) #277fb_season_team_stats()
failing to get the correct home/away league table on some unusual layout league pages (0.6.3.0006) #282fotmob_get_match_players()
failing due mismatch in list
and data.frame
types for internal stats
column before unnesting (0.6.3.0007) #291fotmob_get_match_stats()
failing due to Fotmob additional nesting (0.6.3.0008) #295fotmob_get_match_players()
returning nested list elements for stat
columns (0.6.3.0010) #298tm_player_injury_history()
returning empty value in the club
value for when a player didn't miss any days through injury #293 (0.6.3.0011)tm_team_player_urls()
returning wrong player URLs due to html changes (0.6.3.0012) #305tm_player_injury_history()
returning empty value in the club
value for when a player didn't miss any days through injury #293 (0.6.3.0012)fotmob_get_match_players()
returning repeated stats and failing for NULL case (0.6.3.0011) #298fotmob_get_match_momentum()
added (0.6.2.0002)fotmob_get_league_tables()
returns form table (0.6.3.0005) #279fotmob_get_match_stats()
: suppress error messages for seasons without data (0.6.3.0009) #297tm_player_injury_history()
removes the player number from the player_name
variable #268 (0.6.3.0012)tm_player_transfer_history()
now contains an additional column in the returned dataframe (transfer_type
). This column differentiate between regular transfers, free transfers, loans and paid loans and transfers due to players returning from loan.fb_player_scouting_report()
now accepts an additional argument called league_comp_name
that allows the user to only return reports for specific leagues/comps. not passing anything to this results in all reports being returnedfotmob_get_match_players()
was failing for upcoming matches due to a missing stats
column (0.6.2.1000) #226tm_team_transfer_balances()
failing because of empty team boxes being collected (0.6.2.1000) #228fotmob_get_league_matches()
was failing due to an extra purrr::map_dfr
that is no longer needed (0.6.2.2000) #229fb_player_scouting_report()
failing due to HTML changes on FBRef (0.6.2.7000) #242fb_league_stats(team_or_player = "player", stat_type = "standard", ...)
failing since "standard"
should be translated to "stats"
(0.6.2.9100) #252fotmob_get_match_details()
returned 0 rows instead of 1 when there are no shots available (0.6.2.9300)fotmob_get_league_matches()
changed to use matches.allMatches
JSON element (0.6.2.9400) #258httr::GET()
with appropriate post-processing of JSON instead of jsonlite::fromJSON()
with raw URLs (0.6.3.0000) #262check_league_name()
removes repeated code. It checks that the name of the leagues is correct (0.6.2.3000) #232LEAGUES
replaces if statement with list (0.6.2.3000) #232tm_player_transfer_history()
added more information, added possibility to skip extraction of info that requires additional page load time. (0.6.2.4000) #235fb_league_stats()
added. Gets season stats for all teams / players in a selected league from FBref in a single scrape. (0.6.2.6000) #243fb_league_stats()
uses rvest::htm_table()
if team_or_player = "table"
(faster and more reliable), and only uses chromote if team_or_player = "player"
. (0.6.2.7100)quiet = FALSE
in all purrr::possibly()
calls internally. Improve messaging for unexpected outcomes in fotmob_get_matches_by_date()
and fotmob_get_match_info()
. (0.6.2.8000) #244load_fb_match_shooting()
added. (0.6.2.9000) #249fotmob_get_league_matches()
and fotmob_get_league_tables
gain a season
parameter. (0.6.2.9200) #256fotmob_get_season_stats()
internals improved (0.6.3.0000)tm_player_market_values()
returning NAs
in the squad
columntm_
functions were missing the country
and comp_name
columns due to a change in the html on transfermarktfb_match_shooting()
throwing errors for duplicate column names after switch from StatsBomb to Opta on FBReffb_team_goal_logs
and fb_player_goal_logs
gave errors when columns were not presentfotmob_get_season_stats
returning lexical error #201fotmob_get_season_stats
internals changed to handle new data formattm_staff_job_history()
code changed due to HTML changes on transfermarkt.com.get_match_report_page()
were returning 'Major League Soccer' as the away team #216fb_match_shooting()
was returning the wrong home or away designation in games where team names were inconsistent on the page #219fb_match_summary()
, fb_match_shooting()
not returning returning Away Team name for international matchesfb_match_lineups()
returning 'Major League Soccer' as the away team for international matches #221load_fb_big5_advanced_season_stats()
now loads FBRef data provided by Stats Perform (Opta) via Github releasesload_match_results()
now loads FBRef data provided by Stats Perform (Opta) via Github releasesload_match_comp_results()
now loads FBRef data provided by Stats Perform (Opta) via Github releasesload_understat_league_shots()
now loads data from GitHub releasesfb_team_goal_logs
- returns the team's season goals for and goals against logsfb_player_goal_logs
- returns the player's career goal and assist logstm_squad_stats()
throwing differing number of rows error #187.get_match_report_page()
internal function used in a number of fb_
functions throwing errors for cup tie legs #174.clean_table_names()
change to internal function that will include '_performance' to some column names in fb_team_match_log_stats()
to address duplicated column names for stat_type = 'keeper'
#184Some column names in output of fb_team_match_log_stats()
will now include _Performance at the end of the name. See #184 for more details
fb_advanced_match_stats()
replaces get_advanced_match_stats
fb_match_lineups()
replaces get_match_lineups
fb_match_results()
replaces get_match_results
fb_match_report()
replaces get_match_report
fb_match_shooting()
replaces get_match_shooting
fb_match_summary()
replaces get_match_summary
fb_match_urls()
replaces get_match_urls
fb_season_team_stats()
replaces get_season_team_stats
fb_team_match_results()
replaces get_team_match_results
tm_player_market_values()
replaces get_player_market_values
tm_player_transfer_history
replaces player_transfer_history
load_fotmob_matches_by_date()
, load_fotmob_match_details()
: Functions to load pre stored match ids and match details.fotmob_get_match_details()
, fotmob_get_matches_by_date()
, and fotmob_get_match_players()
: Nested list columns are unnested by default. The lone exception is shotmap
in the output for fotmob_get_match_players()
fotmob_get_match_info()
added. (#166)fb_squad_wages()
designed to get player wage estimates from FBref via Capologyload_fb_big5_advanced_season_stats()
returning zero row df when no season selected. Now rectifiedfotmob_get_season_stats()
: Fixed bug in .fotmob_get_single_season_stats()
where season ids with dashes, e.g. "17709-Apertura"
for Liga MX 2022/2023 would error.fb_big5_advanced_season_stats()
throwing error for team stats. Also updated to only have one page load, hopefully minimising the risk of being blocked for excessive page loadsElements changed on FBref somewhere in the same time v 0.5.11
was being released!
fb_advanced_match_stats()
fb_match_summary()
fb_big5_advanced_season_stats()
throwing error as Matches played
column now names MP
#158fotmob_get_league_tables()
: Fix unnesting to accommodate additional nesting and identical names at different levels. This bug affected fotmob_get_season_stats()
, which calls fotmob_get_league_tables()
#155fotmob_get_match_players()
returns stats as characters #150fotmob_get_season_stats()
: Address logic for extracting season ids from season stats pages that was failing due to blank stats pages in the offseason for a league.get_match_lineups()
wasn't returning the away team name #147understat_league_season_shots()
would error when passing in a new season_start_year
value for seasons that haven't yet started but match fixtures are available on Understat #148FBref functions now pass user agent to headers under the hood
fotmob_get_match_team_stats()
added.
The following functions now no longer return league/season metadata, including columns League
, Gender
, Country
, Season
:
fb_match_summary()
fb_advanced_match_stats()
fb_match_report()
fb_advanced_match_stats()
replaces get_advanced_match_stats
fb_match_lineups()
replaces get_match_lineups
fb_match_results()
replaces get_match_results
fb_match_report()
replaces get_match_report
fb_match_shooting()
replaces get_match_shooting
fb_match_summary()
replaces get_match_summary
fb_match_urls()
replaces get_match_urls
fb_season_team_stats()
replaces get_season_team_stats
fb_team_match_results()
replaces get_team_match_results
tm_player_market_values()
replaces get_player_market_values
tm_player_transfer_history
replaces player_transfer_history
load_fotmob_matches_by_date()
, load_fotmob_match_details()
: Functions to load pre stored match ids and match details.fotmob_get_match_details()
, fotmob_get_matches_by_date()
, and fotmob_get_match_players()
: Nested list columns are unnested by default. The lone exception is shotmap
in the output for fotmob_get_match_players()
load_understat_league_shots()
Functions to load pre stored shooting locations for all matches played since the 2014/15 season for the five leagues available on the Understat site.load_match_comp_results()
Functions to load pre stored match results from domestic and international cups/competitionsfotmob_get_season_stats()
no longer errors out when stats are queried for a league in its offseason #136player_transfer_history()
no longer throwing errors for players without a club #137To respect FBref's rate limiting rules, all functions have now been updated to have a default pause of three seconds between page loads, up from two seconds which was originally requested.
get_match_report()
and get_advanced_match_stats()
- now reporting the match date and away team name again. Additionally, Home_Goals
and Away_Goals
text strings now clean strings (tabs and line breaks removed) #128fotmob_get_league_ids()
- now uses new endpoint for league ids (data in script element no longer has data). This function is internally used by fotmob_get_league_matches()
, fotmob_get_league_tables()
, and fotmob_get_season_stats()
, which would have been broken if cached=FALSE
was specified.player_transfer_history()
no longer throwing errors for retired players and also addressed changed HTML on transfermarkt returning no data #127Now starting to have load functions:
load_match_results()
- function to load pre stored data similar to get_match_results()
load_fb_big5_advanced_season_stats()
- function to load pre stored data similar to fb_big5_advanced_season_stats()
tm_player_bio()
addresses where some data points don't exist for some players and returns NAsunderstat_team_stats_breakdown()
now returns the correct season_start_year
value #119stat_name
#118player_transfer_history()
updated after html changes on Transfermarkt caused function to return zero row data frame #120fotmob_get_league_matches()
and fotmob_get_league_tables()
after changes to names in JSON response (fixtures
-> matches
, tableData
-> table
) #121, #122api/
in URLfotmob_get_season_stats()
fotmob_get_league_matches
and fotmob_get_league_tables
now check 2 places for the league endpoint since it changes occasionally.fotmob_get_match_players
gets 3 additional columns: match_id
, team_id
, team_name
. #105fotmob_get_season_stats
gains stat_league_name
and can now be used for all leagues since seasons are programmatically scrapedtm_player_bio()
now also returns the player's maximum valuation (max_player_valuation
) and the date that max valuation was recorded (max_player_valuation_date
). Note: there will now be an additional two columns to the outputfotmob_get_league_tables
works properly for international tournaments.stat_type
argument in fotmob_get_seasons_stats
renamed to stat_name
to reflect the different set of values that it takes. Valid values are now equivalent to the options that can be found on the stats page in the browser, e.g. the Liverpool player stats page.time_pause
) before each page load to abide by their new rate limiting rules. See here. Default is set to 2
seconds.get_each_season_results()
exported nowtm_player_bio
returning player number instead of name and also NAs for valuation #109fotmob_get_match_players
failed for non-domestic leagues because the team
element does id not exist under the table
element. Fix is to have more robust element for assigning team ids for players.fotmob_get_seasons_stats
failed for non-domestic leagues, even when setting cached=TRUE
. Fix was to add logic such that the latest season for a given league is found from the "See More" links on a generic stats page.fb_team_match_log_stats()
- to get match logs of selected stat types for a team(s) for all matches played in a seasonfotmob_get_league_ids()
- to get Fotmob's league ids, which can be specified as an alternative to country
and league_name
in fotmob_get_league_matches()
and fotmob_get_league_tables()
fotmob_get_season_stats()
- to get stats for one or more leagues, at team or player levelfotmob_get_league_matches()
- to select matches for one or more leaguesfotmob_get_league_tables()
- to get standings for one or more leaguesfotmob_get_matches_by_date()
- to select matches occurring on specific day(s)fotmob_get_match_details()
- to get shooting locations for an individual matchfotmob_get_match_players()
- extract player statistics from matches.clean_table_names()
(internal function) now able to clean tab names in fb_team_match_log_stats()
fotmob_get_match_players
and fotmob_get_match_players()
fotmob_get_league_matches
and fotmob_get_league_tables
updated to address new Fotmob league endpoint.fotmob_get_match_players()
no longer returning the identical home and away team IDs #93stats
column returned in fotmob_get_match_players()
fotmob_get_league_matches
and fotmob_get_league_tables
updated to address new Fotmob league endpoint.tm_squad_stats()
now returns team, league information and also player URLsfb_player_scouting_report()
was returning incorrect position comparisons in some cases #85get_player_market_values()
was returning no team URLs for when there was no erroneous URLs in the initial scraped list, and some columns not returning values due to HTML changes on transfermarkttm_league_team_urls()
was returning no team URLs for when there was no erroneous URLs in the initial scraped listget_match_results()
was returning additional (incorrect) transfermarkt player URLs #82tm_league_debutants()
to be able to extract league debutantstm_expiring_contracts()
to be able to extract expiring contracts for a selected leaguetm_league_injuries()
to get all current injuries from a selected leaguetm_player_injury_history()
to get the full player injury history on transfermarkt for a selected player(s)fb_player_scouting_report()
had an issue with player listed as three positions #80get_match_lineups()
now also returns match and player URLs #78get_match_results()
now includes match URLs #78get_match_report()
now includes yellow and red card counts #2tm_team_player_urls()
was returning additional (incorrect) transfermarkt player URLstm_team_staff_urls()
allows users to extract URLs of selected team staff members based on staff role (ie 'Manager', 'Assistant Manager', etc)tm_team_staff_history()
allows users to get all people who have held the selected role in a team's history and some summary statisticstm_staff_job_history()
allows users to get all roles a selected staff member(s) has held and performance data in that role (wins, draws, losses, etc)tm_player_bio()
coercing other values to listsfb_team_player_stats()
allows users to get all stats for a team(s) player season statsget_season_team_stats()
now returns an additional column for MLS called Conference
for when stat_type = "league_table"
and stat_type = "league_table_home_away"
fb_player_scouting_report()
CRAN Submission Feedback:
Warning: Unexecutable code in man/fb_player_scouting_report.Rd: pos_versus = "primary")
.pkg_message()
to allow users to easily suppress messages outputted to the console by setting options(mypackage.verbose = FALSE)
Results of using understat_
functions now return the correct full season details (ie for season_start_year = 2019
, the resulting season
column in the df will be '2019/2020')
understat_team_players_stats()
gets season-long player stats for selected teamsunderstat_team_stats_breakdown()
gets team season shooting data broken down into game statesunderstat_team_meta()
created to allow for the extraction of team season URLsfotmob_get_matches_by_date()
and fotmob_get_match_details()
added #61fb_player_scouting_report()
now contains an additional column in the output (scouting_period
) that allows the user to filter on the period they need the scouting report forplayer_dictionary_mapping()
#56get_match_summary()
and get_match_lineups()
not returning results for games that were canceled/postponed #55tm_player_bio()
throwing errors due to change in html on Transfermarkt #57tm_player_bio()
throwing errors due to another change in html on Transfermarkttm_team_transfers()
now includes which transfer window the transfer occurred in #53tm_team_transfers()
now also includes player URLs from Transfermarkt to allow for joining with player market values #51get_player_market_values()
now returning the correct current (current_club
) and previous (previous_club
) clubs for playersfb_player_season_stats()
was not returning results for some players even though stats were available on FBref #52tm_player_bio()
now returns player market valuations #50player_dictionary_mapping()
returns a data frame of players (names and FBref URLs) who have played in the top 5 Euro leagues and their respective Transfermarkt URLTransfermarkt functions tm_team_transfers()
and player_transfer_history()
returning transfer prices now differentiate between unknown (returning NA
) to free transfers (returning 0
) #45
fb_big5_advanced_season_stats()
now returns player URLs from FBrefget_match_summary()
no longer throws errors where only one team (home or away) didn't have a recorded event #46fb_player_season_stats()
handles with print statement when stat types are not present for players #33Team
in the data frame column returned by get_match_shooting()
no longer exists, with Squad
being elevated in to it's place instead.get_player_market_values()
returning errors for seasons prior to current season #41tm_team_transfers()
handles for missing values for some teams/leaguesget_match_shooting()
handles for extra time periodsfb_player_scouting_report()
now returns results for Goalkeepers also #42get_match_shooting()
now handles for when only one team (home or away) record any shots #43The following functions now return results for international matches fro FBref:
get_match_urls()
get_match_results()
get_match_report()
get_match_summary()
get_match_lineups()
get_match_shooting()
get_advanced_match_stats()
The following transfermarkt function has been improved:
tm_team_transfers()
now includes a column for season
player_transfer_history()
returns results even when player hasn't got a club to go to #37tm_player_bio()
returning error when player valuations not available on transfermarkt.comget_match_shooting()
returning duplicated home shots data and not including away shotsget_match_summary()
not returning all Event_Players where special characters usedFunctions to extract understat.com data now available:
understat_league_season_shots()
to get shot location data for all matches in a league seasonunderstat_team_season_shots()
to get shot locations for and against a select teamunderstat_match_shots()
to get shot locations for a selected matchunderstat_player_shots()
to get all available shot locations for games played by a selected playerunderstat_league_match_results()
to get results and match data for all matches played in a seasonNew transfermarkt.com functions:
tm_player_bio()
to get player bios from transfermarkttm_team_transfers()
to get all arrival and departures for a team seasontm_squad_stats()
to get basic squad stats for teams for a seasontm_league_team_urls()
to get teams URLs for a league seasontm_team_player_urls()
to get player URLs for a given teamget_player_market_values()
from transfermarkt now includes player heights, their preferred foot, when they joined the club and where from and when their contract expiresplayer_transfer_history()
now includes remaining contract expiry data and remaining contract length (in days) #34get_match_lineups()
now identifies diamond formationsevent_time
, event_type
, event_players
and score_progression
changed for get_match_summary()
, and additional columns addedfb_player_season_stats()
now able to accept multiple player_url
valuesget_match_summary()
now contains additional columns:
Is_Pens
to indicate whether the event is from a penalty shootoutEvent_Half
to indicate which half the event occurred in (1, 2, 3, 4, 5), with 3 & 4 being extra time and 5 being penalty shootoutPenalty_Number
for penalty shootouts, the penalty taking orderget_match_results()
not returning data for seasons before 2014-15get_advanced_match_stats()
, get_match_report()
and get_match_summary()
not returning results for lower than tier 1 leaguesget_match_summary()
where event times causing issues in extra time of match half (ie 45+3 as opposed to 46th minute)fb_player_season_stats()
where players not having played a game were previously causing errorsfb_player_match_logs()
to get player match logs for a season and stat type (issue #26)fb_player_scouting_report()
now returns a players full scouting report against peers in Men's Big 5 Leagues and European Competition over the last 365 days (issue 27)Squad
column of the data frame returned using fb_player_season_stats()
get_match_shooting()
to get shot and shot creation specific details (issue #3)get_team_match_results()
to get match results for a given team or teams in a seasonget_match_lineups()
now returns additional summary player performance data (shots, goals, cards, etc) to the original lineups outputget_season_player_stats()
not returning results for players who have only played in domestic comps (not cups, internationals, etc) (issue #22)fb_big5_advanced_season_stats()
not returning results for 'playing_time' stat_type (issue #23)tm_team_transfer_balances()
to get team total transfer income and expenditure datatm_matchday_table()
to get league table after each specified matchday(s)fb_league_urls()
as a result of including "Big 5" competition issue #19fb_big5_advanced_season_stats()
to get fbref season stats for all players or teams stats in the big five Euro leaguesfb_league_urls()
to get fbref league URLs for a given country, gender, season, tierfb_teams_urls()
to get fbref team URLs for a given league_urlfb_player_urls()
to get fbref player URLs for a given team_urlfb_player_scouting_report()
fb_player_season_stats()
get_match_urls()
, get_match_results()
, get_season_team_stats()
league_url
argument to get_player_market_values()
to allow extraction of non-standard (leagues not stored in worldfootballR_data
) leaguesget_player_market_values()
data outputJaseZiv/worldfootballR_data
instead)get_player_market_values
to get player valuations from transfermarkt.comget_match_results()
get_match_urls()
get_season_team_stats()
get_match_report()
get_match_lineups()
get_advanced_match_statistics()
get_match_summary()