UNPKG

nba

Version:

JavaScript client for the NBA's stats API

108 lines (83 loc) 4.58 kB
// this includes endpoints at data.nba.com let transport = require("./get-json"); const { interpolate } = require("./util/string"); const scoreboardURL = interpolate("http://data.nba.com/data/5s/json/cms/noseason/scoreboard/__date__/games.json"); const boxScoreURL = interpolate("http://data.nba.com/data/5s/json/cms/noseason/game/__date__/__gameId__/boxscore.json"); const playByPlayURL = interpolate("http://data.nba.com/data/5s/json/cms/noseason/game/__date__/__gameId__/pbp_all.json"); const scheduleURL = interpolate("http://data.nba.com/data/10s/prod/v1/__season__/schedule.json"); const teamScheduleURL = interpolate("http://data.nba.com/data/10s/prod/v1/__season__/teams/__teamId__/schedule.json"); const previewArticleURL = interpolate("http://data.nba.com/data/10s/prod/v1/__date__/__gameId___preview_article.json"); const recapArticleURL = interpolate("http://data.nba.com/data/10s/prod/v1/__date__/__gameId___recap_article.json"); const leadTrackerURL = interpolate("http://data.nba.com/data/10s/prod/v1/__date__/__gameId___lead_tracker___period__.json"); const playoffsBracketURL = interpolate("http://data.nba.com/data/10s/prod/v1/__season__/playoffsBracket.json"); const teamLeadersURL = interpolate("http://data.nba.com/data/10s/prod/v1/__season__/teams/__teamId__/leaders.json"); const teamStatsRankingsURL = interpolate("http://data.nba.com/data/10s/prod/v1/__season__/team_stats_rankings.json"); const coachesURL = interpolate("http://data.nba.com/data/10s/prod/v1/__season__/coaches.json"); const teamsURL = interpolate("http://data.nba.net/data/10s/prod/v1/__year__/teams.json"); const calendarURL = "http://data.nba.net/data/10s/prod/v1/calendar.json"; const standingsURL = "http://data.nba.net/data/10s/prod/v1/current/standings_all.json"; const withTransport = (newTransport) => { transport = newTransport; }; // NOTE: the 'date' argument should be a string in format like "20181008" (which indicates Oct 8 2018) // You *can* pass a Date object but beware of timezone weirdness! // NOTE: the 'season' argument is the first year of the NBA season e.g. "2018" for the 2018-19 season const scoreboard = date => transport(scoreboardURL({ date: dateToYYYYMMDD(date) })); scoreboard.defaults = { date: null }; const boxScore = (date, gameId) => transport(boxScoreURL({ date: dateToYYYYMMDD(date), gameId })); boxScore.defaults = { date: null, gameId: null }; const playByPlay = (date, gameId) => transport(playByPlayURL({ date: dateToYYYYMMDD(date), gameId })); playByPlay.defaults = { date: null, gameId: null }; const schedule = (season) => transport(scheduleURL({ season })); schedule.defaults = { season: null }; const teamSchedule = (season, teamId) => transport(teamScheduleURL({ season, teamId })); teamSchedule.defaults = { season: null, teamId: null }; const previewArticle = (date, gameId) => transport(previewArticleURL({date: dateToYYYYMMDD(date), gameId })); previewArticle.defaults = { date: null, gameId: null }; const recapArticle = (date, gameId) => transport(recapArticleURL({date: dateToYYYYMMDD(date), gameId })); recapArticle.defaults = { date: null, gameId: null }; const leadTracker = (date, gameId, period) => transport(leadTrackerURL({date: dateToYYYYMMDD(date), gameId, period })); leadTracker.defaults = { date: null, gameId: null, period: null }; const playoffsBracket = (season) => transport(playoffsBracketURL({ season })); playoffsBracket.defaults = { season: null }; const teamLeaders = (season, teamId) => transport(teamLeadersURL({ season, teamId })); teamLeaders.defaults = { season: null, teamId: null }; const teamStatsRankings = (season) => transport(teamStatsRankingsURL({ season })); teamStatsRankings.defaults = { season: null }; const coaches = (season) => transport(coachesURL({ season })); coaches.defaults = { season: null }; const teams = (year = "2019") => transport(teamsURL({ year })); teams.defaults = { year: null }; const calendar = () => transport(calendarURL); calendar.defaults = {}; const standings = () => transport(standingsURL); standings.defaults = {}; function dateToYYYYMMDD (date) { if (date instanceof Date) { return [ date.getFullYear(), String(date.getMonth() + 1).padStart(2, 0), String(date.getDate()).padStart(2, 0), ].join(""); } // TODO: better checking here? return date; } module.exports = { scoreboard, boxScore, playByPlay, schedule, teamSchedule, previewArticle, recapArticle, leadTracker, playoffsBracket, teamLeaders, teamStatsRankings, coaches, teams, calendar, standings, withTransport, };