Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • 11-improve-new-playlist-name-and-description
  • 15-add-a-play-now-button-on-created-playlist-message
  • 20-rename-playlist-with-artists-names
  • 30-save-spotify-personal-token-for-external-use
  • 37-batch-update-recently-played-tracks
  • 40-add-more-default-playlists-in-quick-create-feature
  • 58-create-api-for-main-routes
  • 60-display-last-tracks-and-some-dump-metadata
  • master
9 results

Target

Select target project
  • web/spotify
1 result
Select Git revision
  • 11-improve-new-playlist-name-and-description
  • 15-add-a-play-now-button-on-created-playlist-message
  • 20-rename-playlist-with-artists-names
  • 30-save-spotify-personal-token-for-external-use
  • 37-batch-update-recently-played-tracks
  • 40-add-more-default-playlists-in-quick-create-feature
  • 58-create-api-for-main-routes
  • 60-display-last-tracks-and-some-dump-metadata
  • master
9 results
Show changes
Commits on Source (2)
...@@ -61,6 +61,9 @@ try { ...@@ -61,6 +61,9 @@ try {
$topArtistsCount = 40; $topArtistsCount = 40;
$playlistsCount = 24; $playlistsCount = 24;
$tracksCountInShortPlaylist = 50;
$tracksCountInLongPlaylist = 100;
$templateData = [ $templateData = [
'user' => $user, 'user' => $user,
'playlists' => [], 'playlists' => [],
...@@ -76,153 +79,181 @@ $generatePlaylistFromSelectedTopArtists = isset($_GET['generate-playlist-top-art ...@@ -76,153 +79,181 @@ $generatePlaylistFromSelectedTopArtists = isset($_GET['generate-playlist-top-art
$generatePlaylistFromRandomTopArtists = isset($_GET['generate-playlist-random-top-artists']); $generatePlaylistFromRandomTopArtists = isset($_GET['generate-playlist-random-top-artists']);
$showPlaylistContent = isset($_GET['show-playlist']); $showPlaylistContent = isset($_GET['show-playlist']);
$action = '';
if ($generatePlaylistFromPlaylist) { if ($generatePlaylistFromPlaylist) {
$selectedPlaylists = $_GET['selected-playlist']; $action = 'generate-playlist-from-playlist';
printLog('Will create new playlist with recommendations from playlists: '.join(', ', $selectedPlaylists).'".'); } elseif ($generatePlaylistFromSelectedTopArtists) {
$recommendedTrackIds = []; $action = 'generate-playlist-from-selected-top-artists';
} elseif ($generatePlaylistFromRandomTopArtists) {
$shouldFilterByArtists = isset($_GET['check-playlist-filter-artists']); $action = 'generate-playlist-from-random-top-artists';
printLog('Filter by artists in source playlists: '.($shouldFilterByArtists ? 'yes' : 'no')); } elseif ($showPlaylistContent) {
$action = 'show-playlist-content';
$generateLongPlaylist = isset($_GET['check-playlist-long-playlist']); } else {
printLog('Generate long playlist: '.($generateLongPlaylist ? 'yes' : 'no')); }
$artistsInSourcePlaylists = [];
foreach ($selectedPlaylists as $selectedPlaylistId) {
$playlist = $api->getPlaylist($selectedPlaylistId);
printLog('Will get recommendations from tracks in playlist "'.$playlist->name.'".');
$playlistTracks = $playlist->tracks->items;
printLog('Found '.count($playlistTracks).' tracks.');
foreach ($playlistTracks as $track) {
$artists = [];
foreach ($track->track->artists as $artist) {
$artists[] = $artist->name;
$artistsInSourcePlaylists[$artist->id] = 1;
}
printLog('Track "'.$track->track->name.'" ('.join(', ', $artists).')');
$recommendations = $api->getRecommendations([ switch ($action) {
'seed_tracks' => [$track->track->id], case 'generate-playlist-from-playlist':
'limit' => ($generateLongPlaylist ? 50 : 30) $selectedPlaylists = $_GET['selected-playlist'];
]); printLog('Will create new playlist with recommendations from playlists: '.join(', ', $selectedPlaylists).'".');
printLog(' -> Got '.count($recommendations->tracks).' recommendatations.'); $recommendedTrackIds = [];
foreach ($recommendations->tracks as $recommendedTrack) {
$recommendedTrackIds[$recommendedTrack->id] = $recommendedTrack; $shouldFilterByArtists = isset($_GET['check-playlist-filter-artists']);
} printLog('Filter by artists in source playlists: '.($shouldFilterByArtists ? 'yes' : 'no'));
}
} $generateLongPlaylist = isset($_GET['check-playlist-long-playlist']);
printLog('Generate long playlist: '.($generateLongPlaylist ? 'yes' : 'no'));
if ($shouldFilterByArtists) {
$artistsInSourcePlaylists = array_keys($artistsInSourcePlaylists); $artistsInSourcePlaylists = [];
printLog('Filter by artists found in source playlists ('.count($artistsInSourcePlaylists).')');
foreach ($selectedPlaylists as $selectedPlaylistId) {
$filteredTrackIds = []; $playlist = $api->getPlaylist($selectedPlaylistId);
foreach ($recommendedTrackIds as $trackId => $track) { printLog('Will get recommendations from tracks in playlist "'.$playlist->name.'".');
$trackArtistInWantedArtists = false; $playlistTracks = $playlist->tracks->items;
foreach ($track->artists as $trackArtist) { printLog('Found '.count($playlistTracks).' tracks.');
if (\in_array($trackArtist->id, $artistsInSourcePlaylists)) { foreach ($playlistTracks as $track) {
$filteredTrackIds[$track->id] = 1; $artists = [];
foreach ($track->track->artists as $artist) {
$artists[] = $artist->name;
$artistsInSourcePlaylists[$artist->id] = 1;
}
printLog('Track "'.$track->track->name.'" ('.join(', ', $artists).')');
$recommendations = $api->getRecommendations([
'seed_tracks' => [$track->track->id],
'limit' => ($generateLongPlaylist ? 50 : 30)
]);
printLog(' -> Got '.count($recommendations->tracks).' recommendatations.');
foreach ($recommendations->tracks as $recommendedTrack) {
$recommendedTrackIds[$recommendedTrack->id] = $recommendedTrack;
} }
} }
} }
$recommendedTrackIds = $filteredTrackIds;
}
$newPlaylist = createPlaylistWithRandomTracks($api, $recommendedTrackIds, $generateLongPlaylist ? 100 : 50);
$templateData['infos'][] = getCreatedPlaylistInformationMessage($api, $newPlaylist);
} elseif ($generatePlaylistFromSelectedTopArtists) {
$selectedArtists = $_GET['selected-artist'];
printLog('Will create new playlist with filterted recommendations from artists: '.join(', ', $selectedArtists).'".');
$recommendedTrackIds = [];
$shouldFilterByArtists = isset($_GET['check-top-artist-filter-artists']); if ($shouldFilterByArtists) {
printLog('Filter by artists in selection: '.($shouldFilterByArtists ? 'yes' : 'no')); $artistsInSourcePlaylists = array_keys($artistsInSourcePlaylists);
printLog('Filter by artists found in source playlists ('.count($artistsInSourcePlaylists).')');
$generateLongPlaylist = isset($_GET['check-top-artist-long-playlist']); $filteredTrackIds = [];
printLog('Generate long playlist: '.($generateLongPlaylist ? 'yes' : 'no')); foreach ($recommendedTrackIds as $trackId => $track) {
foreach ($selectedArtists as $selectedArtist) {
printLog('Get recommendations for artist '.$selectedArtist.'');
$recommendations = $api->getRecommendations([
'seed_artists' => $selectedArtist,
'limit' => 100
]);
printLog(' -> Got '.count($recommendations->tracks).' recommendatations.');
// Filter by artist if requested, remove duplicates
foreach ($recommendations->tracks as $recommendedTrack) {
if ($shouldFilterByArtists) {
$trackArtistInWantedArtists = false; $trackArtistInWantedArtists = false;
foreach ($recommendedTrack->artists as $trackArtist) { foreach ($track->artists as $trackArtist) {
if (\in_array($trackArtist->id, $selectedArtists)) { if (\in_array($trackArtist->id, $artistsInSourcePlaylists)) {
$recommendedTrackIds[$recommendedTrack->id] = 1; $filteredTrackIds[$track->id] = 1;
} }
} }
} else {
$recommendedTrackIds[$recommendedTrack->id] = 1;
} }
$recommendedTrackIds = $filteredTrackIds;
} }
}
$newPlaylist = createPlaylistWithRandomTracks($api, $recommendedTrackIds, $generateLongPlaylist ? 100 : 50);
$templateData['infos'][] = getCreatedPlaylistInformationMessage($api, $newPlaylist);
} elseif ($generatePlaylistFromRandomTopArtists) { $newPlaylist = createPlaylistWithRandomTracks(
$api,
$recommendedTrackIds,
$generateLongPlaylist ? $tracksCountInLongPlaylist : $tracksCountInShortPlaylist
);
$templateData['infos'][] = getCreatedPlaylistInformationMessage($api, $newPlaylist);
break;
case 'generate-playlist-from-selected-top-artists':
$selectedArtists = $_GET['selected-artist'];
printLog('Will create new playlist with filterted recommendations from artists: '.join(', ', $selectedArtists).'".');
$recommendedTrackIds = [];
$shouldFilterByArtists = isset($_GET['check-top-artist-filter-artists']);
printLog('Filter by artists in selection: '.($shouldFilterByArtists ? 'yes' : 'no'));
$generateLongPlaylist = isset($_GET['check-top-artist-long-playlist']);
printLog('Generate long playlist: '.($generateLongPlaylist ? 'yes' : 'no'));
foreach ($selectedArtists as $selectedArtist) {
printLog('Get recommendations for artist '.$selectedArtist.'');
$recommendations = $api->getRecommendations([
'seed_artists' => $selectedArtist,
'limit' => 100
]);
printLog(' -> Got '.count($recommendations->tracks).' recommendatations.');
$countInTopArtists = random_int(4, 6); // Filter by artist if requested, remove duplicates
$countInLessTopArtists = random_int(4, 6); foreach ($recommendations->tracks as $recommendedTrack) {
$limitBetweenTopAndLessTop = $topArtistsCount; if ($shouldFilterByArtists) {
$selectedArtists = getRandomArtistsFromTopArtists($api, $countInTopArtists, $countInLessTopArtists, $limitBetweenTopAndLessTop); $trackArtistInWantedArtists = false;
printLog('Will create new playlist with filterted recommendations from random artists: '.join(', ', $selectedArtists).'".'); foreach ($recommendedTrack->artists as $trackArtist) {
$recommendedTrackIds = []; if (\in_array($trackArtist->id, $selectedArtists)) {
$recommendedTrackIds[$recommendedTrack->id] = 1;
$shouldFilterByArtists = isset($_GET['check-top-artist-filter-artists']); }
printLog('Filter by artists in selection: '.($shouldFilterByArtists ? 'yes' : 'no'));
$generateLongPlaylist = isset($_GET['check-top-artist-long-playlist']);
printLog('Generate long playlist: '.($generateLongPlaylist ? 'yes' : 'no'));
foreach ($selectedArtists as $selectedArtist) {
printLog('Get recommendations for artist '.$selectedArtist.'');
$recommendations = $api->getRecommendations([
'seed_artists' => $selectedArtist,
'limit' => 100
]);
printLog(' -> Got '.count($recommendations->tracks).' recommendatations.');
// Filter by artist if requested, remove duplicates
foreach ($recommendations->tracks as $recommendedTrack) {
if ($shouldFilterByArtists) {
$trackArtistInWantedArtists = false;
foreach ($recommendedTrack->artists as $trackArtist) {
if (\in_array($trackArtist->id, $selectedArtists)) {
$recommendedTrackIds[$recommendedTrack->id] = 1;
} }
} else {
$recommendedTrackIds[$recommendedTrack->id] = 1;
} }
} else {
$recommendedTrackIds[$recommendedTrack->id] = 1;
} }
} }
}
$newPlaylist = createPlaylistWithRandomTracks($api, $recommendedTrackIds, $generateLongPlaylist ? 100 : 50);
$templateData['infos'][] = getCreatedPlaylistInformationMessage($api, $newPlaylist);
} elseif ($showPlaylistContent) { $newPlaylist = createPlaylistWithRandomTracks(
printLog('Get content of playlist: '.($generateLongPlaylist ? 'yes' : 'no')); $api,
$recommendedTrackIds,
$generateLongPlaylist ? $tracksCountInLongPlaylist : $tracksCountInShortPlaylist
);
$templateData['infos'][] = getCreatedPlaylistInformationMessage($api, $newPlaylist);
break;
case 'generate-playlist-from-random-top-artists':
$countInTopArtists = random_int(4, 6);
$countInLessTopArtists = random_int(4, 6);
$limitBetweenTopAndLessTop = $topArtistsCount;
$selectedArtists = getRandomArtistsFromTopArtists(
$api,
$countInTopArtists,
$countInLessTopArtists,
$limitBetweenTopAndLessTop
);
printLog('Will create new playlist with filterted recommendations from random artists: '.join(', ', $selectedArtists).'".');
$recommendedTrackIds = [];
$shouldFilterByArtists = isset($_GET['check-top-artist-filter-artists']);
printLog('Filter by artists in selection: '.($shouldFilterByArtists ? 'yes' : 'no'));
$generateLongPlaylist = isset($_GET['check-top-artist-long-playlist']);
printLog('Generate long playlist: '.($generateLongPlaylist ? 'yes' : 'no'));
foreach ($selectedArtists as $selectedArtist) {
printLog('Get recommendations for artist '.$selectedArtist.'');
$recommendations = $api->getRecommendations([
'seed_artists' => $selectedArtist,
'limit' => 100
]);
printLog(' -> Got '.count($recommendations->tracks).' recommendations.');
$playlistId = $_GET['id']; // Filter by artist if requested, remove duplicates
$playlist = $api->getPlaylist($playlistId); foreach ($recommendations->tracks as $recommendedTrack) {
$templateData['infos'][] = getPlaylistInformationMessage($api, $playlist); if ($shouldFilterByArtists) {
$templateData['playlist'] = createDisplayablePlaylist($playlist); $trackArtistInWantedArtists = false;
foreach ($recommendedTrack->artists as $trackArtist) {
if (\in_array($trackArtist->id, $selectedArtists)) {
$recommendedTrackIds[$recommendedTrack->id] = 1;
}
}
} else {
$recommendedTrackIds[$recommendedTrack->id] = 1;
}
}
}
} else { $newPlaylist = createPlaylistWithRandomTracks(
$templateData['topArtists'] = $api->getMyTop('artists', ['limit' => $topArtistsCount, 'time_range' => 'short_term'])->items; $api,
$templateData['playlists'] = $api->getUserPlaylists($user['id'], ['limit' => $playlistsCount])->items; $recommendedTrackIds,
$generateLongPlaylist ? $tracksCountInLongPlaylist : $tracksCountInShortPlaylist
);
$templateData['infos'][] = getCreatedPlaylistInformationMessage($api, $newPlaylist);
break;
case 'show-playlist-content':
printLog('Get content of playlist');
$playlistId = $_GET['id'];
$playlist = $api->getPlaylist($playlistId);
$templateData['infos'][] = getPlaylistInformationMessage($api, $playlist);
$templateData['playlist'] = createDisplayablePlaylist($playlist);
break;
default:
$templateData['topArtists'] = $api->getMyTop('artists', ['limit' => $topArtistsCount, 'time_range' => 'short_term'])->items;
$templateData['playlists'] = $api->getUserPlaylists($user['id'], ['limit' => $playlistsCount])->items;
break;
} }
require '../template.php'; require '../template.php';
...@@ -11,17 +11,17 @@ function generateShowPlaylistUrl($playlistId) { ...@@ -11,17 +11,17 @@ function generateShowPlaylistUrl($playlistId) {
return '/view-playlist-'.$playlistId; return '/view-playlist-'.$playlistId;
} }
function generatePlaylistName() function generatePlaylistName($prefix)
{ {
$now = new DateTime(); $now = new DateTime();
$name = 'Fresh playlist ['.$now->format('Y-m-d H:i:s').']'; $name = $prefix.' ['.$now->format('Y-m-d H:i:s').']';
return $name; return $name;
} }
function createEmptyPlaylist($api) function createEmptyPlaylist($api, $playlistName = 'Auto playlist')
{ {
$name = generatePlaylistName(); $name = generatePlaylistName($playlistName);
printLog('Create new playlist "'.$name.'".'); printLog('Create new playlist "'.$name.'".');
$playlist = $api->createPlaylist([ $playlist = $api->createPlaylist([
'name' => $name, 'name' => $name,
...@@ -30,11 +30,16 @@ function createEmptyPlaylist($api) ...@@ -30,11 +30,16 @@ function createEmptyPlaylist($api)
return $playlist; return $playlist;
} }
function pickRandomTracksFromArray($recommendedTrackIds, $count = 50) function pickRandomTracksFromArray($recommendedTrackIds, $count = 0)
{ {
$recommendedTrackIds = array_keys($recommendedTrackIds); $recommendedTrackIds = array_keys($recommendedTrackIds);
printLog('=> Got '.count($recommendedTrackIds).' unique recommendatations.'); printLog('=> Got '.count($recommendedTrackIds).' unique tracks.');
shuffle($recommendedTrackIds); shuffle($recommendedTrackIds);
if (!$count) {
return $recommendedTrackIds;
}
$pickedTrackIds = array_slice($recommendedTrackIds, 0, $count); $pickedTrackIds = array_slice($recommendedTrackIds, 0, $count);
printLog('Keep '.count($pickedTrackIds).' random tracks.'); printLog('Keep '.count($pickedTrackIds).' random tracks.');
...@@ -77,7 +82,7 @@ function getRandomArtistsFromTopArtists($api, $countInTopArtists, $countInLessTo ...@@ -77,7 +82,7 @@ function getRandomArtistsFromTopArtists($api, $countInTopArtists, $countInLessTo
function createPlaylistWithRandomTracks($api, $trackIds, $count = 50) function createPlaylistWithRandomTracks($api, $trackIds, $count = 50)
{ {
$playlist = createEmptyPlaylist($api); $playlist = createEmptyPlaylist($api, 'Fresh playlist');
$pickedTrackIds = pickRandomTracksFromArray($trackIds, $count); $pickedTrackIds = pickRandomTracksFromArray($trackIds, $count);
$api->replacePlaylistTracks($playlist->id, $pickedTrackIds); $api->replacePlaylistTracks($playlist->id, $pickedTrackIds);
......