X-Git-Url: https://git.jacobcasper.com/?p=Marketplaylister.git;a=blobdiff_plain;f=callback.php;fp=callback.php;h=7488530d6ecdcd046c652c5c2fe7c6ddd72dbff0;hp=96d5ba1d54e072a633dc15bddfd1b8325a6a8c5e;hb=bed05b1a3c4b40cb71564fbebb2cb41242163dbd;hpb=7d1597b735679b00f4d2ab735b55648f886337b2
diff --git a/callback.php b/callback.php
index 96d5ba1..7488530 100644
--- a/callback.php
+++ b/callback.php
@@ -1,18 +1,47 @@
'January',
+ '02' => 'February',
+ '03' => 'March',
+ '04' => 'April',
+ '05' => 'May',
+ '06' => 'June',
+ '07' => 'July',
+ '08' => 'August',
+ '09' => 'September',
+ '10' => 'October',
+ '11' => 'November',
+ '12' => 'December',
+ ];
+
$code = $_GET['code'];
if (!$code) {
exit(1);
}
+ $today = new DateTime;
+
+ #print_r($today);
+
+ $prevDTTxt = file_get_contents(DATE_FILE);
+
+ $prevDT = $prevDTTxt ? DateTime::createFromFormat(DATE_FORM, $prevDTTxt) : DateTime::createFromFormat(DATE_FORM, $today->format('m/') . '01' . $today->format('/Y'));
+
+ if (strcmp($prevDT->format('m'), $today->format('m')) < 0) {
+ $prevDT = DateTime::createFromFormat(DATE_FORM, $today->format('m/') . '01' . $today->format('/Y'));
+ }
+
+
#Handle Spotify Token Authorization
$token_data = [
@@ -37,7 +66,7 @@
$spot_req = file_get_contents(AUTH_URL . 'api/token', false, $token_context);
- echo $spot_req;
+ #echo $spot_req;
$spot_json = json_decode($spot_req, true);
$spot_token = $spot_json['access_token'];
@@ -56,108 +85,153 @@
$me_id = $me_json['id'];
echo '
';
- print_r($me_resp);
-
+ #print_r($me_resp);
+
+ $page = 1;
$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 = [];
+ $recentEpDT;
+ $episodePages = [];
foreach ($headers as $header) {
if ($header->hasAttribute('class') && $header->getAttribute('class') === 'river--hed') {
- $date_headers[] = $header->nodeValue;
+ $recentEpDT = DateTime::createFromFormat(DATE_FORM, explode(':', $header->nodeValue)[0]);
+ break;
}
}
- 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;
- }
+
+ $prevDate = (int) $prevDT->format('d');
+ $recentEpDate = (int) $recentEpDT->format('d');
+ $daysToGet = ($prevDate === 1) ? $recentEpDate : $recentEpDate - $prevDate;
+ $daysToGet = $daysToGet - 2 * (int) ($daysToGet / 7);
+
+ if ($daysToGet === 0) {
+ echo 'No new episodes since last check.';
+ exit(0);
}
+
+ do {
+ $episodePages[] = parseEpisodePage($divs, $daysToGet);
+ } while ($daysToGet > 0 && ($DOM->loadHTML(file_get_contents('https://www.marketplace.org/latest-music?page=' . ++$page))) && ($divs = $DOM->getElementsByTagName('div')) );
+
+ /*
echo '
';
print_r($date_headers);
echo '
';
- print_r($music_group);
+ print_r($episodes);
+ */
- #TODO Check if this month's playlist exists first
+ print_r($episodePages);
- $playlist_data = [
- 'name' => 'March Marketplace Tracks'
- ];
+ # Check if this month's playlist exists
- $playlist_opts = [
+ $playlistName = MONTHS[$today->format('m')] . ' Marketplace Tracks';
+
+ $checkPlaylistOpts = [
'http' => [
- 'method' => 'POST',
+ 'method' => 'GET',
'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);
+ $checkPlaylistContext = stream_context_create($checkPlaylistOpts);
- $playlist_req = file_get_contents(BASE_URL . 'users/' . $me_id . '/playlists', false, $playlist_context);
+ $checkPlaylistReq = file_get_contents(BASE_URL . 'me/playlists', false, $checkPlaylistContext);
- $playlist_json = json_decode($playlist_req, true);
+ $checkPlaylistJson = json_decode($checkPlaylistReq, true);
+
+ foreach ($checkPlaylistJson['items'] as $playlist) {
+ #TODO should check if $user owns playlist
+ if (!strcmp($playlistName, $playlist['name'])) {
+ $playlistID = $playlist['id'];
+ }
+ }
- $playlist_id = $playlist_json['id'];
+ #echo 'playlistID' . $playlistID;
- echo '
' . $playlist_id;
+ # Create new playlist if one does not exist
+ # DEVELOPMENT TEMP ALWAYS CREATE NEW PLAYLIST
+ #if (!$playlistID) {
+ if (true) {
+
+ $playlist_data = [
+ 'name' => $playlistName,
+ ];
+
+ $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);
+ $playlistID = $playlist_json['id'];
+
+ #echo '
' . $playlistID;
+
+ }
$uris = [];
- for ($i = count($music_group) - 1; $i >= 0; $i--) {
-
- $track_opts = [
- 'http' => [
- 'method' => 'GET',
- 'header' => 'Authorization: Bearer ' . $spot_token . "\r\n"
- ]
- ];
+ foreach ( array_reverse($episodePages) as $episodes) {
+ foreach ( array_reverse($episodes) as $episode) {
+
+ $track_opts = [
+ 'http' => [
+ 'method' => 'GET',
+ 'header' => 'Authorization: Bearer ' . $spot_token . "\r\n"
+ ]
+ ];
- $track_context = stream_context_create($track_opts);
+ $track_context = stream_context_create($track_opts);
- foreach ($music_group[$i] as $song_info) {
+ foreach ($episode as $song_info) {
- $track_search_url = BASE_URL . 'search?q=track:' . urlencode($song_info['title']) . '+artist:' . urlencode($song_info['artist']) . '&type=track';
+ $track_search_url = BASE_URL . 'search?q=track:' . urlencode($song_info['title'])
+ . '+artist:' . urlencode($song_info['artist']) . '&type=track';
- echo '
' . $track_search_url;
- echo '
';
+ #echo '
' . $track_search_url;
+ #echo '
';
- $track_req = file_get_contents($track_search_url, false, $track_context);
- $track_json = json_decode($track_req, true);
+ $trackReq = file_get_contents($track_search_url, false, $track_context);
+ if ($trackReq) {
+ $trackJSON = json_decode($trackReq, true);
+ $trackJSON = $trackJSON['tracks'];
- print_r($track_json);
+ print_r($trackJSON);
+
+ if ($trackJSON['total'] === 0) {
+ continue;
+ }
- $uris[] = $track_json['tracks']['items'][0]['uri'];
+ $uris[] = $trackJSON['items'][0]['uri'];
- #rate limit
- sleep(1);
-
+ #rate limit
+ sleep(1);
+
+ }
+ }
}
-
}
-
+
$update_data = [
- 'uris' => array_values(array_filter($uris, function($uri) {return !is_null($uri);} ))
+ 'uris' => $uris,
];
echo '
update_data
';
- print_r($update_data);
+ #print_r($update_data);
$update_opts = [
'http' => [
@@ -169,11 +243,14 @@
];
$update_context = stream_context_create($update_opts);
- $update_url = BASE_URL . 'users/' . $me_id . '/playlists/' . $playlist_id . '/tracks';
+ $update_url = BASE_URL . 'users/' . $me_id . '/playlists/' . $playlistID . '/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);
+ $update_req = file_get_contents(BASE_URL . 'users/' . $me_id . '/playlists/' . $playlistID . '/tracks', false, $update_context);
+ print_r($update_req);
+
+ file_put_contents(DATE_FILE, $recentEpDT->format(DATE_FORM));
\ No newline at end of file