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 = [
'scope' => [
'playlist-read-private',
'playlist-modify-private',
'playlist-modify-public',
'user-read-private',
],
'state' => $state,
......
......@@ -25,7 +25,8 @@ if (!$accessToken) {
$session = new SpotifyWebAPI\Session(
$CLIENT_ID,
$CLIENT_SECRET
$CLIENT_SECRET,
$REDIRECT_URI
);
// Use previously requested tokens fetched from session
......@@ -37,12 +38,11 @@ if ($accessToken) {
$session->refreshAccessToken($refreshToken);
}
$scopes = $session->getScope();
$options = [
'scope' => [
'playlist-read-private',
'playlist-modify-private',
'playlist-modify-public',
'user-read-private',
],
'auto_refresh' => true,
......@@ -59,12 +59,62 @@ $_SESSION['refreshToken'] = $session->getRefreshToken();
$user = $api->me();
$templateData = [];
$templateData['user'] = $user;
$templateData['userImageUrl'] = '';
if ($user->images[0]) {
$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;
}
require '../template.php';
......@@ -22,6 +22,7 @@
<a href="<?php echo $templateData['user']->external_urls->spotify; ?>" class="btn btn-primary">View profile</a>
</div>
<div class="card-footer">
<a href="index.php" class="card-link">refresh</a>
<a href="?logout" class="card-link">disconnect</a>
</div>
</div>
......@@ -29,13 +30,28 @@
</div>
<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">
<?php
foreach ($templateData['playlists'] as $playlist) {
echo '<a href="' . $playlist->external_urls->spotify . '" class="list-group-item list-group-item-action">' . $playlist->name . '</a>';
}
?>
<?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>
<?php } ?>
</div>
</div>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment