diff --git a/src/Service/SpotifyPlaylistService.php b/src/Service/SpotifyPlaylistService.php index 8104551da9c331f69679ed98ad09004fcea3f812..c5441eeb7d82baa054d886e653ccd14fda2e079e 100644 --- a/src/Service/SpotifyPlaylistService.php +++ b/src/Service/SpotifyPlaylistService.php @@ -3,6 +3,7 @@ namespace App\Service; use DateTime; +use SpotifyWebAPI\SpotifyWebAPIException; class SpotifyPlaylistService { @@ -163,8 +164,9 @@ class SpotifyPlaylistService $tracksCount = \count($selectedPlaylistTracks); // Split playlist in two tracks lists - $tracksList1 = $this->pickRandomTracksFromArray($selectedPlaylistTracks, max(intval($count / 5), intval($tracksCount / 5))); - $tracksList2 = $this->pickRandomTracksFromArray($selectedPlaylistTracks, max(intval($count / 5), intval($tracksCount / 5))); + $splittedTracksListLength = max(intval($count / 5), intval($tracksCount / 5)); + $tracksList1 = $this->pickRandomTracksFromArray($selectedPlaylistTracks, $splittedTracksListLength); + $tracksList2 = $this->pickRandomTracksFromArray($selectedPlaylistTracks, $splittedTracksListLength); // Directly pick first part of this playlist foreach ($tracksList1 as $trackId) { @@ -172,14 +174,21 @@ class SpotifyPlaylistService } // Get recommandations for other part - $chunks = array_chunk($tracksList2, 5); + $chunks = \array_chunk($tracksList2, 5); foreach ($chunks as $chunk) { - $recommendations = $api->getRecommendations([ - 'seed_tracks' => $chunk, - 'limit' => \count($chunk) - ]); - foreach ($recommendations->tracks as $recommendedTrack) { - $trackIds[$recommendedTrack->id] = $recommendedTrack; + try { + $recommendations = $api->getRecommendations([ + 'seed_tracks' => $chunk, + 'limit' => \count($chunk) + ]); + foreach ($recommendations->tracks as $recommendedTrack) { + $trackIds[$recommendedTrack->id] = $recommendedTrack->id; + } + } catch (SpotifyWebAPIException $e) { + // Failed on retrieve recommendations => add seed tracks instead + foreach ($chunk as $fallbackTrackId) { + $trackIds[$fallbackTrackId] = $fallbackTrackId; + } } } }