NFL Game Data
Scrapes NFL game data from ESPN for the given team (abbreviation), season (year), game (week number), and season type ('pre', 'reg', 'post') and returns a model representing "play-by-play" data and "game details" of the form:
plays: Object gameDetails: Object
Disclaimer
As with all scrapers, this scraper is subject to break with any change in the response model sent back from ESPN.
There are some occasions where the play-by-play endpoint will return a one-off response that doesn't contain the model that the scraper's regex is expecting. So far I've only seen it with a single preseason game. I don't care enough to parse the raw HTML. Sorry! Fork this repo and enhance it if you'd like.
Usage
const NFLGameData = ; // Set team (Seattle Seahawks) and season year (2018).const nflGameData = 'sea' 2018; /** * Fetch game data for game 3 of the regular season. * * HTTP Request count: * 1 (season data) + 1 game (for plays) */nflGameData; // Change team to New England PatriotsnflGameDatateam = 'ne';// Change season to 2017nflGameDataseason = 2017; /** * Fetch game data for every game of the Regular Season * * HTTP Request count: * 1 (season data) + N games (plays for each game) */nflGameData; /** * Fetch game data for every game of every season type * * HTTP Request count: * 1 (season data) + N games (plays for each game) for each season */nflGameData;
plays
model
play: period: Object homeScore: 0 awayScore: 0 start: Object text: "S.Janikowski kicks 66 yards from SEA 35 to DAL -1. D.Thompson to DAL 34 for 35 yards (A.Calitro, A.King)." clock: Object type: Object homeWinPercentage: 0519 playId: "40103079945" tiePercentage: 0 secondsLeft: 0 ...;
gameDetails
model
date: date: '2018-09-23T20:25Z' format: 'ddd, MMM D' formatMobile: 'ddd, M/D' isTimeTBD: false opponent: id: '6' abbrev: 'DAL' displayName: 'Dallas Cowboys' logo: 'https://a.espncdn.com/i/teamlogos/nfl/500/dal.png' recordSummary: '' standingSummary: '' location: 'Dallas' links: '/nfl/team/_/name/dal/dallas-cowboys' homeAwaySymbol: 'vs' rank: '' neutralSite: false time: time: '2018-09-23T20:25Z' link: 'http://www.espn.com/nfl/game/_/gameId/401030799' state: 'post' tbd: false format: 'h:mm A' tickets: {} network: name: 'FOX' result: winner: true isTie: false winLossSymbol: 'W' currentTeamScore: '24' opponentTeamScore: '13' link: 'http://www.espn.com/nfl/game/_/gameId/401030799' timeAndNetwork: time: time: '2018-09-23T20:25Z' link: 'http://www.espn.com/nfl/game/_/gameId/401030799' state: 'post' tbd: false format: 'h:mm A' network: Object record: '1-2' seasonType: id: '2' type: 2 name: 'Regular Season' abbreviation: 'reg' status: id: '3' name: 'STATUS_FINAL' state: 'post' completed: true description: 'Final' detail: 'Final' shortDetail: 'Final' notes: {} competitionKey: 'STD' competitionName: 'Standard' week: number: 3 text: 'Week 3' display: 3 passingLeader: athlete: name: 'Russell Wilson' href: 'http://www.espn.com/nfl/player/_/id/14881/russell-wilson' lastName: 'Wilson' value: 192 rushingLeader: athlete: name: 'Chris Carson' href: 'http://www.espn.com/nfl/player/_/id/3919596/chris-carson' lastName: 'Carson' value: 102 receivingLeader: athlete: name: 'Tyler Lockett' href: 'http://www.espn.com/nfl/player/_/id/2577327/tyler-lockett' lastName: 'Lockett' value: 77 gameId: '401030799'