gseeker
全自动获取百度500首最热门MP3的方法
将文章归档于 G源共享 由. Ken Wong on 2005-12-23
点击看大图
  蓝色乃卧虎藏龙之地,高手众多,因此佳作屡出不穷。这次是hutia带给大家的一份非常酷的圣诞礼物。这就是全自动获取百度MP3里面的top500歌曲,一次过听完最热门的MP3。这一切都不用你亲自动手,只需一个即可。以前也曾在网上看到过类似的代码,但只针对Linux的。这次找到的代码很好用,我自己在WinXP+SP2下测试通过。

看看hutia的发布说明:

[原创]MyHTML Player release v1.1

把下面的代码copy到本地,另存为hta文件使用

特点:自动获取baidu歌曲top500并link

使用ajax技术,自动分页

注意:代码中使用了ADODB.Stream对象,可能被杀毒软件判断为恶意。

<html>
<head>
<title>My HTML Player - By Hutia</title>
<hta:application id="app1" singleinstance="yes" contextmenu="yes"
sysmenu="yes" windowstate="normal" maximizeButton="no" minimizeButton="yes"
applicationName="MyHTMLPlayer" version="1.1" innerBorder="no"
caption="yes" showintaskbar="yes" border="thin" />
<meta http-equiv="content-type" content="text/html; charset="gb2312">
<style>
body {
overflow:auto;
font-size:12px;
cursor:default;
padding:3px;
margin:0px;
border-width:0px;
}

#f1 {
display:none;
}

#table01 {
font-size:12px;
background-Color:black;
color:white;
text-align:center;
float:left;
height:300px;
}

#table01 td{
vertical-align:top;
}

#MediaPlayer1 {
width:300px;
height:300px;
}

#playListTitle {
background-Color:#001122;
color:white;
font-size:12px;
font-weight:bold;
width:100%;
height:16px;
padding:2px;
}

#playList {
width:150px;
height:280;
margin:0px;
font-size:12px;
background-Color:black;
color:white;
}

#musicList {
width:260px;
border:buttonface 4px groove;
height:200px;
float:right;
}

#musicListTitle {
font-size:13px;
width:100%;
height:20px;
background-Color:#C5FFC5;
padding:3px;
font-weight:bold;
}

#musicListContent {
height:200px;
}

#musicList .item {
width:100%;
height:20px;
line-height:12px;
padding:0px;
margin:0px;
overflow-y:hidden;
}

#musicList .item a {
color:#773;
text-decoration:none;
width:180px;
height:20px;
line-height:12px;
padding-top:5px;
padding-left:10px;
margin:0px;
position:relative;
overflow:hidden;
text-overflow:ellipsis;
}

#musicListNav {
height:18px;
}

#processBar {
position:absolute;
width:99%;
height:30px;
border:buttonface 2px inset;
z-Index:99;
background-Color:#FFF;
bottom:5px;
left:5px;
padding:5px;
}

.add2ListBtn {
width:18px;
line-height:14px;
text-align:center;
cursor:hand;
font-size:14px;
font-family:Webdings;
}

.add2ListBtn2 {
width:18px;
line-height:14px;
text-align:center;
cursor:hand;
font-size:14px;
}
</style>
<script>

//****全局变量定义区************
taskState="loadList";
url="http://list.mp3.baidu.com/topso/mp3topsong.html";
taskURLs=new Array();
taskNames=new Array();
pageSize=10;
pageNo=0;
currentTask=pageNo*pageSize;
maxTask=currentTask+pageSize;
windowWidth=740;
windowHeight=400;

//****初始化组件***************
try{
var xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
document.write("<h3>加载失败,组件被禁止</h3>");
}

try{
top.moveTo((screen.availWidth-windowWidth)/2,(screen.availHeight-windowHeight)/2);
top.resizeTo(windowWidth,windowHeight);
}catch(e){}


//****过程函数区***************
//---初始化-------
function init(){
MediaPlayer1.AutoRewind=false;
MediaPlayer1.AutoStart=true;
MediaPlayer1.SendPlayStateChangeEvents=true;
MediaPlayer1.attachEvent("PlayStateChange",checkPlayStatus);
initLoadMusic();
}


//####关于baidu音乐获取的代码######
//---初始化下载-----
function initLoadMusic(){
currentTask=pageNo*pageSize-1;
maxTask=currentTask+pageSize;
musicListContent.innerHTML="";
processBar.style.display="";
loadBaiduMusic();
}

//---开始从baidu下载音乐-----
function loadBaiduMusic(){
//如果状态是loadMusic那么从url列表取下载地址
if(taskState=="loadMusic"){
currentTask++;
if(currentTask>maxTask||currentTask>taskURLs.length-1){
//下载完成
try{clearTimeout(vbTimer);}catch(e){}
processBar.style.display="none";
createNavigate();
return(false);
}
if(currentTask>taskURLs.length-1){
currentTask--;
setTimeout(loadBaiduMusic,1000);
return(false);
}
url=taskURLs[currentTask];
}
xmlHttp.open("GET",url,true);
xmlHttp.send();
xmlHttp.onreadystatechange=checkXMLHttpState;
checkXMLHttpState();
}

//----处理下载-----
function checkXMLHttpState(){
if (xmlHttp.readyState==4){
if (xmlHttp.status==200){
if(taskState=="loadList"){
taskState="loadMusic";
//分析下载内容生成歌曲地址列表
analyBaiduList();
currentTask=-1;
}else{
//获得mp3的真实地址
analyBaiduMusic();
}
}
loadBaiduMusic();
}
}

//----分析下载内容生成歌曲地址列表----
function analyBaiduList(){
var strHTML=b2s(xmlHttp.responseBody);
var iStart=strHTML.search(/<body/i);
var iEnd=strHTML.toLowerCase().indexOf("<\/script",iStart+5);
strHTML=strHTML.substring(iStart,iEnd);
var fff=document.createElement("Iframe");
fff.id="tempFrame";
fff.style.display="none";
document.body.insertBefore(fff);
theWin=eval("tempFrame");
theWin.document.open();
theWin.document.clear();
theWin.document.write(strHTML);
theWin.document.close();

for(var i=0;i<theWin.document.links.length;i++){
if(theWin.document.links[i].href.match(/mp3.baidu.com\/m\?tn=baidump3\&ct=/i)&&theWin.document.links[i].parentNode.firstChild==theWin.document.links[i]){
//将url存入taskURLs,歌曲名称存入taskNames
taskURLs[taskURLs.length]=theWin.document.links[i].href.replace(/lm=-1/,"lm=0");
taskNames[taskNames.length]=theWin.document.links[i].innerText;
}
}
fff.outerHTML="";
}

//----获得mp3的真实地址,添加到music list-----
function analyBaiduMusic(){
var strHTML=b2s(xmlHttp.responseBody);
var strTxt=taskNames[currentTask];
//匹配URL的正则
var aryURL=strHTML.match(/ http:\/\/[^ ]+ /gi);
if(!aryURL){return(false);}
var theC=document.createElement("DIV");
theC.className="item";
musicListContent.insertBefore(theC);
//获取10个地址以免链接失效
for(var i=0;i<10&&i<aryURL.length;i++){
//每个item的容器
var theD=document.createElement("DIV");
theD.onmouseover=musicList_mouseover;
theD.onmouseout=musicList_mouseout;
//link元素
var theLink=document.createElement("A");
var strURL=aryURL[i].substring(2,aryURL[i].length-2);
theLink.href=strURL;
theLink.title=strURL;
theLink.innerText=(currentTask+1)+"."+strTxt;
if(i>0){theLink.innerText+="."+(i+1);}
theLink.onclick=musicList_item_click;
theD.insertBefore(theLink);
//添加到列表按钮
theButton=document.createElement("Span");
theButton.className="add2ListBtn";
theButton.innerText="1";
theButton.title="添加到列表";
theButton.onclick=musicList_add2ListBtn_click;
theButton.onmouseover=musicList_item_mouseover;
theButton.onmouseout=musicList_item_mouseout;
theD.insertBefore(theButton);
//上卷按钮
theButton=document.createElement("Span");
theButton.className="add2ListBtn";
theButton.innerText="3";
theButton.title="上卷";
theButton.onclick=musicList_scrollUpBtn_click;
theButton.onmouseover=musicList_item_mouseover;
theButton.onmouseout=musicList_item_mouseout;
theD.insertBefore(theButton);
//下卷按钮
theButton=document.createElement("Span");
theButton.className="add2ListBtn";
theButton.innerText="4";
theButton.title="下卷";
theButton.onclick=musicList_scrollDownBtn_click;
theButton.onmouseover=musicList_item_mouseover;
theButton.onmouseout=musicList_item_mouseout;
theD.insertBefore(theButton);
//打开新窗口按钮
theButton=document.createElement("Span");
theButton.className="add2ListBtn";
theButton.innerText="2";
theButton.title="打开新窗口";
theButton.onclick=musicList_newWinBtn_click;
theButton.onmouseover=musicList_item_mouseover;
theButton.onmouseout=musicList_item_mouseout;
theD.insertBefore(theButton);

theC.insertBefore(theD);
}
}

//####关于播放器播放音乐的代码######
//----检查播放器状态-------
function checkPlayStatus(oldState,newState){
try{
if(MediaPlayer1.PlayState==0){
MediaPlayer1.detachEvent("PlayStateChange",checkPlayStatus);
MediaPlayer1.stop();
if(playList.options.selectedIndex<playList.options.length-1){
playList.options[playList.options.selectedIndex+1].selected=true;
}else{
playList.options[0].selected=true;
}
MediaPlayer1.fileName=playList.value;
MediaPlayer1.play();
setTimeout('MediaPlayer1.attachEvent("PlayStateChange",checkPlayStatus);',5000);
}
}catch(e){}
}


//**********Event Function Area***************
//----------Play List Event Start-------------
function playList_dragOver(){
event.returnValue=false;
}

function playList_dragEnter(){
event.returnValue=false;
event.dataTransfer.dropEffect='link';
}

function playList_drop(){
strTxt=unescape(event.dataTransfer.getData('Text').split(":")[0]).replace(/\[\+\]/,"");;
strURL=unescape(event.dataTransfer.getData('Text').split(":")[1]).replace(/\[\+\]/,"");;
playList.options[playList.options.length]=new Option(strTxt,strURL);
}

function playList_keyDown(){
if(event.keyCode==46){
try{
playList.options[playList.options.selectedIndex].outerHTML="";
}catch(e){}
return(false);
}
if(event.keyCode==13){
playList_dblClick();
return(false);
}
}

function playList_dblClick(){
MediaPlayer1.detachEvent("PlayStateChange",checkPlayStatus);
MediaPlayer1.fileName=playList.value;
MediaPlayer1.play();
setTimeout('MediaPlayer1.attachEvent("PlayStateChange",checkPlayStatus);',1000);
}

//----------Music List Event Start-------------
function musicList_dragStart(){
if(event.srcElement.tagName=='A'){
event.dataTransfer.setData('Text',escape(event.srcElement.innerText)+":"+escape(event.srcElement.href));
}else{
return(false);
}
}

function musicList_mouseover(){
this.style.backgroundColor="#D5EFD5";
}

function musicList_mouseout(){
this.style.backgroundColor="";
}

function musicList_item_mouseover(){
this.style.color="gold";
}

function musicList_item_mouseout(){
this.style.color="";
}

function musicList_item_click(){
strTxt=event.srcElement.innerText;
strURL=event.srcElement.href;
playList.innerHTML="";
playList.options[0]=new Option(strTxt,strURL);
playList.options[0].selected=true;
event.returnValue=false;
playList_dblClick();
return(false);
}

function musicList_add2ListBtn_click(){
strTxt=event.srcElement.parentNode.firstChild.innerText.replace(/\[\+\]/,"");
strURL=event.srcElement.parentNode.firstChild.href;
playList.options[playList.options.length]=new Option(strTxt,strURL);
return(false);
}

function musicList_scrollUpBtn_click(){
this.parentNode.parentNode.scrollTop-=20;
}

function musicList_scrollDownBtn_click(){
this.parentNode.parentNode.scrollTop+=20;
}

function musicList_newWinBtn_click(){
open(this.parentNode.firstChild.href);
}

function musicList_nav_click(){
pageNo=this.pageID;
musicListNav.disabled=true;
this.style.color="#FF0000";
for(var i=0;i<musicListNav.all.tags("span");i++){
musicListNav.all.tags("span")[i].onclick=null;
}
initLoadMusic();
}
//**********Private Functions Lib***************
function b2s(b){
var adodbStream=new ActiveXObject("ADODB.Stream");
adodbStream.Type=1;//1=adTypeBinary
adodbStream.Open();
adodbStream.write(b);
adodbStream.position=0;
adodbStream.Type=2;
adodbStream.charset="gb2312";
//adodbStream.charset="_autodetect_all";
var re=adodbStream.readText();
adodbStream=null;
return(re);
}

function createNavigate(){
musicListNav.innerHTML="";
musicListNav.disabled=false;
var theMax=taskURLs.length;
var theC=document.createElement("span");
musicListNav.insertBefore(theC);

theMin=pageNo-4>0?pageNo-4:0;
thePageCount=parseInt(theMax/pageSize)+(theMax%pageSize==0?0:1);
theMax=pageNo+5<thePageCount?pageNo+5:thePageCount;

theButton=document.createElement("span");
theButton.className="add2ListBtn";
theButton.innerText="7";
theButton.pageID=0;
theButton.onmouseover=musicList_item_mouseover;
theButton.onmouseout=musicList_item_mouseout;
theButton.onclick=musicList_nav_click;
theC.insertBefore(theButton);
for(var j=theMin;j<theMax;j++){
theButton=document.createElement("span");
theButton.className="add2ListBtn2";
theButton.innerText=j+1;
theButton.pageID=j;
if(j!=pageNo){
theButton.onmouseover=musicList_item_mouseover;
theButton.onmouseout=musicList_item_mouseout;
theButton.onclick=musicList_nav_click;
}else{
theButton.style.color="Blue";
}
theC.insertBefore(theButton);
}
theButton=document.createElement("span");
theButton.className="add2ListBtn";
theButton.innerText="8";
theButton.pageID=thePageCount-1;
theButton.onmouseover=musicList_item_mouseover;
theButton.onmouseout=musicList_item_mouseout;
theButton.onclick=musicList_nav_click;
theC.insertBefore(theButton);
}

</script>
<body onload="init();">
<!-- 歌曲列表 -->
<div id=musicList ondragstart="musicList_dragStart();">
<div id=musicListTitle>All Music</div>
<div id=musicListContent></div>
<hr>
分页:<br>
<div id=musicListNav></div>
<hr>
<marquee scrolldelay=50 scrollamount=1>
Tips: 把歌曲拖入播放列表

Tips: 无法播放时点击左右箭头更换音乐地址
</marquee>
</div>


<!-- 状态栏 -->
<div id=processBar style="display:none;">Processing...</div>

<!-- 播放器 -->
<table id=table01>
<tr>
<td>
<object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" id="MediaPlayer1" STANDBY="Loading Windows Media Player components..." TYPE="application/x-oleobject">
<param name="AudioStream" value="-1">
<param name="AutoSize" value="-1">
<!--是否自动调整播放大小-->
<param name="AutoStart" value="0">
<!--是否自动播放-->
<param name="AnimationAtStart" value="-1">
<param name="AllowScan" value="-1">
<param name="AllowChangeDisplaySize" value="-1">
<param name="AutoRewind" value="0">
<param name="Balance" value="0">
<!--左右声道平衡,最左-9640,最右9640-->
<param name="BaseURL" value>
<param name="BufferingTime" value="15">
<!--缓冲时间-->
<param name="CaptioningID" value>
<param name="ClickToPlay" value="-1">
<param name="CursorType" value="0">
<param name="CurrentPosition" value="0">
<!--当前播放进度 -1 表示不变,0表示开头 单位是秒,比如10表示从第10秒处开始播放,值必须是-1.0或大于等于0-->
<param name="CurrentMarker" value="0">
<param name="DefaultFrame" value>
<param name="DisplayBackColor" value="0">
<param name="DisplayForeColor" value="16777215">
<param name="DisplayMode" value="0">
<param name="DisplaySize" value="0">
<!--视频1-50%, 0-100%, 2-200%,3-全屏 其它的值作0处理,小数则采用四舍五入然后按前的处理-->
<param name="Enabled" value="-1">
<param name="EnableContextMenu" value="-1">
<!-是否用右键弹出菜单控制-->
<param name="EnablePositionControls" value="-1">
<param name="EnableFullScreenControls" value="-1">
<param name="EnableTracker" value="-1">
<!--是否允许拉动播放进度条到任意地方播放-->
<param name="Filename" value="" valuetype="ref">
<param name="InvokeURLs" value="-1">
<param name="Language" value="-1">
<param name="Mute" value="0">
<!--是否静音-->
<param name="PlayCount" value="10">
<!--重复播放次数,0为始终重复-->
<param name="PreviewMode" value="-1">
<param name="Rate" value="1">
<!--播放速度1.0-2.0倍的速度播放-->
<param name="SAMILang" value>
<param name="SAMIStyle" value>
<param name="SAMIFileName" value>
<!--选择同时播放(伴音)的歌曲-->
<param name="SelectionStart" value="-1">
<param name="SelectionEnd" value="-1">
<param name="SendOpenStateChangeEvents" value="-1">
<param name="SendWarningEvents" value="-1">
<param name="SendErrorEvents" value="-1">
<param name="SendKeyboardEvents" value="0">
<param name="SendMouseClickEvents" value="0">
<param name="SendMouseMoveEvents" value="0">
<param name="SendPlayStateChangeEvents" value="-1">
<param name="ShowCaptioning" value="0">
<!--是否显示字幕,为一块黑色,下面会有一大块黑色,一般不显示-->
<param name="ShowControls" value="-1">
<!--是否显示控制,比如播放,停止,暂停-->
<param name="ShowAudioControls" value="-1">
<!--是否显示音量控制-->
<param name="ShowDisplay" value="0">
<!--显示节目信息,比如版权等-->
<param name="ShowGotoBar" value="0">
<!--一条框,在下面,有往下箭头-->
<param name="ShowPositionControls" value="-1">
<!--是否显示往前往后及列表,如果显示一般也都是灰色不可控制-->
<param name="ShowStatusBar" value="-1">
<!--当前播放信息,显示是否正在播放,及总播放时间和当前播放到的时间-->
<param name="ShowTracker" value="-1">
<!--是否显示当前播放跟踪条,即当前的播放进度条-->
<param name="TransparentAtStart" value="-1">
<param name="VideoBorderWidth" value="0">
<!--显示部的宽部,如果小于视频宽,则最小为视频宽,或者加大到指定值,并自动加大高度.此改变只改变四周的黑框大小,不改变视频大小-->
<param name="VideoBorderColor" value="0">
<!--显示黑色框的颜色, 为RGB值,比如ffff00为黄色-->
<param name="VideoBorder3D" value="0">
<param name="Volume" value="0">
<!--音量大小,负值表示是当前音量的减值,值自动会取绝对值,最大为0,最小为-9640,最大0-->
<param name="WindowlessVideo" value="0">
<!--如果是0可以允许全屏,否则只能在窗口中查看-->
</object>
</td>
<td>
<div id=playListTitle>Play List:</div>
<select id=playList size=2 ondragover="playList_dragOver();" ondragenter="playList_dragEnter();"
ondrop="playList_drop();" onkeydown="playList_keyDown();" ondblclick="playList_dblClick();">
</select>
</td>
</tr>
</table>

<body>
</html>


  是的,只需将这些代码写入文本文件中,再将文本文件重命名为xxx.hta即可。或者直接下载已做好的文件

  然后只需双击此文件即可开始:

  点击看大图

  注意:此代码仅用于个人研究之用,请勿用于非法用途,后果自负。本文已经过作者hutia同意。
Permalink: 全自动获取百度500首最热门MP3的方法
img Addthis img Ask img Blinklist img del.icio.us img Digg img Fark img Facebook img Google img Lycos img Ma.gnolia Add this page to Mister Wong Mr Wong img Netscape img Netvousz img Newsvine img Reddit img StumbleUpon img Slashdot img Tailrank img Technorati img Wink img Yahoo

Vote for 全自动获取百度500首最热门MP3的方法:

  • Currently 6.00/10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
分值情况: 6.00 / 2 评分
 
Share It
CW工具栏安设
RSSrss   | 所有的部落格订阅选择
Google google   |   什么是RSS?
Yodao Yodao
Netvibes Netvibes
AnothrAnothr
TwitterFollow us on Twitter!