jwilsson / spotify-web-api-php

A PHP wrapper for Spotify's Web API.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

How to run in command line?

Egregius opened this issue · comments

Is there a way to use this in command line?
I'd like to create a script where my playlists get shuffled during the night.
I have the script working in a browser but would like to execute it by cron.

$session->requestAccessToken($_GET['code']);
$api->setAccessToken($session->getAccessToken());
$playlists = $api->getUserPlaylists('egregiusspotify', ['limit' => 50]);
foreach ($playlists->items as $playlist) {
$nrs=array_fill(0, $playlist->tracks->total, null);
while (count($nrs)>0) {
$nr=array_rand($nrs, 1);
unset($nrs[$nr]);
$api->reorderPlaylistTracks($playlist->id, [
'range_start' => $nr,
'insert_before' => 0,
]);
usleep(40000);
}
}

Thanks for your ideas.

Hey!
I'd use the refresh token returned when requesting an access token (retrievable with $session->getRefreshToken()) to request a new access token each time the script is run. The refresh token will change each time so be sure to store it between runs.

Hope this helps you out!

Great, thanks!
Think I got it working.

$api = new SpotifyWebAPI\SpotifyWebAPI();
$stmt = $db->query("SELECT refreshToken FROM token;");
while ($row=$stmt->fetch(PDO::FETCH_ASSOC)) $token=$row;
$session->refreshAccessToken($token['refreshToken']);
$accessToken = $session->getAccessToken();
$refreshToken = $session->getRefreshToken();
$api->setAccessToken($accessToken);
if ($refreshToken!=$token['refreshToken']) {
lg('New refresh token '.$refreshToken);
$stmt = $db->prepare("UPDATE token SET refreshToken = :refreshToken;");
$opts = array(':refreshToken'=>$refreshToken);
$stmt->execute($opts);
}

Now need to figure out how to handle 'too many requests' errors. Already have a 1.5 second sleep between each request.

Awesome!

Sounds like the auto_retry option could be of help here, it'll automatically sleep the amount of time needed.

Looks good and stable now. Thank you for your responses!
Finally a true shuffle for my huge playlists 👯‍♂️