把下面的代码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>
评论前必须登录!
注册