5 const BASE_URL
= 'https://api.spotify.com/v1/';
6 const AUTH_URL
= 'https://accounts.spotify.com/';
7 #TODO correctly get tracks only for current month as well as only new tracks
10 $code = $_GET['code'];
16 #Handle Spotify Token Authorization
19 'grant_type' => 'authorization_code',
21 'redirect_uri' => REDIRECT_URI
23 $token_data = http_build_query($token_data);
28 /*'header' => "Content-type: application/x-www-form-urlencoded\r\n"
29 . "Content-Length: " . strlen($token_data) . "\r\n"
30 . "Authorization: Basic " . base64_encode('868e2cba00de4819900dd8a647a7ba7d:' . CLIENT_SECRET) . "\r\n",*/
31 'header' => "Authorization: Basic " . base64_encode('868e2cba00de4819900dd8a647a7ba7d:' . CLIENT_SECRET
) . " \r\n",
32 'content' => $token_data
36 $token_context = stream_context_create($token_opts);
38 $spot_req = file_get_contents(AUTH_URL
. 'api/token', false, $token_context);
41 $spot_json = json_decode($spot_req, true);
43 $spot_token = $spot_json['access_token'];
48 'header' => 'Authorization: Bearer ' . $spot_token . "\r\n"
52 $me_context = stream_context_create($me_opts);
54 $me_resp = file_get_contents(BASE_URL
. 'me', false, $me_context);
55 $me_json = json_decode($me_resp, true);
56 $me_id = $me_json['id'];
61 $html = file_get_contents('https://www.marketplace.org/latest-music');
62 $DOM = new DOMDocument
;
63 $DOM->loadHTML($html);
64 $headers = $DOM->getElementsByTagName('h2');
65 $divs = $DOM->getElementsByTagName('div');
70 foreach ($headers as $header) {
71 if ($header->hasAttribute('class') && $header->getAttribute('class') === 'river--hed') {
72 $date_headers[] = $header->nodeValue
;
75 foreach ($divs as $div) {
76 if ($div->hasAttribute('class') && $div->getAttribute('class') === 'episode-music') {
78 foreach ($div->childNodes
as $row) {
79 $children = $row->childNodes
[0]->childNodes
;
81 'title' => $children[0]->nodeValue
,
82 'artist' => $children[1]->nodeValue
85 $music_group[] = $songs;
91 print_r($date_headers);
94 print_r($music_group);
96 #TODO Check if this month's playlist exists first
99 'name' => 'March Marketplace Tracks'
105 'header' => 'Authorization: Bearer ' . $spot_token . "\r\n"
106 . 'Content-Type application/json \r\n',
107 'content' => json_encode($playlist_data)
111 $playlist_context = stream_context_create($playlist_opts);
113 $playlist_req = file_get_contents(BASE_URL
. 'users/' . $me_id . '/playlists', false, $playlist_context);
115 $playlist_json = json_decode($playlist_req, true);
117 $playlist_id = $playlist_json['id'];
119 echo '<br />' . $playlist_id;
123 for ($i = count($music_group) - 1; $i >= 0; $i--) {
128 'header' => 'Authorization: Bearer ' . $spot_token . "\r\n"
132 $track_context = stream_context_create($track_opts);
134 foreach ($music_group[$i] as $song_info) {
136 $track_search_url = BASE_URL
. 'search?q=track:' . urlencode($song_info['title']) . '+artist:' . urlencode($song_info['artist']) . '&type=track';
138 echo '<br />' . $track_search_url;
141 $track_req = file_get_contents($track_search_url, false, $track_context);
142 $track_json = json_decode($track_req, true);
144 print_r($track_json);
146 $uris[] = $track_json['tracks']['items'][0]['uri'];
156 'uris' => array_values(array_filter($uris, function($uri) {return !is_null($uri);} ))
159 echo '<br /> update_data <br />';
160 print_r($update_data);
165 'header' => 'Authorization: Bearer ' . $spot_token . "\r\n"
166 . 'Content-Type application/json \r\n',
167 'content' => json_encode($update_data)
171 $update_context = stream_context_create($update_opts);
172 $update_url = BASE_URL
. 'users/' . $me_id . '/playlists/' . $playlist_id . '/tracks';
173 echo '<br />' . $update_url;
175 echo '<br />' . count($uris);
177 print_r(json_encode($update_data));
178 $update_req = file_get_contents(BASE_URL
. 'users/' . $me_id . '/playlists/' . $playlist_id . '/tracks', false, $update_context);