把上面的代码复制,保存为htm文件,打开运行1.当500个mp3的真实地址在页面显示后,然后
右键---用讯雷下载全部链接,那感觉不是一般的爽,全部下载后
进入讯累已下载栏目,选择刚刚下的歌,鼠标右键弹出讯雷菜单 选"重命名"--->"注释作为文件名",又是一种爽,看着几百个歌整整齐齐的摆在那里了2.因为是娱乐,所以没有那么多时间考虑兼容非ie浏览器啦。
而且我个人只喜欢 *.mp3文件,可偏偏里面有两首歌只提供 wma 文件,喜欢其他格式音乐的朋友
只需要在代码中修改不到10个字母就可以下载wma文件了。3.几乎每首歌曲baidu都给我们提供了好几十个下载连接。而且给出的mp3文件大的有七八兆,
小的还不到1兆。而且并不一定baidu所提供的链接都可以100%连通。
那到底挑哪个下载呢,程序无法判断,只能随机选择两个。一个下载,另一个备用,当你发现
有mp3不能下载,或者下的歌太小想重新下的时候,点一下更改链接地址那个按纽,把下载地址更换为备用地址,再重新下载4.上一个版本中速度慢是因为对 responseBody的编码导致ie假死机。 这个版本用responseText
所以速度快了100多倍。 虽然responseText取回来的东东汉字是乱码,但这并不妨碍我们取歌的
地址。为了速度考虑,凡下载地址中含汉字的地址我都抛弃掉了。
右键---用讯雷下载全部链接,那感觉不是一般的爽,全部下载后
进入讯累已下载栏目,选择刚刚下的歌,鼠标右键弹出讯雷菜单 选"重命名"--->"注释作为文件名",又是一种爽,看着几百个歌整整齐齐的摆在那里了2.因为是娱乐,所以没有那么多时间考虑兼容非ie浏览器啦。
而且我个人只喜欢 *.mp3文件,可偏偏里面有两首歌只提供 wma 文件,喜欢其他格式音乐的朋友
只需要在代码中修改不到10个字母就可以下载wma文件了。3.几乎每首歌曲baidu都给我们提供了好几十个下载连接。而且给出的mp3文件大的有七八兆,
小的还不到1兆。而且并不一定baidu所提供的链接都可以100%连通。
那到底挑哪个下载呢,程序无法判断,只能随机选择两个。一个下载,另一个备用,当你发现
有mp3不能下载,或者下的歌太小想重新下的时候,点一下更改链接地址那个按纽,把下载地址更换为备用地址,再重新下载4.上一个版本中速度慢是因为对 responseBody的编码导致ie假死机。 这个版本用responseText
所以速度快了100多倍。 虽然responseText取回来的东东汉字是乱码,但这并不妨碍我们取歌的
地址。为了速度考虑,凡下载地址中含汉字的地址我都抛弃掉了。
for(var i=0;i<mp3ToDownNum;i++){ //保存歌名到数组
mp3NameList.push(arr[i].replace('><a href="http。
(new XHConn()).connect(mp3SeachUrl.replace("$$$",mp3NameLi。。
}
修改以前,mp3文件信息一个接着一个获取的。(要排队,恩~)
比方说,如果第3个mp3的信息还没有取回来,就不会去取下一个mp3(第四个)修改后,取mp3文件信息无须排队的
可能文件2的信息还正在读取,文件5,文件6的结果就已经返回来了。
这样程序会快很多。但是正因为不要排队,会造成歌名和排序混乱。(打个比方
排本来排序为 1.GGG 2.BBB 3. DDD 4.YYY 可能取回来后是 1.YYYY 2. BBBB 3.DDDD)在我的机子上,代码非要这样写,他在工作for(var i=0;i<mp3ToDownNum;i++){ //保存歌名到数组
mp3NameList.push(arr[i].replace('><a href="http。
}
for(var i=0;i<mp3ToDownNum;i++){ //保存歌名到数组
(new XHConn()).connect(mp3SeachUrl.replace("$$$",mp3NameLi。。
}
下面这样就罢工哦,莫名奇妙。 for(var i=0;i<mp3ToDownNum;i++){ //保存歌名到数组
mp3NameList.push(arr[i].replace('><a href="http。
(new XHConn()).connect(mp3SeachUrl.replace("$$$",mp3NameLi。。
}
我其实在发贴之前是排过版的,代码可读性很好,万恶的CSDN把排版都搞没了
<script language=vbs>
'秋水无痕写的函数,以前CSDN的高手哦
function urldecoding(vstrin) 'url解码, 把%B8%DF%CA%D6之类的字符串还原为汉字
dim i,strreturn,strSpecial
strSpecial = "!""#$%&'()*+,/:;<=>?@[\]^`{|}~%" '特殊字符
strreturn = ""
for i = 1 to len(vstrin)
thischr = mid(vstrin,i,1)
if thischr="%" then
intasc=eval("&h"+mid(vstrin,i+1,2))
if instr(strSpecial,chr(intasc))>0 then
strreturn= strreturn & chr(intasc)
i=i+2
else
intasc=eval("&h"+mid(vstrin,i+1,2)+mid(vstrin,i+4,2))
strreturn= strreturn & chr(intasc)
i=i+5
end if
else
if thischr="+" then
strreturn= strreturn & " "
else
strreturn= strreturn & thischr
end if
end if
next
urldecoding = strreturn
end function
</script>
<SCRIPT LANGUAGE=javascript>
function XHConn(){
var xmlhttp, bComplete = false;
try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
catch (e) { try { xmlhttp = new XMLHttpRequest(); }
catch (e) { xmlhttp = false; }}}
if (!xmlhttp) return null;
this.connect = function(sURL, sMethod, sVars, fnDone) {
if (!xmlhttp) return false;
bComplete = false;
sMethod = sMethod.toUpperCase();
try {
if (sVars) sURL=sURL+"?"+sVars
xmlhttp.open(sMethod, sURL,true);
sVars = null;
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4 && !bComplete){
bComplete = true;
fnDone(xmlhttp)
}};
xmlhttp.send(sVars);
}
catch(z) { return false; }
return true;
};
return this;
}function showMp3Links(){
//top 500 mp3的地址
var top500url="http://list.mp3.baidu.com/topso/mp3topsong.html" // 把$$$改为你要的歌名就可以去baidu搜歌了 $$$可以是汉字,也可以是编码后的 %B8%DF%CA%D6
// 注意这里只下载 *.mp3文件,喜欢rm,wma的改下面这句
var mp3SeachUrl=new String("http://mp3.baidu.com/m?f=ms&tn=baidump3&ct=134217728&lf=&rn=&word=$$$&lm=0")//要下载的mp3的总数目,这个数字不要超过501,否则...
var mp3ToDownNum=500
var myConn = new XHConn();//这个数组保存要下载的歌名,注:编码过的歌名哦 类似 %B8%DF%CA%D6
var mp3NameList=new Array()
var curIndex=0 //指示当前正在第几首的歌var get500Mp3Name = function (oXML) {
// ><a href="http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%C1%A6%BA%EA"
var reg=/\>\<a href\=\"http\:\/\/mp3\.baidu.com\/m\?tn\=baidump3\&ct\=134217728\&lm=\-1\&li\=500\&word\=\S+[^\"]/gi;
var arr = oXML.responseText.match(reg);
mp3NameList.length=curIndex=0 for(var i=0;i<mp3ToDownNum;i++){ //保存歌名到数组
try{
mp3NameList.push(arr[i].replace('><a href="http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=','').replace('" ',''))
}catch(x){continue}
}
//开始获取第一首歌的真实下载地址
myConn.connect(mp3SeachUrl.replace("$$$",mp3NameList[0]), "get",null, getDownloadInfo);
};var getDownloadInfo=function(oXML){
var htmltext=oXML.responseText
// 匹配一个真实下载地址,以http://开头, .mp3结束,注意排除了url中有汉字的情况
// http://xxx.xxx.xx/xxx/xxx.mp3
var reg=/ http\:\/\/[(\w|\.|\/|\,]+\.mp3/gi;
//匹配类似 rn=20&tn=news&word=%B4%F3%B3%C7%D0%A&t=12" 的字符,因为%B4%F3%B3%C7%D0%A这些就是歌名啊
var reg2=/rn\=20\&tn\=news\&word\=[\.|\S]+[^\"]/i;
var arr=htmltext.match(reg)
var mp3name=""
try{ //获取歌名,得到的是汉字,而不是 %B4%F3%B3%C7%D0%A之类的鬼东西
var arr2=htmltext.match(reg2)
mp3name=urldecoding(arr2[0].replace("rn=20&tn=news&word=","").replace('&t=12" ',''))
}catch(x){
try{
mp3name=urldecoding(arr2[0].replace("rn=20&tn=news&word=","").replace('&t=12" ','').split("+")[0])
}catch(x){}
}
// 其实一个页面一般不止一个有效下载地址,正则是按随机顺序匹配所有符合要求的地址存到数组。
if (arr){ //找到了
// 顺便保存第二个有效地址做备用
addLinks(arr[0].replace(" ",""),mp3name,(arr.length>1)?arr[1]:"")
}else{ //找不到的话连接指向搜索页面,让使用者手工下载
addLinks(mp3SeachUrl.replace("$$$",mp3NameList[curIndex]),"<font color=red>错误,点击手动下载</font>","")
}
if (++curIndex<mp3ToDownNum) { //处理下一个
myConn.connect(mp3SeachUrl.replace("$$$",mp3NameList[curIndex]), "get",null, getDownloadInfo);
}else{
o.value =" 所有歌曲已全部获取"
alert(o.value)
if (document.all) o.scrollIntoView()
}
};
var addLinks=function(url,txt,rel){
o.value =[" 正在获取第",curIndex+1,"首歌曲的信息..."].join("")
var link=document.createElement("A")
link.innerHTML=[curIndex+1,txt].join(".")
link.href=url
link.rel=rel //rel 保存第二个有效下载地址做备用
link.style.cssText="display:block;font-size:15px"
link.target="_blank"var t=document.getElementById("linklist")
var tr=(curIndex % 4==0)?t.insertRow():t.rows[t.rows.length-1]
var td=tr.insertCell();
td.appendChild(link)
if (curIndex % 10==0) tr.scrollIntoView()
};if (!myConn) return "退出,ajax无法初始化"
myConn.connect(top500url, "get",null, get500Mp3Name); //开始干活
}function updateLinks(){
var arr=document.links
if (!arr.length) return alert("没有要更新的歌曲,请先获取歌曲")
for(var i=0;i<arr.length;i++){
if (arr[i].rel) arr[i].href=arr[i].rel
}
alert("所有歌曲的下载地址已经重新更新,请点击下载")
}
</script>
<body leftmargin=0>
<input type=button onclick="javascript:this.disabled=true;o.style.display='';showMp3Links()" value="获取Top500歌曲">
<input type=button onclick="javascript:updateLinks()" value="更新链接的地址">
<input type=text value=" 正在连接 mp3.baidu.com..." style="display:none;margin-left:80px" id=o readonly size=35>
<table id="linklist" width=100% border><tbody></tbody></table>
</body>