Skip to content
Snippets Groups Projects
Commit 509782a9 authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Merge branch '39-improve-clean-code' into 'master'

Resolve "Improve/clean code"

Closes #39

See merge request !36
parents 35e20a2f eb0b9b89
No related branches found
No related tags found
1 merge request!36Resolve "Improve/clean code"
...@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment