NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Bandcamp Weekly Scrobbler // @namespace http://userscripts.org/users/useridnumber // @description Scrobble Bandcamp weekly tracks to last.fm // @require http://justan.github.io/gmscrobber/simple_scrobbler_user.js // @require http://code.jquery.com/jquery-1.11.2.min.js // @include *bandcamp.com/?show=* // @include *bandcamp.com/?token=* // @include *bandcamp.com/ // @version 0.1 // @updateURL https://openuserjs.org/install/rekhubs/Bandcamp_Weekly_Scrobbler.user.js // @downloadURL https://openuserjs.org/install/rekhubs/Bandcamp_Weekly_Scrobbler.user.js // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_xmlhttpRequest // @grant GM_registerMenuCommand // @grant unsafeWindow // ==/UserScript== console.log("hellooooooooooooooo"); console.log($); console.log($().jquery); // get track list var list = document.getElementsByClassName("bcweekly-track-list unstyled")[0]; var listEndIndex = list.lastElementChild.getAttribute("data-index"); console.log("list end index:", listEndIndex); // init var init = function() { console.log('init func................'); } // new scrobbler var scrob = new Scrobbler({ name: 'Bandcamp Weekly GM scrobbler', ready: init, type: 1 }); // get song info var getSongInfo = function() { var song = {}; song.title = $('.bcweekly-track-item.bcweekly-track-item-large, .bcweekly-track-item.has-merch.bcweekly-track-item-large').find('span.track-name').text(); // console.log( 'track name: ' + song.title ); song.album = $('.bcweekly-track-item.bcweekly-track-item-large, .bcweekly-track-item.has-merch.bcweekly-track-item-large').find('span.album-name').text(); // console.log('album: ' + song.album ); song.artist = $('.bcweekly-track-item.bcweekly-track-item-large, .bcweekly-track-item.has-merch.bcweekly-track-item-large').find('.artist-name').text().replace(/\s*by (.*)\s+/g, '$1'); // console.log('artist: ' + song.artist ); song.index = $('.bcweekly-track-item.bcweekly-track-item-large, .bcweekly-track-item.has-merch.bcweekly-track-item-large').find('.cell.col4.track-number-cell').text(); // console.log('list index:', song.index ); return song; }; var INDEX_LAST_TIME_CHECKING = -1; var CURRENT_CANDIDATE = {}; CURRENT_CANDIDATE.startTime = new Date().getTime(); CURRENT_CANDIDATE.playTime = 0; CURRENT_CANDIDATE.index = -1; CURRENT_CANDIDATE.isScrobbled = false; var checkPlayingTrack = function() { console.log('checkPlayingTrack func................'); var playingTrack = document.getElementsByClassName("bcweekly-track-item bcweekly-track-item-large")[0] || document.getElementsByClassName("bcweekly-track-item has-merch bcweekly-track-item-large")[0]; if (playingTrack) { console.log('yes, there is a playing track!'); // $('body').css("background-color", "red"); // $('.bcweekly-track-item.bcweekly-track-item-large, .bcweekly-track-item.has-merch.bcweekly-track-item-large').css("background-color", "green"); // $('.bcweekly-track-item.bcweekly-track-item-large, .bcweekly-track-item.has-merch.bcweekly-track-item-large').find('span.wishlist-msg.collection-btn').prepend('<span class="last-fm-love" >☆last.fm★</span>'); // get song info var song = getSongInfo(); console.log(song); // send now playing request to last.fm scrob.nowPlaying(song) // if a song plays 30+s, scrobble it if (song.index != INDEX_LAST_TIME_CHECKING) { // reset current candidate console.log('=======================> Playing another track: ' + song.title); CURRENT_CANDIDATE.index = song.index; CURRENT_CANDIDATE.startTime = new Date().getTime(); CURRENT_CANDIDATE.playTime = 0; CURRENT_CANDIDATE.isScrobbled = false; // reset last.fm love track listener $('.currently-playing.large-only').html('<input type="checkbox">Love to last.fm</input>'); $('.currently-playing.large-only').unbind('click'); $('.currently-playing.large-only').bind('click', function(event) { console.log("############## Sending love track request: " + song.title); scrob.love(song); }); } // check time and status to scrobble a track var now = new Date().getTime(); CURRENT_CANDIDATE.playTime = now - CURRENT_CANDIDATE.startTime; if (CURRENT_CANDIDATE.playTime > 30 * 1000 && CURRENT_CANDIDATE.isScrobbled == false) { console.log('=======================> Sending scrobble request: ' + song.title + '....'); scrob.scrobble(song); CURRENT_CANDIDATE.isScrobbled = true; } console.log(CURRENT_CANDIDATE); // set last index INDEX_LAST_TIME_CHECKING = song.index; } }; setInterval(checkPlayingTrack, 3000);