1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

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

本帖由 不学无术2005-12-24 发布。版面名称:网站运营

  1. 不学无术

    不学无术 Ulysses 的元神

    注册:
    2005-08-31
    帖子:
    16,714
    赞:
    39
    文章太长了,大家可以去下面的地址看看:http://www.kenwong.cn/post/how-to-get-the-top500-mp3-from-baidu.html

    也可以下载完整的文件:http://www.kenwong.cn/upload/baidu500.rar

    --------------------------------------------------------------------------------

    [原创]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>
     
  2. 不学无术

    不学无术 Ulysses 的元神

    注册:
    2005-08-31
    帖子:
    16,714
    赞:
    39
    //****全局变量定义区************
    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.href.match(/mp3.baidu.com\/m\?tn=baidump3\&ct=/i)&&theWin.document.links.parentNode.firstChild==theWin.document.links){
    //将url存入taskURLs,歌曲名称存入taskNames
    taskURLs[taskURLs.length]=theWin.document.links.href.replace(/lm=-1/,"lm=0");
    taskNames[taskNames.length]=theWin.document.links.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.substring(2,aryURL.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){}
    }
     
  3. 不学无术

    不学无术 Ulysses 的元神

    注册:
    2005-08-31
    帖子:
    16,714
    赞:
    39
    //**********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").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: 把歌曲拖入播放列表
    &nbsp;&nbsp;&nbsp;&nbsp;
    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>
     
  4. 小叶

    小叶 New Member

    注册:
    2005-09-04
    帖子:
    17,941
    赞:
    33
    用JS写的,好麻烦得说。
     
  5. 不学无术

    不学无术 Ulysses 的元神

    注册:
    2005-08-31
    帖子:
    16,714
    赞:
    39
    提供下载了,直接使用就是了:)

    或者你弄个采集程序也行。
     
  6. loveuni

    loveuni New Member

    注册:
    2006-02-06
    帖子:
    11
    赞:
    0
    楼上的,采集程序如何弄?
     
  7. Henry

    Henry New Member

    注册:
    2005-09-04
    帖子:
    1,166
    赞:
    4
    我那里连歌词带歌曲,全部可以
     
  8. sdzbdy

    sdzbdy New Member

    注册:
    2006-02-17
    帖子:
    4
    赞:
    0
    真的很好用啊
     
  9. alistorm

    alistorm New Member

    注册:
    2006-05-29
    帖子:
    273
    赞:
    2
    支持楼主!
     
  10. feiyear

    feiyear New Member

    注册:
    2006-07-03
    帖子:
    2
    赞:
    0
    很好用滴说:)
     
  11. xiaohaa

    xiaohaa New Member

    注册:
    2006-01-08
    帖子:
    2,302
    赞:
    11
    没怎么看明白:ghost:
     
  12. waltwei

    waltwei New Member

    注册:
    2006-07-25
    帖子:
    41
    赞:
    0
  13. lu213

    lu213 New Member

    注册:
    2006-07-17
    帖子:
    33
    赞:
    0
    路过~~看看~~呵呵:lol: ~~~~~