NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Shazam go to track
// @description Show links to tracks on YouTube
// @namespace https://www.shazam.com/myshazam
// @version 0.0.2
// @license GPL-3.0-only
// @author FreeStyler
// @match https://www.shazam.com/*
// @grant none
// @require https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js
// @require file:///home/alex/0Mega/MyProjects/UserScripts/shazam_go_to_track.user.js
// ==/UserScript==
(function() {
//'use strict';
var cl = console.log,
//checked_urls = localStorage.getItem('checked_urls'),
//count = 0,
details_loaded = 0,
endvar;
//localStorage.removeItem('ads'); return; //cl($('.tagcount'));
var arrow_image = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABjUlEQVRYR+3WMUscURTF8d+KpFGIjREiQgIBYyMEu0Bim0JLExJIinyB1JZp7C20SNr4FWITG1stFCv1C6RTIZUEIneZWWZ3Z2Z3yI7bzGsGZt7c839nzrtvWsY8WmPW1wA0DtThwA6+4O8wAa8D4B9+4S2uBkHUBRC6F1hProUcdQKEaDgQToQjuaNugBCNLEQmdvMI7gMg1Q2AvnBWBXiIV1jBEp5gDjOYwiSl3bUvnMMAPMB7fMLrRGRQuMued4WzDGACn/EVj/9HMefdTjiLAOaxh9URC2fLtcOZB7CMnwiIOkcuwHMcYrZO5aQ/bOAg60Ak/BjPahaPEK7hMnSyAPHNP/SInyRd7Ajn+I0/yZxpPMLTZEu+wEsslCwgtmGs/DqdkwK8wX5y8wbf8D2lrOhIHEZ5o7ARxXY7xSK2sTXMKVYC1QswsBW/wyY+4qziavOmZwFiv7fDVlQ3PkE0mx+4HYF4lEgBusJWBjAi3U6Z9IekK2z3CTD2X7JKjg5zGlYqWHVyA9A4cAesTEn1iUoW6wAAAABJRU5ErkJggg==';
function after_details_loaded(){ //cl('details_loaded');
//var $details = $('.details');
var $details = $('.details');
$details.each(function(){
var $this = $(this);
var exist = $this.children().eq(1).find('.mysearch').length;
if(exist) return;
var song_name = $this.children().eq(0).children().eq(0);
//cl(event.target.nodeName);
//cl(event.target.type);
if(song_name.length){
if(song_name[0].nodeName === 'META'){
song_name = $(song_name[0]).attr('content');
}
}
var artist_name = $this.children().eq(1).children().eq(1).eq(0).html();
if(artist_name){
//var to_search = encodeURIComponent(artist_name + ' '+ song_name);
var to_search = (artist_name +' '+ song_name).replace(/#/g, '%23');
//to_search = to_search.replace(/&/g, '%26');
to_search = to_search.replace(/&/g, '%26');
to_search = to_search.replace(/\+/g, '%2B');
to_search = to_search.replace(/\s/g, '+');
//cl(to_search);
//cl($this.children().eq(1).find('.mysearch'));
//cl($this.children().eq(1).last());
$this.children().eq(1).append('<a class=mysearch style=color:black;margin-left:55px target=_blank href="https://www.youtube.com/results?search_query='+ to_search +'">' + artist_name +' - '+ song_name +' on YouTube <img src='+ arrow_image +' style=width:24px></a>');
//cl($this.children().eq(1).last());
//cl($this.children().eq(1).find('.mysearch'));
}
});
}
function load_details(){
if(details_loaded > 1) return;
details_loaded = $('.details').length;
if(details_loaded > 1){
after_details_loaded();
} else {
setTimeout(load_details, 500);
}
}
if(!details_loaded) load_details();
var send = window.XMLHttpRequest.prototype.send;
function sendReplacement(data) {
if(this.onreadystatechange) {
this._onreadystatechange = this.onreadystatechange;
}
/**
* PLACE HERE YOUR CODE WHEN REQUEST IS SENT
*/
//cl(1123);
this.onreadystatechange = onReadyStateChangeReplacement;
return send.apply(this, arguments);
}
function onReadyStateChangeReplacement() {
/**
* PLACE HERE YOUR CODE FOR READYSTATECHANGE
*/
//cl(1223);
//cl(this);
//cl(this.readyState);
//if(this._onreadystatechange){ cl(1233);
if(this.readyState === 4){ //cl(1233);
setTimeout(function(){ /*cl(123);*/ after_details_loaded(); }, 2000);
//return this._onreadystatechange.apply(this, arguments);
}
}
window.XMLHttpRequest.prototype.send = sendReplacement;
})();