您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
随机播放萌否电台中收藏的音乐的小脚本( ̄▽ ̄")……
// ==UserScript== // @name Moe-FM Fav-Songs Random Play // @version 1.3 // @author 864907600cc // @description 随机播放萌否电台中收藏的音乐的小脚本( ̄▽ ̄")…… // @include http://moe.fm/home/* // @include http://moe.fm/listen* // @exclude http://moe.fm/listen/playlist* // @icon http://nyan.moefou.org/avatar_group/00/00/000074.jpg // @grant none // @namespace https://greasyfork.org/users/141 // ==/UserScript== if(!window.localStorage.getItem('rp-setting'))window.localStorage.setItem('rp-setting','{"s1":1,"s2":0,"s3":50,"s4":0}'); var rps=JSON.parse(window.localStorage.getItem('rp-setting')); if(rps.s4==null||rps.s4==undefined)rps.s4=1; if(/moe.fm\/listen/.test(window.location.href)){ if(window.sessionStorage.length>0)window.sessionStorage.clear(); var clickb=document.createElement('li'), issetting=0; clickb.innerHTML='<style>.random-play .random-play-setting{position:absolute;right:10px;display:none}.random-play:hover .random-play-setting{display:inline;color:#0069D6;}.random-play .random-play-setting:hover{color:#444}</style><a class="radio-menu-fav-song random-play" style="cursor:pointer">随机播放收藏曲目<span class="random-play-setting">设置</span></a>'; clickb.className='b-b'; document.getElementsByClassName('radio-menu-container')[0].getElementsByTagName('ul')[0].appendChild(clickb); clickb.getElementsByTagName('span')[0].onclick=function(event){ issetting=1; setting(); } clickb.onclick=function(event){ if(issetting!=1){ if(!window.localStorage.getItem('rp-favsong-data')){ window.sessionStorage.setItem('rp-fetch','true'); /*rps.s4==0?*/getting()/*:getting_xml()*/; } else if(rps.s1==1){ if(rps.s2==1)window.localStorage.removeItem('rp-favsong-data'); window.sessionStorage.setItem('rp-fetch','true'); /*rps.s4==0?*/getting()/*:getting_xml()*/; } else run(); } } } if(window.sessionStorage.getItem('rp-fetch'))getting(); function getting(){ var user=document.getElementsByClassName('navi-panel-content')[0].getElementsByTagName('a')[0].href.split('moe.fm/home/')[1], src='http://moe.fm/home/'+user+'/songs'; if(!window.sessionStorage.getItem('rp-page')){ window.sessionStorage.setItem('rp-page','1'); window.location.href=src; } else{ if(!window.sessionStorage.getItem('rp-lastpage')){ var page_a=document.getElementsByClassName('pages')[0].getElementsByTagName('a'); var lastpage=page_a[page_a.length-1].href.split('page/')[1]; window.sessionStorage.setItem('rp-lastpage',lastpage); } var _=document.createElement('div'); _.id='rp_tips'; document.body.appendChild(_); _.innerHTML='<style>#rp_tips{width:100%;text-align:center;color:white;font-size:32px;top:50%;margin-top:-59px;vertical-align:middle;position:fixed;z-index:99999;-webkit-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;pointer-events:none;font-family:"微软雅黑","Microsoft Yahei Font","微軟細黑"}#rp_tips p{background:rgba(255,119,119,.5);padding-top:50px;padding-bottom:50px;text-shadow:red 0 0 5px,red 0 0 5px,red 0 0 7px,red 0 0 7px,red 0 0 10px,red 0 0 10px,red 0 0 15px,red 0 0 15px;}</style><p id="rp_tips_t">正在获取第 '+window.sessionStorage.getItem('rp-page')+' 页数据,共 '+window.sessionStorage.getItem('rp-lastpage')+' 页,请稍候......</p>'; if(!window.localStorage.getItem('rp-favsong-data'))window.localStorage.setItem('rp-favsong-data',''); var button=document.getElementsByClassName('fav-song'); for(var i=0;i<button.length-1;i++){ var data=button[i].href.split('song/')[1].split('?')[0]; if(!RegExp(data).test(window.localStorage.getItem('rp-favsong-data'))){ result=1; window.localStorage.setItem('rp-favsong-data',data+'|'+window.localStorage.getItem('rp-favsong-data')); } else{ result=2; //break; } } if(result==1){ window.sessionStorage.setItem('rp-page',parseInt(window.sessionStorage.getItem('rp-page'),10)+1); var page=parseInt(window.sessionStorage.getItem('rp-page'),10), lastpage=parseInt(window.sessionStorage.getItem('rp-lastpage'),10); if(page<=lastpage)window.location.href=src+'/page/'+page; else redir(); } else if(result==2)redir(); } } function getting_xml(){ var str='http://moe.fm/listen/playlist?api=json&api_key=2cbd62a82755d15d054525b1646af0b30517cafd2&fav=song&perpage=30&page=',xhr=new XMLHttpRequest(),p=1,_=document.createElement('div'),l,result; if(!window.localStorage.getItem('rp-favsong-data'))window.localStorage.setItem('rp-favsong-data',''); _.id='rp_tips'; document.body.appendChild(_); _.innerHTML='<style>#rp_tips{width:100%;text-align:center;color:white;font-size:32px;bottom:0;vertical-align:middle;position:fixed;z-index:99999;-webkit-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;pointer-events:none;font-family:"微软雅黑","Microsoft Yahei Font","微軟細黑"}#rp_tips p{background:rgba(255,119,119,.5);padding-top:50px;padding-bottom:50px;text-shadow:red 0 0 5px,red 0 0 5px,red 0 0 7px,red 0 0 7px,red 0 0 10px,red 0 0 10px,red 0 0 15px,red 0 0 15px;}</style><p id="rp_tips_t">正在获取第 <span id="rp_tips_t_n">1</span> 页数据,请稍候......</p>'; xhr.onreadystatechange=function(){ if(xhr.readyState==4&&xhr.status==200){ l=JSON.parse(xhr.responseText).response; if(l){ var ls=l.playlist; for(var i=0;i<ls.length;i++){ if(window.localStorage.getItem('rp-favsong-data').indexOf(ls[i].sub_id)<0){ window.localStorage.setItem('rp-favsong-data',ls[i].sub_id+'|'+window.localStorage.getItem('rp-favsong-data')); result=1; } else{ //break; result=2; } } if(l.information.may_have_next==true)p++; else result=2; console.log(p) if(result==1){ document.getElementById('rp_tips_t_n').innerHTML=p; xhr.open('GET',str+p); xhr.send(); } else redir(); } else{ alert('通过 API 获取数据失败,尝试使用默认方式获取收藏曲目数据……'); getting(); } } } xhr.open('GET',str+p); xhr.send(); } function redir(){ document.getElementById('rp_tips_t').innerHTML='数据更新完毕! 正在跳转至播放页......'; window.sessionStorage.removeItem('rp-fetch'); window.sessionStorage.removeItem('rp-page'); window.sessionStorage.removeItem('rp-lastpage'); window.sessionStorage.removeItem('rp-getdata'); run(); } function run(){ var data=window.localStorage.getItem('rp-favsong-data').split('|'),playlist=''; for(var i=0;i<rps.s3;i++){ var num=parseInt(Math.random()*(data.length-2)); playlist+=data[num]+','; } window.location.href='http://moe.fm/listen?song='+playlist; } function setting(){ var s_bg=document.createElement('div'); s_bg.style.cssText='position:fixed;width:100%;height:100%;z-index:99990;top:0;left:0'; document.body.appendChild(s_bg); var s_container=document.createElement('div'); s_container.style.cssText='position:fixed;top:50%;margin-top:-150px;width:750px;height:300px;outline:10000px solid rgba(0,0,0,.5);left:50%;margin-left:-375px;z-index:100000;font-size:14px;line-height:32px;background:rgba(255,255,255,.75);font-family:"微软雅黑","Microsoft Yahei Font","微軟細黑"'; s_container.innerHTML='<div style="margin:25px"><h2 align="center">随机播放设置</h2><hr><p><input id="abc1" type="checkbox" name="abc1"><label for="abc1">每次播放前都更新收藏曲目数据</label><span style="color:gray">(推荐,其实也占用不了多少时间← ←)</span></p><p><input id="abc2" type="checkbox" name="abc2"><label for="abc2">更新收藏曲目数据时清除历史缓存</label><span style="color:gray">(不推荐,除非你取消了某些音乐或者出现了 bug ← ←)</span></p><p style="opacity:0.75;pointer-events:none"><input id="abc4" type="checkbox" name="abc4"><label for="abc4">通过 XMLHttpRequest 方式调用萌否 API 获取收藏曲目数据</label><del style="color:gray">(实验性功能,默认开启 ← ← 【喂!)</del></p><p><label for="abc3">开启随机播放时随机播放<input id="abc3" type="number" name="abc3" style="width:100px">首音乐</label><span style="color:gray">(默认 50 ,由于 $_GET 限制不宜设置过大← ←)</span></p><p align="center"><span id="abcb1" style="color:#f66;cursor:pointer">立即清除历史缓存</span> <span id="abcb2" style="color:#6f6;cursor:pointer">立即更新收藏曲目</span></p><p align="center"><input id="abcs" type="button" value="保存" style="width:75px;height:35px;font-family:\'微软雅黑\',\'Microsoft Yahei Font\',\'微軟細黑\'"></p><p align="center" style="color:gray;font-size:0.75em">有疑问、 bug 反馈?告诉我吧~~( ´ ▽ ` )ノ 我在萌否<a href="http://moefou.org/home/864907600cc" target="_blank">@864907600cc</a> 贴吧<a href="http://www.baidu.com/p/864907600cc" target="_blank">@864907600cc</a> (常驻 chrome 吧),感谢支持~~> <</p></div>'; document.body.appendChild(s_container); if(rps.s1==1)document.getElementById('abc1').setAttribute('checked','checked'); if(rps.s2==1)document.getElementById('abc2').setAttribute('checked','checked'); if(rps.s3)document.getElementById('abc3').setAttribute('value',rps.s3); //if(rps.s4==1)document.getElementById('abc4').setAttribute('checked','checked'); document.getElementById('abcb1').onclick=function(event){ window.localStorage.removeItem('rp-favsong-data'); alert('数据已清除...在下次随机播放时会重新获取并储存收藏曲目数据...'); } document.getElementById('abcb2').onclick=function(event){ if(rps.s2==1)window.localStorage.removeItem('rp-favsong-data'); window.sessionStorage.setItem('rp-fetch','true'); rps.s4==0?getting():getting_xml(); } document.getElementById('abcs').onclick=function(event){ var abc=new Object(); if(document.getElementById('abc1').checked)abc.s1=1;else abc.s1=0; if(document.getElementById('abc2').checked)abc.s2=1;else abc.s2=0; if(document.getElementById('abc3').value)abc.s3=document.getElementById('abc3').value; else{ abc.s3=50; alert('随机播放音乐数设置有误...已设置为默认值...'); } //if(document.getElementById('abc4').checked)abc.s4=1;else abc.s4=0; window.localStorage.setItem('rp-setting',JSON.stringify(abc)); issetting=0; s_container.outerHTML=''; s_bg.outerHTML=''; rps=JSON.parse(window.localStorage.getItem('rp-setting')); } } if(!window.localStorage.getItem('rp_version')||window.localStorage.getItem('rp_version')!='1.3'){ if(!window.localStorage.getItem('rp_version'))var l_version='1.0'; else var l_version=window.localStorage.getItem('rp_version'); var tips=document.createElement('script'); tips.src='http://ext.ccloli.com/moe-fm/rp-update-tips?version='+l_version; document.body.appendChild(tips); window.localStorage.setItem('rp_version','1.3'); }