Skip to content
Snippets Groups Projects

Resolve "Create playlist from top played artists"

Merged Benoît Harrault requested to merge 7-create-playlist-from-top-played-artists into master
3 files
+ 72
2
Compare changes
  • Side-by-side
  • Inline

Files

+ 44
0
@@ -43,6 +43,7 @@ $user = $api->me();
@@ -43,6 +43,7 @@ $user = $api->me();
$templateData = [
$templateData = [
'user' => $user,
'user' => $user,
'playlists' => [],
'playlists' => [],
 
'topArtists' => [],
'infos' => [],
'infos' => [],
'errors' => [],
'errors' => [],
@@ -53,6 +54,8 @@ if (isset($_GET['playlist'])) {
@@ -53,6 +54,8 @@ if (isset($_GET['playlist'])) {
$selectedPlaylistId = $_GET['playlist'];
$selectedPlaylistId = $_GET['playlist'];
}
}
 
$generatePlaylistFromArtists = isset($_GET['generate-playlist-top-artists']);
 
if ($selectedPlaylistId) {
if ($selectedPlaylistId) {
$playlist = $api->getPlaylist($selectedPlaylistId);
$playlist = $api->getPlaylist($selectedPlaylistId);
error_log('Will create new playlist from tracks in playlist '.$selectedPlaylistId.' "'.$playlist->name.'".');
error_log('Will create new playlist from tracks in playlist '.$selectedPlaylistId.' "'.$playlist->name.'".');
@@ -88,10 +91,51 @@ if ($selectedPlaylistId) {
@@ -88,10 +91,51 @@ if ($selectedPlaylistId) {
'name' => $newPlaylistName,
'name' => $newPlaylistName,
]);
]);
 
$api->replacePlaylistTracks($newPlaylist->id, $pickedTrackIds);
 
$playlistLink = '<a href="'.$newPlaylist->external_urls->spotify.'">'.$newPlaylistName.'</a>';
 
$templateData['infos'][] = 'Ok created new playlist with '.count($pickedTrackIds).' tracks: '.$playlistLink;
 
} elseif ($generatePlaylistFromArtists) {
 
$selectedArtists = $_GET['selected-artist'];
 
error_log('Will create new playlist with filterted recommendations from artists: '.join(', ', $selectedArtists).'".');
 
$recommendedTrackIds = [];
 
 
foreach ($selectedArtists as $selectedArtist) {
 
error_log('Get recommendations for artist '.$selectedArtist.'');
 
$recommendations = $api->getRecommendations([
 
'seed_artists' => $selectedArtist,
 
'limit' => 100
 
]);
 
error_log(' -> Got '.count($recommendations->tracks).' recommendatations.');
 
 
// Filter by artist, remove duplicates
 
foreach ($recommendations->tracks as $recommendedTrack) {
 
$trackArtistInWantedArtists = false;
 
foreach ($recommendedTrack->artists as $trackArtist) {
 
if (\in_array($trackArtist->id, $selectedArtists)) {
 
$recommendedTrackIds[$recommendedTrack->id] = 1;
 
}
 
}
 
}
 
}
 
 
$recommendedTrackIds = array_keys($recommendedTrackIds);
 
error_log('=> Got '.count($recommendedTrackIds).' unique recommendatations.');
 
shuffle($recommendedTrackIds);
 
$pickedTrackIds = array_slice($recommendedTrackIds, 0, 50);
 
error_log('Keep '.count($pickedTrackIds).' random tracks.');
 
 
$now = new DateTime();
 
$newPlaylistName = 'Fresh playlist ['.$now->format('Y-m-d H:i:s').']';
 
error_log('Create new playlist "'.$newPlaylistName.'".');
 
$newPlaylist = $api->createPlaylist([
 
'name' => $newPlaylistName,
 
]);
 
$api->replacePlaylistTracks($newPlaylist->id, $pickedTrackIds);
$api->replacePlaylistTracks($newPlaylist->id, $pickedTrackIds);
$playlistLink = '<a href="'.$newPlaylist->external_urls->spotify.'">'.$newPlaylistName.'</a>';
$playlistLink = '<a href="'.$newPlaylist->external_urls->spotify.'">'.$newPlaylistName.'</a>';
$templateData['infos'][] = 'Ok created new playlist with '.count($pickedTrackIds).' tracks: '.$playlistLink;
$templateData['infos'][] = 'Ok created new playlist with '.count($pickedTrackIds).' tracks: '.$playlistLink;
} else {
} 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)->items;
}
}
Loading