From 13c5c2f37c6e68ad3d1a4d286e52aee2370ad9bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Thu, 1 Sep 2022 11:53:52 +0200 Subject: [PATCH] Fix generate tambouille mix (fallback if error in recommendations) --- src/Service/SpotifyPlaylistService.php | 27 +++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/Service/SpotifyPlaylistService.php b/src/Service/SpotifyPlaylistService.php index 8104551..c5441ee 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; + } } } } -- GitLab