From f08093ec1e8d330aea7379f147ba5a0072e76598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Fri, 24 Sep 2021 14:56:14 +0200 Subject: [PATCH] Improve create playlist from existing playlist tracks --- public/index.php | 50 +++++++++++++++++++++++++----------------------- template.php | 30 +++++++++++++++++++++-------- 2 files changed, 48 insertions(+), 32 deletions(-) diff --git a/public/index.php b/public/index.php index b955773..32680ec 100644 --- a/public/index.php +++ b/public/index.php @@ -49,35 +49,37 @@ $templateData = [ 'errors' => [], ]; -$selectedPlaylistId = ''; -if (isset($_GET['playlist'])) { - $selectedPlaylistId = $_GET['playlist']; -} - +$generatePlaylistFromPlaylist = isset($_GET['generate-playlist-from-playlist']); $generatePlaylistFromArtists = isset($_GET['generate-playlist-top-artists']); -if ($selectedPlaylistId) { - $playlist = $api->getPlaylist($selectedPlaylistId); - error_log('Will create new playlist from tracks in playlist '.$selectedPlaylistId.' "'.$playlist->name.'".'); +if ($generatePlaylistFromPlaylist) { + $selectedPlaylists = $_GET['selected-playlist']; + error_log('Will create new playlist with recommendations from playlists: '.join(', ', $selectedPlaylists).'".'); $recommendedTrackIds = []; - $playlistTracks = $playlist->tracks->items; - error_log('Found '.count($playlistTracks).' tracks.'); - foreach ($playlistTracks as $track) { - $artists = []; - foreach ($track->track->artists as $artist) { - $artists[] = $artist->name; - } - error_log('Track '.$track->track->id.' "'.$track->track->name.'" ('.join(', ', $artists).')'); - $recommendations = $api->getRecommendations([ - 'seed_tracks' => [$track->track->id], - 'limit' => 20 - ]); - error_log(' -> Got '.count($recommendations->tracks).' recommendatations.'); - foreach ($recommendations->tracks as $recommendedTrack) { - $recommendedTrackIds[$recommendedTrack->id] = 1; + foreach ($selectedPlaylists as $selectedPlaylistId) { + $playlist = $api->getPlaylist($selectedPlaylistId); + error_log('Will get recommendations from tracks in playlist '.$selectedPlaylistId.' "'.$playlist->name.'".'); + $playlistTracks = $playlist->tracks->items; + error_log('Found '.count($playlistTracks).' tracks.'); + foreach ($playlistTracks as $track) { + $artists = []; + foreach ($track->track->artists as $artist) { + $artists[] = $artist->name; + } + error_log('Track '.$track->track->id.' "'.$track->track->name.'" ('.join(', ', $artists).')'); + + $recommendations = $api->getRecommendations([ + 'seed_tracks' => [$track->track->id], + 'limit' => 20 + ]); + error_log(' -> Got '.count($recommendations->tracks).' recommendatations.'); + foreach ($recommendations->tracks as $recommendedTrack) { + $recommendedTrackIds[$recommendedTrack->id] = 1; + } } } + $recommendedTrackIds = array_keys($recommendedTrackIds); error_log('=> Got '.count($recommendedTrackIds).' unique recommendatations for this playlist.'); shuffle($recommendedTrackIds); @@ -136,7 +138,7 @@ if ($selectedPlaylistId) { $templateData['infos'][] = 'Ok created new playlist with '.count($pickedTrackIds).' tracks: '.$playlistLink; } else { $templateData['topArtists'] = $api->getMyTop('artists', ['limit' => 16, 'time_range' => 'short_term'])->items; - $templateData['playlists'] = $api->getUserPlaylists($user->id)->items; + $templateData['playlists'] = $api->getUserPlaylists($user->id, ['limit' => 30])->items; } require '../template.php'; diff --git a/template.php b/template.php index ec9d91a..3bbce5e 100644 --- a/template.php +++ b/template.php @@ -72,14 +72,28 @@ <?php } ?> <?php if (count($templateData['playlists'])) { ?> - <h3>Please pick a playlist to get recommendations from:</h3> - <div class="list-group"> - <?php foreach ($templateData['playlists'] as $playlist) { ?> - <a href="index.php?playlist=<?php echo $playlist->id; ?>" class="list-group-item list-group-item-action"> - <?php echo $playlist->name; ?> - </a> - <?php } ?> - </div> + <form class="clearfix"> + <legend>Generate playlist from tracks in existing playlist:</legend> + <ul class="list-unstyled row row-cols-2"> + <?php foreach ($templateData['playlists'] as $playlist) { ?> + <li class="col"> + <div class="custom-control custom-checkbox"> + <input + type="checkbox" + class="custom-control-input" + id="check-playlist-<?php echo $playlist->id; ?>" + name="selected-playlist[]" + value="<?php echo $playlist->id; ?>" + > + <label class="custom-control-label" for="check-playlist-<?php echo $playlist->id; ?>"> + <?php echo $playlist->name; ?> + </label> + </div> + </li> + <?php } ?> + </ul> + <button name="generate-playlist-from-playlist" type="submit" class="btn btn-secondary float-end">🎶 Generate!</button> + </form> <?php } ?> </div> -- GitLab