Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (function() {
- var pageSize = 100;
- var webname = location.pathname.split("/").pop(); // Seems to be a variation of the username, can be retrieved from the URL
- var totalThumbs = parseInt(document.querySelector(".ProfileNav__count").textContent.replace(/[^0-9]/g, ""), 10);
- var allThumbs = [];
- // Step one, obtain the AuthToken and CsrfToken which will allow us to make requests to the Pandora API.
- var authToken = undefined;
- var csrfToken = undefined;
- var originalSetRequestHeader = XMLHttpRequest.prototype.setRequestHeader;
- XMLHttpRequest.prototype.setRequestHeader = function(name, value) { // If I had more time maybe I wouldn't need to use this hook
- if(name === "X-AuthToken") {
- authToken = value;
- }
- if(name === "X-CsrfToken") {
- csrfToken = value;
- }
- originalSetRequestHeader.apply(this, arguments);
- if(authToken && csrfToken) { // We've got them both, let's get a move on
- XMLHttpRequest.prototype.setRequestHeader = originalSetRequestHeader; // Deregister our hook...
- fetchPage(0); // ...and get to work
- }
- };
- window.scrollTo(0,document.body.scrollHeight); // Scroll to the bottom of the page to trigger a load so we can hook the event
- // Step two, make the necessary requests
- function fetchPage(pageNumber) {
- var req = new XMLHttpRequest();
- req.open('POST', "/api/v1/station/getFeedback", true);
- req.setRequestHeader("Content-Type", "application/json"); // Pandora API rejects requests without this content type set
- req.setRequestHeader("X-AuthToken", authToken);
- req.setRequestHeader("X-CsrfToken", csrfToken);
- req.onreadystatechange = function() {
- if(req.readyState == XMLHttpRequest.DONE && req.status == 200) {
- var data = JSON.parse(req.responseText);
- allThumbs = allThumbs.concat(data.feedback);
- console.log(allThumbs.length, "/", totalThumbs);
- if(allThumbs.length < totalThumbs && data.feedback.length > 0) {
- fetchPage(pageNumber+1);
- } else {
- finalize();
- }
- }
- };
- req.send(JSON.stringify({
- pageSize: pageSize,
- startIndex: pageNumber * pageSize,
- webname: webname
- }));
- }
- // Step three, compile the output
- function finalize() {
- var string = "Artist\tAlbum\tSong\tStation\tThumb Direction\tAmazon Link\tiTunes Link\tDisc Number\tTrack Number\tDuration (Seconds)";
- for(var i = 0; i < allThumbs.length; i++) {
- var thumb = allThumbs[i];
- string += "\n" +
- thumb.artistName.replace(/\t/g, " ").replace(/\n|\r/g, "") + "\t" +
- thumb.albumTitle.replace(/\t/g, " ").replace(/\n|\r/g, "") + "\t" +
- thumb.songTitle.replace(/\t/g, " ").replace(/\n|\r/g, "") + "\t" +
- thumb.stationName.replace(/\t/g, " ").replace(/\n|\r/g, "") + "\t" +
- (thumb.isPositive ? "up" : "down") + "\t" +
- thumb.amazonUrl + "\t" +
- thumb.itunesUrl + "\t" +
- thumb.discNum + "\t" +
- thumb.trackNum + "\t" +
- thumb.trackLength;
- }
- console.log(string);
- }
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement