How to access and filter through the NBA schedule API for season 2021-22 using PHP.
This is not the only way and endpoint to get the NBA schedule however since it is a one and done call where you need no other information like team id’s and dates it is ideal.
The NBA schedule endpoint:
https://cdn.nba.com/static/json/staticData/scheduleLeagueV2_9.json
As this involves the NBA static CDN API you won’t need to do a fancy cURL GET request with origins, referrers and User-Agents included.
$data = json_decode(file_get_contents("https://cdn.nba.com/static/json/staticData/scheduleLeagueV2_9.json"), true);
The call will return a large multidimensional array with the data for all the pre-season and regular-season NBA games for season 2021-22.
Below is the correct paths in the array to access every game through a loop.
foreach ($data['leagueSchedule']['gameDates'] as $games) { foreach ($games['games'] as $game) { //Do stuff here } }
Outputting all the games with the date and time formatted as a readable string:
foreach ($data['leagueSchedule']['gameDates'] as $games) { foreach ($games['games'] as $game) { $date_time = DateTime::createFromFormat('Y-m-d H:i:s', str_replace(["T", "Z"], [" ", ""], $game['gameDateTimeEst'])); $date_formatted = $date_time->format('g:ia D jS M Y'); $home_team = $game['homeTeam']['teamName']; $away_team = $game['awayTeam']['teamName']; echo "$home_team vs $away_team $date_formatted<br>"; } }
This looks like this:
Getting only today’s games using the ET timezone:
date_default_timezone_set('America/New_York'); $todays_date = date('Y-m-d') . "T00:00:00Z"; foreach ($data['leagueSchedule']['gameDates'] as $games) { foreach ($games['games'] as $game) { if ($todays_date === $game['gameDateEst']) { echo "{$game['homeTeam']['teamName']} vs {$game['awayTeam']['teamName']}<br>"; } } }
The output:
Filter for only one team’s games and add colour depending on home or away game:
$filter_team = 'Clippers'; foreach ($data['leagueSchedule']['gameDates'] as $games) { foreach ($games['games'] as $game) { $show = false; $date_time = DateTime::createFromFormat('Y-m-d H:i:s', str_replace(["T", "Z"], [" ", ""], $game['gameDateTimeEst'])); $home_team = $game['homeTeam']['teamName']; $away_team = $game['awayTeam']['teamName']; $date_formatted = $date_time->format('g:ia D jS M Y'); if ($home_team === $filter_team) { $show = true; $style = 'background: #87ff8747;'; } else if ($away_team === $filter_team) { $show = true; $style = 'background: #ff878747;'; } if ($show) { echo "<span style='$style'>$home_team vs $away_team <span style='font-size: 80%'>$date_formatted</span></span><br>"; } } }
Green is home games whilst red means an away game:
Finally to filter only the regular season and not include pre-season games. This is done by using the 3rd character from the game id. 1 is pre-season whilst 2 is regular-season.
Once there was been one regular-season game this confirms that no more checks will be made for game type aiding efficiency in the filter.
$is_reg_season = false; foreach ($data['leagueSchedule']['gameDates'] as $games) { foreach ($games['games'] as $game) { if (!$is_reg_season) { $game_type_int = (int)substr($game['gameId'], 2, 1); if ($game_type_int === 2) { $is_reg_season = true; } } if ($is_reg_season) { //Gather and output from here } } }
A drained and empty Kennington reservoir images from a drone in early July 2024. The…
Merrimu Reservoir from drone. Click images to view larger.
Using FTP and PHP to get an array of file details such as size and…
Creating and using Laravel form requests to create cleaner code, separation and reusability for your…
Improving the default Laravel login and register views in such a simple manner but making…
Laravel validation for checking if a field value exists in the database. The validation rule…