'authorization_code', 'code' => $code, 'redirect_uri' => REDIRECT_URI ]; $token_data = http_build_query($token_data); $token_opts = [ 'http' => [ 'method' => 'POST', /*'header' => "Content-type: application/x-www-form-urlencoded\r\n" . "Content-Length: " . strlen($token_data) . "\r\n" . "Authorization: Basic " . base64_encode('868e2cba00de4819900dd8a647a7ba7d:' . CLIENT_SECRET) . "\r\n",*/ 'header' => "Authorization: Basic " . base64_encode('868e2cba00de4819900dd8a647a7ba7d:' . CLIENT_SECRET) . " \r\n", 'content' => $token_data ] ]; $token_context = stream_context_create($token_opts); $spot_req = file_get_contents(AUTH_URL . 'api/token', false, $token_context); echo $spot_req; $spot_json = json_decode($spot_req, true); $spot_token = $spot_json['access_token']; $me_opts = [ 'http' => [ 'method' => 'GET', 'header' => 'Authorization: Bearer ' . $spot_token . "\r\n" ] ]; $me_context = stream_context_create($me_opts); $me_resp = file_get_contents(BASE_URL . 'me', false, $me_context); $me_json = json_decode($me_resp, true); $me_id = $me_json['id']; echo '
'; print_r($me_resp); $html = file_get_contents('https://www.marketplace.org/latest-music'); $DOM = new DOMDocument; $DOM->loadHTML($html); $headers = $DOM->getElementsByTagName('h2'); $divs = $DOM->getElementsByTagName('div'); $date_headers = []; $music_group = []; foreach ($headers as $header) { if ($header->hasAttribute('class') && $header->getAttribute('class') === 'river--hed') { $date_headers[] = $header->nodeValue; } } foreach ($divs as $div) { if ($div->hasAttribute('class') && $div->getAttribute('class') === 'episode-music') { $songs = []; foreach ($div->childNodes as $row) { $children = $row->childNodes[0]->childNodes; $songs[] = [ 'title' => $children[0]->nodeValue, 'artist' => $children[1]->nodeValue ]; } $music_group[] = $songs; } } echo '
'; print_r($date_headers); echo '
'; print_r($music_group); #TODO Check if this month's playlist exists first $playlist_data = [ 'name' => 'March Marketplace Tracks' ]; $playlist_opts = [ 'http' => [ 'method' => 'POST', 'header' => 'Authorization: Bearer ' . $spot_token . "\r\n" . 'Content-Type application/json \r\n', 'content' => json_encode($playlist_data) ] ]; $playlist_context = stream_context_create($playlist_opts); $playlist_req = file_get_contents(BASE_URL . 'users/' . $me_id . '/playlists', false, $playlist_context); $playlist_json = json_decode($playlist_req, true); $playlist_id = $playlist_json['id']; echo '
' . $playlist_id; $uris = []; for ($i = count($music_group) - 1; $i >= 0; $i--) { $track_opts = [ 'http' => [ 'method' => 'GET', 'header' => 'Authorization: Bearer ' . $spot_token . "\r\n" ] ]; $track_context = stream_context_create($track_opts); foreach ($music_group[$i] as $song_info) { $track_search_url = BASE_URL . 'search?q=track:' . urlencode($song_info['title']) . '+artist:' . urlencode($song_info['artist']) . '&type=track'; echo '
' . $track_search_url; echo '
'; $track_req = file_get_contents($track_search_url, false, $track_context); $track_json = json_decode($track_req, true); print_r($track_json); $uris[] = $track_json['tracks']['items'][0]['uri']; #rate limit sleep(1); } } $update_data = [ 'uris' => array_values(array_filter($uris, function($uri) {return !is_null($uri);} )) ]; echo '
update_data
'; print_r($update_data); $update_opts = [ 'http' => [ 'method' => 'POST', 'header' => 'Authorization: Bearer ' . $spot_token . "\r\n" . 'Content-Type application/json \r\n', 'content' => json_encode($update_data) ] ]; $update_context = stream_context_create($update_opts); $update_url = BASE_URL . 'users/' . $me_id . '/playlists/' . $playlist_id . '/tracks'; echo '
' . $update_url; echo '
'; echo '
' . count($uris); echo '
'; print_r(json_encode($update_data)); $update_req = file_get_contents(BASE_URL . 'users/' . $me_id . '/playlists/' . $playlist_id . '/tracks', false, $update_context);