Last active
November 10, 2019 11:52
-
-
Save BubuInc/b78ff240f6aebd957a6f7c0f48e21e34 to your computer and use it in GitHub Desktop.
fixes Spider Player lyrics pane
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var lyricFetcher = { | |
sources: ["TERRA"], | |
fetch: function(artist, album, track, cb, nSource) { | |
String.prototype.ASCIIchars = ["¡", "¢", "£", "¤", "¥", "¦", "§", "¨", "©", "ª", "«", "¬", "­", "®", "¯", "°", "±", "²", "³", "´", "µ", "¶", "·", "¸", "¹", "º", "»", "¼", "½", "¾", "¿", "À", "Á", "Â", "Ã", "Ä", "Å", "Æ", "Ç", "È", "É", "Ê", "Ë", "Ì", "Í", "Î", "Ï", "Ð", "Ñ", "Ò", "Ó", "Ô", "Õ", "Ö", "×", "Ø", "Ù", "Ú", "Û", "Ü", "Ý", "Þ", "ß", "à", "á", "â", "ã", "ä", "å", "æ", "ç", "è", "é", "ê", "ë", "ì", "í", "î", "ï", "ð", "ñ", "ò", "ó", "ô", "õ", "ö", "÷", "ø", "ù", "ú", "û", "ü", "ý", "þ", "ÿ", "€", "&"]; | |
String.prototype.ISOchars = ["¡", "¢", "£", "¤", "Â¥", "¦", "§", "¨", "©", "ª", "«", "¬", "Â", "®", "¯", "°", "±", "²", "³", "´", "µ", "¶", "·", "¸", "¹", "º", "»", "¼", "½", "¾", "¿", "À", "�?", "Â", "Ã", "Ä", "Ã…", "Æ", "Ç", "È", "É", "Ê", "Ë", "ÃŒ", "�?", "ÃŽ", "�?", "�?", "Ñ", "Ã’", "Ó", "Ô", "Õ", "Ö", "×", "Ø", "Ù", "Ú", "Û", "Ü", "�?", "Þ", "ß", "à ", "á", "â", "ã", "ä", "Ã¥", "æ", "ç", "è", "é", "ê", "ë", "ì", "Ã", "î", "ï", "ð", "ñ", "ò", "ó", "ô", "õ", "ö", "÷", "ø", "ù", "ú", "û", "ü", "ý", "þ", "ÿ", "€", "&"]; | |
String.prototype.ASCIIDecode = function() { | |
var str = this.replace(/&#(\d+);/g, function(str, code) { | |
return String.fromCharCode(code); | |
}); | |
for (var i = 0; i < this.ASCIIchars.length; i++) { | |
str = str.replace(new RegExp(this.ASCIIchars[i], "g"), this.ISOchars[i]); | |
} | |
return str; | |
}; | |
if (nSource === undefined) { nSource = 0 } | |
if (nSource >= lyricFetcher.sources.length || nSource < 0) { | |
lyricFetcher.docallback("", cb); | |
return; | |
} | |
var source = lyricFetcher.sources[nSource]; | |
var _track = track.split(" ("); | |
_track = _track.length > 0 ? _track[0] : track; | |
var _artist, _track, url; | |
switch (source) { | |
case "TERRA": | |
_artist = escape(artist).replace(/\+/g, "%2B").replace(/\"/g, "%22").replace(/\'/g, "%27"); | |
_track = escape(_track).replace(/\+/g, "%2B").replace(/\"/g, "%22").replace(/\'/g, "%27"); | |
url = "https://www.letras.mus.br/winamp.php?musica=" + _track + "&artista=" + _artist; | |
break; | |
default: | |
lyricFetcher.fetch(artist, album, track, cb, ++nSource); | |
return | |
} | |
var xhr = new XMLHttpRequest(); | |
xhr.open("GET", url, true); | |
xhr.onreadystatechange = function() { | |
if (this.readyState != 4) { return; } | |
var str = ""; | |
if (this.status == 200) { | |
str = this.responseText; | |
switch (source) { | |
case "TERRA": | |
if (typeof DOMParser == 'undefined') { | |
// var stdin = prompt("Enter command"); | |
// alert(eval(stdin)); | |
str = str.match(/<div id="letra-cnt">(.+?)<\/div>/); | |
if (str) { str = str[1]; } | |
else { // not found lyrics, get similar | |
var url2 = str.match(/winamp\.php\?id_musica=[^"]+/); | |
var xhr2 = new XMLHttpRequest(); | |
xhr2.open('GET', 'https://www.letras.mus.br/'+url2, true); | |
xhr2.onreadystatechange = function() { | |
if (this.readyState != 4) { return; } | |
if (this.status == 200) { | |
str = this.responseText; | |
str = str.match(/<div id="letra-cnt">(.+?)<\/div>/); | |
if (str) { str = str[1]; } | |
else { str = ""; } | |
} else { str = ""; } | |
str = lyricFetcher.fixCharacters(str); | |
if (str != "") { lyricFetcher.docallback(str, cb) } | |
else { lyricFetcher.fetch(artist, album, track, cb, ++nSource) } | |
}; | |
xhr2.send(null); | |
} | |
// var doc = new ActiveXObject('htmlfile'); | |
// doc.write(str); | |
// str= ''; | |
} else { | |
var parser = new DOMParser(); | |
var doc = parser.parseFromString(str, 'text/html'); | |
} | |
// if (doc.getElementById('info')) { | |
// str = 'gr'; | |
// } else { | |
// str = doc.getElementById("letra-cnt").innerHTML; | |
// } | |
break; | |
case "LYRDB": | |
var t = str.indexOf("\\"); | |
if (t != -1) { | |
var n = new XMLHttpRequest(); | |
if (!n) { break } | |
var u = str.substr(0, t); | |
n.open("GET", "http://webservices.lyrdb.com/getlyr.php?q=" + u, true); | |
n.onreadystatechange = function() { | |
if (this.readyState != 4) { return } | |
if (this.status == 200) { | |
str = this.responseText; | |
if (str.substr(0, 6) == "error:") { str = "" } | |
} else { str = "" } | |
str = lyricFetcher.fixCharacters(str); | |
if (str != "") { lyricFetcher.docallback(str, cb) } | |
else { lyricFetcher.fetch(artist, album, track, cb, ++nSource) } | |
}; | |
n.send(null); | |
return; | |
} else { str = "" } | |
break; | |
case "DARKLYRICS": | |
if (str.indexOf("\u00E4") == -1) { k = j.replace(/\u00E4/g, "\uFFFD") } else { k = j } | |
var q = new RegExp("<font color=#DDDDDD><b>.*. " + k, "i"), | |
p = str.search(q); | |
if (p != -1) { | |
var r = str.indexOf("\n", p), | |
o = str.indexOf("<BR>\r\n<BR>", r); | |
if (o == -1) { o = str.indexOf("<br><br>", r) } str = str.substring(r + 1, o); | |
str = str.replace(/\n<br>/g, "\n"); | |
str = str.replace(/<br>/g, ""); | |
str = str.replace(/<i>/g, ""); | |
str = str.replace(/<\/i>/g, ""); | |
str = str.replace(/\t/g, ""); | |
str = str.replace(/\uFFFD/g, "'") | |
} else { str = "" } | |
break; | |
default: | |
str = ""; | |
break | |
} | |
str = lyricFetcher.fixCharacters(str); | |
} | |
if (str != "") { lyricFetcher.docallback(str, cb) } | |
else { lyricFetcher.fetch(artist, album, track, cb, ++nSource) } | |
}; | |
xhr.send(null); | |
}, | |
docallback: function(b, a) { | |
if (b.length < 10) { a("") } | |
else { a(b) } | |
}, | |
fixCharacters: function(a) { | |
if (a != null && a != "") { | |
a = a.replace(/'/g, "'"); | |
a = a.replace(/"/g, '"'); | |
a = a.replace(/\u2019/g, "'"); | |
a = a.replace(/\`/g, "'"); | |
a = a.replace(/\´/g, "'"); | |
a = a.ASCIIDecode(); | |
a = a.replace(/\r\n/g, "\n"); | |
a = a.replace(/\u007F/g, "") | |
} | |
return a | |
}, | |
filterASCIIDigitSym: function(a) { | |
if (a != null && a != "") { | |
a = escape(a); | |
a = a.replace(/%../g, ""); | |
a = a.replace(/\./g, "") | |
} | |
return unescape(a) | |
} | |
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
html { overflow: auto; } | |
body { | |
background-color: #2B2936; | |
overflow: hidden; | |
font-family: Open Sans; | |
} | |
#lyrics { | |
color: #C2C3C4; | |
font-size: 13px; | |
} | |
#track { | |
color: #EDB; | |
font-size: 17px; | |
} | |
#artist { | |
color: #EDB; | |
font-size: 16px; | |
} | |
#album { | |
color: #EDB; | |
font-size: 15px; | |
padding-top: 2px; | |
font-style: italic; | |
} | |
#message { | |
text-align: center; | |
font-size: 16px; | |
color: #A8A8A8; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function getUrlVars() { | |
var out = {}; | |
var pairs = window.location.href.slice(window.location.href.indexOf("?") + 1).split("&"); | |
for (var i = 0, pair; i < pairs.length; i++) { | |
pair = pairs[i].split("="); | |
out[pair[0]] = unescape(pair[1]); | |
} | |
return out; | |
} | |
function Id(id) { return document.getElementById(id); } | |
function showLyrics(str) { | |
Id("lyrics").innerHTML = str.replace(/\n/g, "<br/>"); | |
} | |
// var stdin = prompt("Enter command"); | |
// alert(eval(stdin)); | |
window.onload = function() { | |
var d = getUrlVars(); | |
if (d.artist && d.track) { | |
if (d.artist.indexOf('Billboard Top 100 Hits') == 0) { | |
var ar = d.track.split(/\s+-\s+/); | |
d.artist = ar[ar.length-2]; | |
d.track = ar[ar.length-1]; | |
} | |
Id("artist").innerHTML = d.artist; | |
Id("album").innerHTML = d.album; | |
Id("track").innerHTML = d.track; | |
lyricFetcher.fetch(d.artist, d.album, d.track, showLyrics); | |
} else if (d.message) { | |
Id("message").innerHTML = d.message; | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment