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

Merge branch '2-add-feature-create-new-playlist-from-tracks-in-existing-playlist' into 'master'

Resolve "Add feature "create new playlist from tracks in existing playlist""

Closes #2

See merge request !2
parents 064755db a656f650
No related branches found
No related tags found
1 merge request!2Resolve "Add feature "create new playlist from tracks in existing playlist""
...@@ -18,6 +18,7 @@ $options = [ ...@@ -18,6 +18,7 @@ $options = [
'scope' => [ 'scope' => [
'playlist-read-private', 'playlist-read-private',
'playlist-modify-private', 'playlist-modify-private',
'playlist-modify-public',
'user-read-private', 'user-read-private',
], ],
'state' => $state, 'state' => $state,
......
...@@ -25,7 +25,8 @@ if (!$accessToken) { ...@@ -25,7 +25,8 @@ if (!$accessToken) {
$session = new SpotifyWebAPI\Session( $session = new SpotifyWebAPI\Session(
$CLIENT_ID, $CLIENT_ID,
$CLIENT_SECRET $CLIENT_SECRET,
$REDIRECT_URI
); );
// Use previously requested tokens fetched from session // Use previously requested tokens fetched from session
...@@ -37,12 +38,11 @@ if ($accessToken) { ...@@ -37,12 +38,11 @@ if ($accessToken) {
$session->refreshAccessToken($refreshToken); $session->refreshAccessToken($refreshToken);
} }
$scopes = $session->getScope();
$options = [ $options = [
'scope' => [ 'scope' => [
'playlist-read-private', 'playlist-read-private',
'playlist-modify-private', 'playlist-modify-private',
'playlist-modify-public',
'user-read-private', 'user-read-private',
], ],
'auto_refresh' => true, 'auto_refresh' => true,
...@@ -59,12 +59,62 @@ $_SESSION['refreshToken'] = $session->getRefreshToken(); ...@@ -59,12 +59,62 @@ $_SESSION['refreshToken'] = $session->getRefreshToken();
$user = $api->me(); $user = $api->me();
$templateData = []; $templateData = [];
$templateData['user'] = $user; $templateData['user'] = $user;
$templateData['userImageUrl'] = ''; $templateData['userImageUrl'] = '';
if ($user->images[0]) { if ($user->images[0]) {
$templateData['userImageUrl'] = $user->images[0]->url; $templateData['userImageUrl'] = $user->images[0]->url;
} }
$templateData['infos'] = [];
$templateData['errors'] = [];
$selectedPlaylistId = '';
if (isset($_GET['playlist'])) {
$selectedPlaylistId = $_GET['playlist'];
}
$templateData['playlists'] = [];
if ($selectedPlaylistId) {
$playlist = $api->getPlaylist($selectedPlaylistId);
error_log('Will create new playlist from tracks in playlist '.$selectedPlaylistId.' "'.$playlist->name.'".');
$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;
}
}
$recommendedTrackIds = array_keys($recommendedTrackIds);
error_log('=> Got '.count($recommendedTrackIds).' unique recommendatations for this playlist.');
shuffle($recommendedTrackIds);
$pickedTrackIds = array_slice($recommendedTrackIds, 0, 50);
error_log('Keep '.count($pickedTrackIds).' 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);
$playlistLink = '<a href="'.$newPlaylist->external_urls->spotify.'">'.$newPlaylistName.'</a>';
$templateData['infos'][] = 'Ok created new playlist with '.count($pickedTrackIds).' tracks: '.$playlistLink;
} else {
$templateData['playlists'] = $api->getUserPlaylists($user->id)->items; $templateData['playlists'] = $api->getUserPlaylists($user->id)->items;
}
require '../template.php'; require '../template.php';
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
<a href="<?php echo $templateData['user']->external_urls->spotify; ?>" class="btn btn-primary">View profile</a> <a href="<?php echo $templateData['user']->external_urls->spotify; ?>" class="btn btn-primary">View profile</a>
</div> </div>
<div class="card-footer"> <div class="card-footer">
<a href="index.php" class="card-link">refresh</a>
<a href="?logout" class="card-link">disconnect</a> <a href="?logout" class="card-link">disconnect</a>
</div> </div>
</div> </div>
...@@ -29,13 +30,28 @@ ...@@ -29,13 +30,28 @@
</div> </div>
<div class="col-md-10"> <div class="col-md-10">
<?php if (count($templateData['errors'])) { ?>
<?php foreach ($templateData['errors'] as $message) { ?>
<div class="alert alert-warning" role="alert"><?php echo $message; ?></div>
<?php } ?>
<?php } ?>
<?php if (count($templateData['infos'])) { ?>
<?php foreach ($templateData['infos'] as $message) { ?>
<div class="alert alert-primary" role="alert"><?php echo $message; ?></div>
<?php } ?>
<?php } ?>
<?php if (count($templateData['playlists'])) { ?>
<h3>Please pick a playlist to get recommendations from:</h3>
<div class="list-group"> <div class="list-group">
<?php <?php foreach ($templateData['playlists'] as $playlist) { ?>
foreach ($templateData['playlists'] as $playlist) { <a href="index.php?playlist=<?php echo $playlist->id; ?>" class="list-group-item list-group-item-action">
echo '<a href="' . $playlist->external_urls->spotify . '" class="list-group-item list-group-item-action">' . $playlist->name . '</a>'; <?php echo $playlist->name; ?>
} </a>
?> <?php } ?>
</div> </div>
<?php } ?>
</div> </div>
</div> </div>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment