From 168896268ee9a19bce7125b029a37c34437aeb52 Mon Sep 17 00:00:00 2001 From: Jacob Casper Date: Tue, 3 Apr 2018 22:20:53 -0400 Subject: [PATCH] v0.3: commit ca40ac9fa60bda69f4b7a3415ce4d97bd06257fc Author: Jacob Casper Date: Tue Apr 3 22:18:45 2018 -0400 Refactored scraping and Spotify search tools, added DB --- callback.php | 118 +++++++--------------------------------------- marketplay.php | 2 +- marketscraper.php | 76 +++++++++++++++++++++++++++++ mktplc.sqlite3 | Bin 0 -> 167936 bytes mpfuncs.php | 34 +++++++++++-- searchify.php | 49 +++++++++++++++++++ 6 files changed, 173 insertions(+), 106 deletions(-) create mode 100644 marketscraper.php create mode 100644 mktplc.sqlite3 create mode 100644 searchify.php diff --git a/callback.php b/callback.php index 7488530..2b92014 100644 --- a/callback.php +++ b/callback.php @@ -25,22 +25,15 @@ $code = $_GET['code']; - if (!$code) { - exit(1); - } - - $today = new DateTime; - - #print_r($today); - - $prevDTTxt = file_get_contents(DATE_FILE); + // Get month and year user is requesting + $state = explode(':', $_GET['state']); - $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')); + if (!$code) { + exit(1); } - + + #print_r($today); #Handle Spotify Token Authorization @@ -66,11 +59,12 @@ $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']; + $me_opts = [ 'http' => [ 'method' => 'GET', @@ -84,55 +78,9 @@ $me_json = json_decode($me_resp, true); $me_id = $me_json['id']; - echo '
'; - #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'); - - $recentEpDT; - $episodePages = []; - - foreach ($headers as $header) { - if ($header->hasAttribute('class') && $header->getAttribute('class') === 'river--hed') { - $recentEpDT = DateTime::createFromFormat(DATE_FORM, explode(':', $header->nodeValue)[0]); - break; - } - } - - $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($episodes); - */ - - print_r($episodePages); - # Check if this month's playlist exists - $playlistName = MONTHS[$today->format('m')] . ' Marketplace Tracks'; + $playlistName = MONTHS[$state[0]] . ' ' . $state[1] . ' Marketplace Tracks'; $checkPlaylistOpts = [ 'http' => [ @@ -163,6 +111,7 @@ $playlist_data = [ 'name' => $playlistName, + 'description' => 'A playlist of Marketplace tracks by Marketplaylister.', ]; $playlist_opts = [ @@ -185,45 +134,14 @@ $uris = []; - 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); - - foreach ($episode 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 '
'; - - $trackReq = file_get_contents($track_search_url, false, $track_context); - if ($trackReq) { - $trackJSON = json_decode($trackReq, true); - $trackJSON = $trackJSON['tracks']; - - print_r($trackJSON); - - if ($trackJSON['total'] === 0) { - continue; - } - - $uris[] = $trackJSON['items'][0]['uri']; - - #rate limit - sleep(1); - - } - } - } + $pdo = new PDO("sqlite:mktplc.sqlite3"); + $stmt = $pdo->prepare("SELECT uri FROM songs s WHERE (SELECT strftime('%m', s.date) == :month and strftime('%Y', s.date) == :year;"); + $stmt->bindParam(':month', $state[0]); + $stmt->bindParam(':year', $state[1]); + if ($stmt->execute()) { + while ($row = $stmt->fetch()) { + $uris[] = $row['uri']; + } } $update_data = [ diff --git a/marketplay.php b/marketplay.php index 361e2ae..b456ec8 100644 --- a/marketplay.php +++ b/marketplay.php @@ -1,6 +1,6 @@ query('SELECT date FROM songs order by date desc limit 1'); + $resultset = $query->fetch(); + + $lastEpDT = new DateTime::createFromFormat(SQLITE_DATE_FORM, $resultset['date']; + $startDate = new DateTime; + $episodeDatePages = []; + $episodeTrackPages = []; + + while ($startDate > $lastEpDT) { + // DOM garbles UTF-8 chars, so loading them to HTML-ENTITIES data fixes this + $html = mb_convert_encoding(file_get_contents('https://www.marketplace.org/latest-music?page=' . $page), 'HTML-ENTITIES', "UTF-8"); + $DOM = new DOMDocument; + $DOM->loadHTML($html); + $headers = $DOM->getElementsByTagName('h2'); + $divs = $DOM->getElementsByTagName('div'); + + $episodeDatePages[] = parseEpisodeDate($headers, $lastEpDT); + $episodeTrackPages[] = parseEpisodePage($divs); + $startDate = end($episodeDatePages[$page - 1]); + $page++; + } + + //print_r($episodeDatePages); + + + //Unroll episodeDatePages + $episodeDates = []; + foreach ($episodeDatePages as $episodeDatePage) { + foreach ($episodeDatePage as $episodeDate) { + $episodeDates[] = $episodeDate; + } + } + + + // Unroll episodeTrackPages + $episodeTrackLists = []; + foreach ($episodeTrackPages as $epTrackPage) { + foreach ($epTrackPage as $epTrackList) { + $episodeTrackLists[] = $epTrackList; + } + } + + $episodes = array_slice( + array_map( + null, $episodeDates, $episodeTrackLists), 0, min( + count($episodeDates), count($episodeTrackLists) + ) + ); + print_r($episodes); + + $stmt = $pdo->prepare("INSERT INTO songs (track, artist, date) VALUES (:track, :artist, :date)"); + $stmt->bindParam(':track', $trackName); + $stmt->bindParam(':artist', $artist); + $stmt->bindParam(':date', $date); + foreach(array_reverse($episodes) as $episode) { + $date = $episode[0]->format(SQLITE_DATE_FORM); + foreach ($episode[1] as $track) { + $trackName = $track['title']; + $artist = $track['artist']; + $stmt->execute(); + } + } + + \ No newline at end of file diff --git a/mktplc.sqlite3 b/mktplc.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..5daf12db5955a47decc8a5a997ca8104daf64040 GIT binary patch literal 167936 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%0DblOyVg~-i!F|N3=#)&i-4TXe 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

9XbtCeC5iz@r+`||p>?amXnYE=^#fLx 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 z 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 EUyL0h2mk;8 literal 0 HcmV?d00001 diff --git a/mpfuncs.php b/mpfuncs.php index a35c89f..051619a 100644 --- a/mpfuncs.php +++ b/mpfuncs.php @@ -1,12 +1,12 @@ hasAttribute('class') && $div->getAttribute('class') === 'episode-music') { - if (!$numDays) { - break; - } $songs = []; foreach ($div->childNodes as $row) { $children = $row->childNodes[0]->childNodes; @@ -15,7 +15,6 @@ 'artist' => $children[1]->nodeValue ]; } - $numDays--; $episodePage[] = $songs; } @@ -23,4 +22,29 @@ return $episodePage; + } + + /** + * Go through the DOM elements provided and pull out the Dates of all marketplace + * pod episodes in the provided list. + * + * @param DomNodeList $headers The elements with a header tag from the DOM + * @param DateTime $lastDate The date of the most recent episode from the DB + */ + function parseEpisodeDate(DomNodeList $headers, DateTime $lastDate): array { + $episodeDates = []; + foreach ($headers as $header) { + if ($header->hasAttribute('class') && $header->getAttribute('class') === 'river--hed') { + $dateStringParts = explode('/', explode(':', $header->nodeValue)[0]); + if ( strlen($dateStringParts[2]) === 2 ) { + $dateStringParts[2] = '20' . $dateStringParts[2]; + } + $episodeDate = DateTime::createFromFormat(DATE_FORM, implode("/", $dateStringParts)); + if ($episodeDate < $lastDate) { + break; + } + $episodeDates[] = $episodeDate; + } + } + return $episodeDates; } \ No newline at end of file diff --git a/searchify.php b/searchify.php new file mode 100644 index 0000000..740f79f --- /dev/null +++ b/searchify.php @@ -0,0 +1,49 @@ +prepare("SELECT * FROM SONGS WHERE uri IS NULL"); + $upstmt = $pdo->prepare("UPDATE songs SET (uri) = :uri WHERE id = :id"); + $upstmt->bindParam(':uri', $uri); + $upstmt->bindParam(':id', $id); + + if ($stmt->execute()) { + + print_r($stmt->fetchAll()); + exit(0); + while ($row = $stmt->fetch()) { + + $track_opts = [ + 'http' => [ + 'method' => 'GET', + 'header' => 'Authorization: Bearer ' . SPOT_TOKEN . "\r\n" + ] + ]; + + $track_context = stream_context_create($track_opts); + + $track_search_url = BASE_URL . 'search?q=track:' . urlencode($row['track']) + . '+artist:' . urlencode($row['artist']) . '&type=track'; + + $trackReq = file_get_contents($track_search_url, false, $track_context); + if ($trackReq) { + $trackJSON = json_decode($trackReq, true); + $trackJSON = $trackJSON['tracks']; + if ($trackJSON['total'] === 0) { + continue; + } + + $uri = $trackJSON['items'][0]['uri']; + $id = $row['id']; + $upstmt->execute(); + + #rate limit + sleep(1); + + } + } + } \ No newline at end of file -- 2.20.1