├── ReadMe.md └── baidumusic.js /ReadMe.md: -------------------------------------------------------------------------------- 1 | # foobar2000_ESLyricScript 2 | the ESLyric script for foobar 2000 to download the lyrics from baidu music 3 | -------------------------------------------------------------------------------- /baidumusic.js: -------------------------------------------------------------------------------- 1 | //=================================================== 2 | //=========Baidu Music Source For ESLyric============ 3 | //===============jumufeng 2015-05-20=================== 4 | //========See "Tools->Readme" for more info========== 5 | //=================================================== 6 | 7 | var ado = new ActiveXObject("ADODB.Stream"); 8 | var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0"); 9 | var xmlDoc = new ActiveXObject("MSXML.DOMDocument"); 10 | 11 | function get_my_name() 12 | { 13 | return "百度音乐"; 14 | } 15 | 16 | function get_version() 17 | { 18 | return "0.0.1"; 19 | } 20 | 21 | function get_author() 22 | { 23 | return "jumufeng"; 24 | } 25 | 26 | function start_search(info,callback) 27 | { 28 | var url; 29 | var title = info.Title; 30 | var artist = info.Artist; 31 | 32 | //process keywords 33 | title = process_keywords(title); 34 | artist = process_keywords(artist); 35 | 36 | url = "http://box.zhangmen.baidu.com/x?op=12&count=1&title=" + title + "$$" + artist +"$$$$"; 37 | 38 | try { 39 | xmlhttp.open("GET",url,false); 40 | xmlhttp.send(); 41 | } catch (e) { 42 | return; 43 | } 44 | 45 | var new_lyric = fb.CreateLyric(); 46 | if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 47 | //parse XML 48 | var xml_text = xmlhttp.responseText; 49 | xmlDoc.loadXML(xml_text); 50 | //fb.trace(xml_text); 51 | var results = getAllLyrics(); 52 | 53 | //download lyric 54 | for (var i = 0; i < results.length; i++) { 55 | try { 56 | var url = "http://box.zhangmen.baidu.com/bdlrc/" + parseInt(results[i]/100) + "/" + results[i] + ".lrc"; 57 | xmlhttp.open("GET", url, false); 58 | xmlhttp.send(); 59 | } catch (e) { 60 | continue; 61 | } 62 | if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 63 | //add lyrics to eslyric 64 | new_lyric.Title = title; 65 | new_lyric.Artist = artist; 66 | new_lyric.Source = get_my_name(); 67 | new_lyric.LyricText = UTF8ToGB2312(xmlhttp.responseBody); 68 | callback.AddLyric(new_lyric); 69 | } 70 | } 71 | } 72 | 73 | new_lyric.Dispose(); 74 | } 75 | 76 | function process_keywords(str) 77 | { 78 | var s = str; 79 | s = s.toLowerCase(); 80 | s = s.replace(/\'|·|\$|\&|–/g, ""); 81 | //truncate all symbols 82 | s = s.replace(/\(.*?\)|\[.*?]|{.*?}|(.*?/g, ""); 83 | s = s.replace(/[-/:-@[-`{-~]+/g, ""); 84 | s = s.replace(/[\u2014\u2018\u201c\u2026\u3001\u3002\u300a\u300b\u300e\u300f\u3010\u3011\u30fb\uff01\uff08\uff09\uff0c\uff1a\uff1b\uff1f\uff5e\uffe5]+/g, ""); 85 | return s; 86 | } 87 | 88 | function getAllLyrics() 89 | { 90 | var result = []; 91 | getSubLrcids(xmlDoc.documentElement, result); 92 | var uq = {}; 93 | var rq = []; 94 | for (var i=0; i 1) 117 | { 118 | getSubLrcids(subRoots[i], arr); 119 | } 120 | } 121 | } 122 | } 123 | 124 | 125 | function UTF8ToGB2312(s){ 126 | ado.Charset = "gb2312"; 127 | ado.Type = 1; 128 | ado.Open(); 129 | ado.Write(s); 130 | ado.Position = 0; 131 | ado.Type = 2; 132 | var ret = ado.ReadText(); 133 | ado.Close(); 134 | return ret; 135 | } 136 | --------------------------------------------------------------------------------