v0.3:
[Marketplaylister.git] / callback.php
CommitLineData
7d1597b7 1<?php\r
bed05b1a
JC
2 declare(strict_types = 1);\r
3 \r
7d1597b7 4 require 'secrets.php';\r
bed05b1a 5 require 'mpfuncs.php';\r
7d1597b7
JC
6 \r
7 const BASE_URL = 'https://api.spotify.com/v1/';\r
8 const AUTH_URL = 'https://accounts.spotify.com/';\r
bed05b1a
JC
9 const DATE_FILE = 'prev_date.txt';\r
10 const DATE_FORM = 'm/d/Y';\r
11 const MONTHS = [\r
12 '01' => 'January',\r
13 '02' => 'February',\r
14 '03' => 'March',\r
15 '04' => 'April',\r
16 '05' => 'May',\r
17 '06' => 'June',\r
18 '07' => 'July',\r
19 '08' => 'August',\r
20 '09' => 'September',\r
21 '10' => 'October',\r
22 '11' => 'November',\r
23 '12' => 'December',\r
24 ];\r
25 \r
7d1597b7
JC
26 $code = $_GET['code'];\r
27 \r
16889626
JC
28 // Get month and year user is requesting\r
29 $state = explode(':', $_GET['state']);\r
bed05b1a 30 \r
bed05b1a 31 \r
16889626
JC
32 if (!$code) {\r
33 exit(1);\r
bed05b1a 34 }\r
16889626
JC
35 \r
36 #print_r($today); \r
bed05b1a 37 \r
7d1597b7
JC
38 #Handle Spotify Token Authorization\r
39 \r
40 $token_data = [\r
41 'grant_type' => 'authorization_code',\r
42 'code' => $code,\r
43 'redirect_uri' => REDIRECT_URI\r
44 ];\r
45 $token_data = http_build_query($token_data);\r
46 \r
47 $token_opts = [\r
48 'http' => [\r
49 'method' => 'POST',\r
50 /*'header' => "Content-type: application/x-www-form-urlencoded\r\n"\r
51 . "Content-Length: " . strlen($token_data) . "\r\n"\r
52 . "Authorization: Basic " . base64_encode('868e2cba00de4819900dd8a647a7ba7d:' . CLIENT_SECRET) . "\r\n",*/\r
53 'header' => "Authorization: Basic " . base64_encode('868e2cba00de4819900dd8a647a7ba7d:' . CLIENT_SECRET) . " \r\n",\r
54 'content' => $token_data\r
55 ]\r
56 ];\r
57 \r
58 $token_context = stream_context_create($token_opts);\r
59 \r
60 $spot_req = file_get_contents(AUTH_URL . 'api/token', false, $token_context);\r
61 \r
16889626 62 echo $spot_req;\r
7d1597b7
JC
63 $spot_json = json_decode($spot_req, true);\r
64\r
65 $spot_token = $spot_json['access_token'];\r
66 \r
16889626 67 \r
7d1597b7
JC
68 $me_opts = [\r
69 'http' => [\r
70 'method' => 'GET',\r
71 'header' => 'Authorization: Bearer ' . $spot_token . "\r\n"\r
72 ]\r
73 ];\r
74 \r
75 $me_context = stream_context_create($me_opts);\r
76 \r
77 $me_resp = file_get_contents(BASE_URL . 'me', false, $me_context);\r
78 $me_json = json_decode($me_resp, true);\r
79 $me_id = $me_json['id'];\r
80 \r
bed05b1a 81 # Check if this month's playlist exists\r
7d1597b7 82 \r
16889626 83 $playlistName = MONTHS[$state[0]] . ' ' . $state[1] . ' Marketplace Tracks';\r
bed05b1a
JC
84 \r
85 $checkPlaylistOpts = [\r
7d1597b7 86 'http' => [\r
bed05b1a 87 'method' => 'GET',\r
7d1597b7 88 'header' => 'Authorization: Bearer ' . $spot_token . "\r\n"\r
7d1597b7
JC
89 ]\r
90 ];\r
91 \r
bed05b1a 92 $checkPlaylistContext = stream_context_create($checkPlaylistOpts);\r
7d1597b7 93 \r
bed05b1a 94 $checkPlaylistReq = file_get_contents(BASE_URL . 'me/playlists', false, $checkPlaylistContext);\r
7d1597b7 95 \r
bed05b1a
JC
96 $checkPlaylistJson = json_decode($checkPlaylistReq, true);\r
97 \r
98 foreach ($checkPlaylistJson['items'] as $playlist) {\r
99 #TODO should check if $user owns playlist\r
100 if (!strcmp($playlistName, $playlist['name'])) {\r
101 $playlistID = $playlist['id'];\r
102 }\r
103 }\r
7d1597b7 104 \r
bed05b1a 105 #echo 'playlistID' . $playlistID;\r
7d1597b7 106 \r
bed05b1a
JC
107 # Create new playlist if one does not exist\r
108 # DEVELOPMENT TEMP ALWAYS CREATE NEW PLAYLIST\r
109 #if (!$playlistID) {\r
110 if (true) {\r
111\r
112 $playlist_data = [\r
113 'name' => $playlistName,\r
16889626 114 'description' => 'A playlist of Marketplace tracks by Marketplaylister.',\r
bed05b1a
JC
115 ];\r
116 \r
117 $playlist_opts = [\r
118 'http' => [\r
119 'method' => 'POST',\r
120 'header' => 'Authorization: Bearer ' . $spot_token . "\r\n"\r
121 . 'Content-Type application/json \r\n',\r
122 'content' => json_encode($playlist_data)\r
123 ]\r
124 ];\r
125\r
126 $playlist_context = stream_context_create($playlist_opts);\r
127 $playlist_req = file_get_contents(BASE_URL . 'users/' . $me_id . '/playlists', false, $playlist_context);\r
128 $playlist_json = json_decode($playlist_req, true);\r
129 $playlistID = $playlist_json['id'];\r
130 \r
131 #echo '<br />' . $playlistID;\r
132 \r
133 }\r
7d1597b7
JC
134 \r
135 $uris = [];\r
136 \r
16889626
JC
137 $pdo = new PDO("sqlite:mktplc.sqlite3");\r
138 $stmt = $pdo->prepare("SELECT uri FROM songs s WHERE (SELECT strftime('%m', s.date) == :month and strftime('%Y', s.date) == :year;");\r
139 $stmt->bindParam(':month', $state[0]);\r
140 $stmt->bindParam(':year', $state[1]);\r
141 if ($stmt->execute()) {\r
142 while ($row = $stmt->fetch()) {\r
143 $uris[] = $row['uri'];\r
144 }\r
7d1597b7 145 }\r
bed05b1a 146 \r
7d1597b7 147 $update_data = [\r
bed05b1a 148 'uris' => $uris,\r
7d1597b7
JC
149 ];\r
150 \r
151 echo '<br /> update_data <br />';\r
bed05b1a 152 #print_r($update_data);\r
7d1597b7
JC
153 \r
154 $update_opts = [\r
155 'http' => [\r
156 'method' => 'POST',\r
157 'header' => 'Authorization: Bearer ' . $spot_token . "\r\n"\r
158 . 'Content-Type application/json \r\n',\r
159 'content' => json_encode($update_data)\r
160 ]\r
161 ];\r
162 \r
163 $update_context = stream_context_create($update_opts);\r
bed05b1a 164 $update_url = BASE_URL . 'users/' . $me_id . '/playlists/' . $playlistID . '/tracks';\r
7d1597b7
JC
165 echo '<br />' . $update_url;\r
166 echo '<br />';\r
167 echo '<br />' . count($uris);\r
168 echo '<br />';\r
169 print_r(json_encode($update_data));\r
bed05b1a
JC
170 $update_req = file_get_contents(BASE_URL . 'users/' . $me_id . '/playlists/' . $playlistID . '/tracks', false, $update_context);\r
171 print_r($update_req);\r
172 \r
173 file_put_contents(DATE_FILE, $recentEpDT->format(DATE_FORM));\r
7d1597b7 174