让《百度随心听》轮播收藏的歌曲

  当时想法很简单,自己喜欢这个网站,但是不能轮播收藏的歌曲却是一大遗憾(想要实现这功能对百度来说非常简单,只是他不想,我想和“随心”两个字有关,如今有红心频道),只能自己动手,去尝试在客户端实现这种功能。

  不得不说,Firebug却是非常强大,可以让加载好的代码“自由编辑”,变成你想要的。

  我观察了一下加载的JS中有JQuery,那这样子就简单多了。 最简单的例子就是,在Firebug控制台中的代码编辑器中输入$('html').empty(); 这样子就清空当前页面(如果命令行编辑器没有默认打开的话,点击右下角的红色按钮)。

既然页面可以改变,尝试事件触发也是可行的(JQ中的trigger很好用,完全可以代替手动操作)。通过连续地触发固有的事件,可以轻松地实现点击下一首、翻页,但是这样做有个明显的缺点就是,触发以后,会执行一些你不需要的代码,但是你不得不忍受,因为你是”捡现成“的,比如说点了收藏目录的一首歌以后,他会切换到播放界面, 不得不通过点击“红心”再让他点回来,但是点回来的时候又重新请求一次刷新了列表,列表会到第一页,又带来另一个问题,需要回复到之前的第N页,又得触发一次。 还有就是每次请求都是需要时间的,请求未完成的时候页面或许并没有你想要的元素,所以到处是setTimeout,最后需要注意的就是最后一首歌曲放完以后,得让他回到第一页,当然这个情况已经考虑了。

  问题当然还是有的,当时只是想让“随心听” 变成背景音乐,就是人不去选歌,让他自动放。 不然会引起一个问题就是,你点的这首歌没放到一半就到下一首了,其他没什么影响。

  单曲循环也是很容易的。

(function(){
    var cySongNth = 0,cyPages = 0,cyCurrentPage = 0,cyRecycledPlayBackId = 0,cybuttons = null;
    
    function clickNextLoveSong(){
        if(!cybuttons.length){
            alert('你的延迟有点高,不建议循环播放');            
            setTimeout(function(){cyPages = $("#like-songs-wrapper .PNNW-S").length;cybuttons = $('#like-songs-wrapper .song-play');clickNextLoveSong()},3000);
            return;
        }
        if(cySongNth == cybuttons.length){
            $(window).scrollTop(0);
            clearTimeout(cyRecycledPlayBackId);
            cySongNth = 0;
            cyCurrentPage == cyPages-1? cyCurrentPage=0 : cyCurrentPage++;
            $("#like-songs-wrapper .PNNW-S:eq("+cyCurrentPage+")").trigger('click');
            setTimeout(beginInterval,5000);
            return;
    }
       $('#like-songs-wrapper .song-play').eq(cySongNth).trigger('click');  
       cySongNth++;
      
       setTimeout(function(){
            $("#userinfo-lovecount").trigger("click");        
            setTimeout(function(){
                var remianTime = caculateSongTimeReamined();
                //console.log(remianTime);
                cyRecycledPlayBackId = setTimeout(clickNextLoveSong,remianTime);
                $("#like-songs-wrapper .PNNW-S:eq("+cyCurrentPage+")").trigger('click');          
                setTimeout(function(){
                    var current = $('#like-songs-wrapper .white').eq(cySongNth-1);
                    var scrollTop = current.offset().top-200;
                    $(window).scrollTop(scrollTop);
                    current.find('.song-play').closest('.white').css('backgroundColor','#0B366D').prev().css('backgroundColor','#EFEFEF');            
                },2000);
            },2000);
           },2000);  
    }

    function beginInterval(){
        cyPages = $("#like-songs-wrapper .PNNW-S").length;
        cybuttons = $('#like-songs-wrapper .song-play');
        clickNextLoveSong();
    }

    function caculateSongTimeReamined(){
        var timeRemain = $('#playerpanel-timeinfo').text();
        var timeRemainArr = timeRemain.match(/\d+/g);
        var timeRemainToNum = Number(timeRemainArr[0]*60*1000) + Number(timeRemainArr[1]*1000);
        timeRemain = timeRemainToNum-5000>0? timeRemainToNum-5000:300000;
        return timeRemain;    
    }

    $('#userinfo-lovecount').trigger('click');
    setTimeout(beginInterval,2000);
})();

 

  最后要注意的是,得有类似FirefoxFirebug,每次进入这个网站都需要运行一次代码哦,希望能帮到你:)

  

posted @ 2013-03-24 09:34  积跬步  阅读(547)  评论(0编辑  收藏  举报