Skip to contents

worldfootballR (development version)

Bugs

  • fb_league_stats() not returning opponent table. (0.6.5.0001) #355

  • tm_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) #357

  • fb_league_stats() not returning player table when hidden on page load. (0.6.5.0003) #351


worldfootballR 0.6.5

Bugs

Improvements


worldfootballR 0.6.4

Breaking changes

  • All fotmob functions removed due to an update to fotmob terms of service prohibiting “the use of automatic services (robots, spiders, indexing etc.) as well as other methods for systematic or regular use.”

Bugs

  • fotmob_get_match_details() failing due to change in teamColors JSON element (0.6.3.0001) #271
  • fotmob_get_league_ids() failing due to addition of localizedName JSON element (0.6.3.0003) #275
  • fotmob_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) #277
  • fb_season_team_stats() failing to get the correct home/away league table on some unusual layout league pages (0.6.3.0006) #282
  • fotmob_get_match_players() failing due mismatch in list and data.frame types for internal stats column before unnesting (0.6.3.0007) #291
  • fotmob_get_match_stats() failing due to Fotmob additional nesting (0.6.3.0008) #295
  • fotmob_get_match_players() returning nested list elements for stat columns (0.6.3.0010) #298
  • tm_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) #305
  • tm_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) #298

Improvements

  • fotmob_get_match_momentum() added (0.6.2.0002)
  • fotmob_get_league_tables() returns form table (0.6.3.0005) #279
  • fotmob_get_match_stats(): suppress error messages for seasons without data (0.6.3.0009) #297
  • tm_player_injury_history() removes the player number from the player_name variable #268 (0.6.3.0012)

worldfootballR 0.6.3

Breaking Changes

  • 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 returned

Bugs

  • fotmob_get_match_players() was failing for upcoming matches due to a missing stats column (0.6.2.1000) #226
  • tm_team_transfer_balances() failing because of empty team boxes being collected (0.6.2.1000) #228
  • fotmob_get_league_matches() was failing due to an extra purrr::map_dfr that is no longer needed (0.6.2.2000) #229
  • All understat functions were failing due to a new cookie requirement (0.6.2.5000) #239
  • fb_player_scouting_report() failing due to HTML changes on FBRef (0.6.2.7000) #242
  • fb_league_stats(team_or_player = "player", stat_type = "standard", ...) failing since "standard" should be translated to "stats" (0.6.2.9100) #252
  • fotmob_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) #258
  • All fotmob functions updated to use httr::GET() with appropriate post-processing of JSON instead of jsonlite::fromJSON() with raw URLs (0.6.3.0000) #262

Improvements

  • check_league_name() removes repeated code. It checks that the name of the leagues is correct (0.6.2.3000) #232
  • LEAGUES replaces if statement with list (0.6.2.3000) #232
  • tm_player_transfer_history() added more information, added possibility to skip extraction of info that requires additional page load time. (0.6.2.4000) #235
  • fb_league_stats() added. Gets season stats for all teams / players in a selected league from FBref in a single scrape. (0.6.2.6000) #243
  • fb_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)
  • Use 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) #244
  • load_fb_match_shooting() added. (0.6.2.9000) #249
  • fotmob_get_league_matches() and fotmob_get_league_tables gain a season parameter. (0.6.2.9200) #256
  • fotmob_get_season_stats() internals improved (0.6.3.0000)

worldfootballR 0.6.2

CRAN release: 2022-11-26

Bugs

  • tm_player_market_values() returning NAs in the squad column
  • tm_ functions were missing the country and comp_name columns due to a change in the html on transfermarkt
  • fb_match_shooting() throwing errors for duplicate column names after switch from StatsBomb to Opta on FBRef
  • fb_team_goal_logs and fb_player_goal_logs gave errors when columns were not present
  • fotmob_get_season_stats returning lexical error #201
  • fotmob_get_season_stats internals changed to handle new data format
  • tm_staff_job_history() code changed due to HTML changes on transfermarkt.com
  • All FBRef functions calling internal function .get_match_report_page() were returning ‘Major League Soccer’ as the away team #216
  • fb_match_shooting() was returning the wrong home or away designation in games where team names were inconsistent on the page #219
  • fb_match_summary(), fb_match_shooting() not returning returning Away Team name for international matches
  • fb_match_lineups() returning ‘Major League Soccer’ as the away team for international matches #221

Improvements


worldfootballR 0.6.1

CRAN release: 2022-10-14

New functions

  • fb_team_goal_logs - returns the team’s season goals for and goals against logs
  • fb_player_goal_logs - returns the player’s career goal and assist logs

Improvements

  • Fotmob functions now pass user agent to headers under the hood

Bugs

  • tm_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' #184

Breaking Changes

Some 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


worldfootballR 0.6.0

CRAN release: 2022-08-24

New functions (and deprecated old ones)

Bugs

  • load_fb_big5_advanced_season_stats() returning zero row df when no season selected. Now rectified
  • fotmob_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 loads

Elements 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 #158
  • fotmob_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() #155
  • fotmob_get_match_players() returns stats as characters #150
  • fotmob_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 #147
  • understat_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 #148

Improvements

New functions (and deprecated old ones)


worldfootballR 0.5.7

CRAN release: 2022-07-11

Improvements

  • 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/competitions

Bugs

  • fotmob_get_season_stats() no longer errors out when stats are queried for a league in its offseason #136
  • player_transfer_history() no longer throwing errors for players without a club #137
  • Increase sleep times in tests for FBref functions

worldfootballR 0.5.6

CRAN release: 2022-06-15

Improvements

To 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.

Bugs

  • 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) #128
  • fotmob_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 #127

worldfootballR 0.5.3

Improvements

Now starting to have load functions:

Bugs

  • tm_player_bio() addresses where some data points don’t exist for some players and returns NAs
  • understat_team_stats_breakdown() now returns the correct season_start_year value #119
  • tests and vignettes for fotmob stat functions changed to lowercase for second word in stat_name #118
  • player_transfer_history() updated after html changes on Transfermarkt caused function to return zero row data frame #120
  • fotmob_get_league_matches() and fotmob_get_league_tables() after changes to names in JSON response (fixtures -> matches, tableData -> table) #121, #122
  • Various fotmob functions affected by addition of api/ in URL
  • New names to player stats outdated docs for fotmob_get_season_stats()

worldfootballR 0.5.2

Improvements

  • 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. #105
  • fotmob_get_season_stats gains stat_league_name and can now be used for all leagues since seasons are programmatically scraped
  • tm_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 output
  • Additional processing logic added such that fotmob_get_league_tables works properly for international tournaments.
  • The 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.
  • All FBref functions now contain a user defined pause (time_pause) before each page load to abide by their new rate limiting rules. See here. Default is set to 2 seconds
  • Internal function.get_each_season_results() exported now

Bugs

  • tm_player_bio returning player number instead of name and also NAs for valuation #109
  • fotmob_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.

worldfootballR 0.5.1.1000

  • Set minimum R version to 4.0.0

worldfootballR 0.5.1

CRAN release: 2022-03-25

  • Modifications based on CRAN feedback to updates for CRAN submission

worldfootballR 0.5.0

CRAN release: 2022-03-21

New functions

  • fb_team_match_log_stats() - to get match logs of selected stat types for a team(s) for all matches played in a season
  • fotmob_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 level
  • fotmob_get_league_matches() - to select matches for one or more leagues
  • fotmob_get_league_tables() - to get standings for one or more leagues
  • fotmob_get_matches_by_date() - to select matches occurring on specific day(s)
  • fotmob_get_match_details() - to get shooting locations for an individual match
  • fotmob_get_match_players() - extract player statistics from matches

Improvements

  • .clean_table_names() (internal function) now able to clean tab names in fb_team_match_log_stats()
    • Added documentation for fotmob_get_match_players and fotmob_get_match_players()

Bugs

  • 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 #93
    • Fixed multiple rows returned for single player in stats column returned in fotmob_get_match_players()
  • fotmob_get_league_matches and fotmob_get_league_tables updated to address new Fotmob league endpoint.

worldfootballR 0.4.10

CRAN release: 2022-02-08

Improvements

Bugs


worldfootballR 0.4.9

CRAN release: 2022-01-16

New functions

Improvements

Bugs


worldfootballR 0.4.7

New functions

  • tm_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 statistics
  • tm_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)

Bugs

  • Fixed for rare case of duplicate socials in tm_player_bio() coercing other values to lists

worldfootballR 0.4.6

New functions

Improvements

  • get_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"

worldfootballR 0.4.5

CRAN release: 2021-11-25

Improvements

worldfootballR 0.4.4

Improvements

  • CRAN Submission Feedback:
    • Wrap Data sources in single quotes in DESCRIPTION file (title and/or description)
    • Fixed Warning: Unexecutable code in man/fb_player_scouting_report.Rd: pos_versus = "primary")
    • Wrote .pkg_message() to allow users to easily suppress messages outputted to the console by setting options(mypackage.verbose = FALSE)
    • Removed unnecessary examples
  • 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’)

worldfootballR 0.4.3

Improvements


worldfootballR 0.4.2

Bugs

  • Fixed various transfermarkt functions that were broken due to HTML changes on the site

worldfootballR 0.4.1

Breaking Changes

  • Remove FotMob functions

worldfootballR 0.4.0

Improvements

  • fotmob_get_matches_by_date() and fotmob_get_match_details() added #61

worldfootballR 0.3.6

Improvements / Breaking Changes

  • fb_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 for

Bugs


worldfootballR 0.3.5

Improvements


worldfootballR 0.3.4

Improvements

  • tm_team_transfers() now also includes player URLs from Transfermarkt to allow for joining with player market values #51

Bugs


worldfootballR 0.3.3

New functions

  • player_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 URL

Improvements

Transfermarkt 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 FBref

Bugs


worldfootballR 0.3.2

Breaking Changes

  • The Team in the data frame column returned by get_match_shooting() no longer exists, with Squad being elevated in to it’s place instead.

Bugs


worldfootballR 0.3.1

Improvements

The following functions now return results for international matches fro FBref:

The following transfermarkt function has been improved:

Bugs


worldfootballR 0.3.0

New functions

Functions to extract understat.com data now available: * Shots locations data: * understat_league_season_shots() to get shot location data for all matches in a league season * understat_team_season_shots() to get shot locations for and against a select team * understat_match_shots() to get shot locations for a selected match * understat_player_shots() to get all available shot locations for games played by a selected player * understat_league_match_results() to get results and match data for all matches played in a season

New transfermarkt.com functions: * tm_player_bio() to get player bios from transfermarkt * tm_team_transfers() to get all arrival and departures for a team season * tm_squad_stats() to get basic squad stats for teams for a season * Helper functions: * tm_league_team_urls() to get teams URLs for a league season * tm_team_player_urls() to get player URLs for a given team

Improvements

  • get_player_market_values() from transfermarkt now includes player heights, their preferred foot, when they joined the club and where from and when their contract expires
  • player_transfer_history() now includes remaining contract expiry data and remaining contract length (in days) #34
  • get_match_lineups() now identifies diamond formations
  • Progress bars now included on all long running functions!

worldfootballR 0.2.9

Breaking Changes

  • Most Fbref table names will have changed slightly, as they have been cleaned up to not include “__” and “+/-” has been replaced with “Plus_Minus”
  • Column names event_time, event_type, event_players and score_progression changed for get_match_summary(), and additional columns added

Improvements

  • fb_player_season_stats() now able to accept multiple player_url values
  • get_match_summary() now contains additional columns:
    • Is_Pens to indicate whether the event is from a penalty shootout
    • Event_Half to indicate which half the event occurred in (1, 2, 3, 4, 5), with 3 & 4 being extra time and 5 being penalty shootout
    • Penalty_Number for penalty shootouts, the penalty taking order

Bugs


worldfootballR 0.2.8

New functions

Improvements

  • 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)
  • Removed the country abbreviation in the Squad column of the data frame returned using fb_player_season_stats()

worldfootballR 0.2.7

New functions

Improvements

  • get_match_lineups() now returns additional summary player performance data (shots, goals, cards, etc) to the original lineups output

Bugs

  • Fixed issue where get_season_player_stats() not returning results for players who have only played in domestic comps (not cups, internationals, etc) (issue #22)
  • Fixed issue where fb_big5_advanced_season_stats() not returning results for ‘playing_time’ stat_type (issue #23)

worldfootballR 0.2.6

New functions

Improvements

  • Various transfermarkt functions refactored to have consistent column names

Bugs

  • Fix duplicating league URLs in fb_league_urls() as a result of including “Big 5” competition issue #19
  • Fix duplicating league URLs in various season-level functions as a result of including “Big 5” competition issue #20
  • Fix duplicated results in some functions

worldfootballR 0.2.5

New functions


worldfootballR 0.2.4

New functions

Improvements


worldfootballR 0.2.3

  • Added league_url argument to get_player_market_values() to allow extraction of non-standard (leagues not stored in worldfootballR_data) leagues

worldfootballR 0.2.2


worldfootballR 0.2.1

General Changes

  • Removed internal functions no longer necessary (data is stored at JaseZiv/worldfootballR_data instead)
  • Usage instructions now in vignettes as opposed to README

Bugs

  • Fixed duplicate column name issue for keeper stats #13

worldfootballR 0.2.0

  • Added get_player_market_values to get player valuations from transfermarkt.com

worldfootballR 0.1.0

  • Bug fixes #8
  • Package Logo
  • Tests written and codecov installed

worldfootballR 0.0.1

  • performance improvements, including limiting page reads where match report data included in output
  • error handling

worldfootballR 0.0.0.9000

  • First commit of package
  • Added function to get the match results of a given tier-1 league season get_match_results()
  • Added function to extract match URLs for a given tier-1 league season get_match_urls()
  • Added function to get team season statistics get_season_team_stats()
  • Added function to get additional metadata for matches get_match_report()
  • Added function to get match lineups for selected match urls get_match_lineups()
  • Added function to get advanced match statistics for players and/or teams get_advanced_match_statistics()
  • Added function to get match events summary get_match_summary()