枫叶音乐盒
https://mu-jie.cc/musicBox/#/
langzaier (13654)3天前
二编:换了一种写法写正文,这下可以兼容多个版本了,包括旧版阅读。
by狼崽儿 //2026.8.12
个人很喜欢的小众听歌网站,建议平时不用就关闭搜索,避免给别人的服务器造成负担。
套的是猪场云音乐的音源,一般来说,某云音乐能听的它都能播放,如果遇到不能播放或者只有30秒的,那应该是播放地址有点问题,过段时间再听就行了。
支持歌曲和歌单搜索,切换在登录处切换,默认搜歌。
发现页是歌单,是某云的歌单。
如果没办法获取正文,可以开飞行模式或者开移动数据换一下IP。
正文规则(简化版,但可能不兼容):
@js:java.redirectUrl
{
"bookSourceComment": "by狼崽儿 \/\/2026.8.12\n个人很喜欢的小众听歌网站,建议平时不用就关闭搜索,避免给别人的服务器造成负担。\n套的是猪场云音乐的音源,一般来说,某云音乐能听的它都能播放,如果遇到不能播放或者只有30秒的,那应该是播放地址有点问题,过段时间再听就行了。\n支持歌曲和歌单搜索,切换在登录处切换,默认搜歌。\n发现页是歌单,是某云的歌单。\n\n如果没办法获取正文,可以开飞行模式或者开移动数据换一下IP。\n正文规则(简化版):\n@js:java.redirectUrl",
"bookSourceGroup": "音乐",
"bookSourceName": "枫叶音乐盒",
"bookSourceType": 1,
"bookSourceUrl": "https:\/\/mu-jie.cc\/musicBox\/#\/",
"customOrder": 0,
"enabled": true,
"enabledCookieJar": true,
"enabledExplore": true,
"exploreUrl": "@js:\nvar arr = [];\narr.push({title: '🎵 推荐歌单', url: 'https:\/\/fy-musicbox-api.mu-jie.cc\/netease\/playlist\/recommend?limit=30', style: {layout_flexGrow: 1, layout_flexBasisPercent: 1}});\nvar body = java.ajax('https:\/\/fy-musicbox-api.mu-jie.cc\/getPlaylistCategory,{\"headers\":{\"Referer\":\"https:\/\/mu-jie.cc\/\"}}') \/\/ 请求分类树\nvar d = JSON.parse(body);\nvar cats = (d && d[0] && d[0].category) || [];\nfor (var i = 0; i < cats.length; i++) {\n var g = cats[i];\n var subs = g.sub || [];\n if (subs.length > 0) {\n arr.push({title: g.name, url: '', style: {layout_flexGrow: 1, layout_flexBasisPercent: 1}}); \/\/ 分组标题独占一行\n for (var j = 0; j < subs.length; j++) {\n var s = subs[j];\n arr.push({title: s.name, url: 'https:\/\/fy-musicbox-api.mu-jie.cc\/netease\/playlist\/category?type=' + encodeURIComponent(s.id) + '&limit=30', style: {layout_flexGrow: 1, layout_flexBasisPercent: 0.25}});\n }\n }\n}\nJSON.stringify(arr);",
"header": " {\n \"User-Agent\": \"Mozilla\/5.0 (Linux; Android 10; K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/120.0.0.0 Mobile Safari\/537.36\",\n \"Referer\": \"https:\/\/mu-jie.cc\/\"\n }",
"jsLib": "function ST() {\n var v = String(source.getVariable()).split(',');\n return parseInt(v[0]) || 0;\n}\nfunction ST_NAME() {\n return ST() == 1 ? '歌单' : '歌曲';\n}",
"lastUpdateTime": "1786555474090",
"loginUi": "[{\"name\": \"🔀 当前模式\", \"type\": \"button\", \"action\": \"A()\", \"style\": {\"layout_flexGrow\": 1, \"layout_flexBasisPercent\": 1}},\n {\"name\": \"🎵 歌曲搜索\", \"type\": \"button\", \"action\": \"B(0)\", \"style\": {\"layout_flexGrow\": 1, \"layout_flexBasisPercent\": 0.5}},\n {\"name\": \"📋 歌单搜索\", \"type\": \"button\", \"action\": \"B(1)\", \"style\": {\"layout_flexGrow\": 1, \"layout_flexBasisPercent\": 0.5}}]",
"loginUrl": "A = () => {\n let v = String(this.source.getVariable()).split(',');\n let x = parseInt(v[0]) || 0;\n let names = ['歌曲', '歌单'];\n let icons = ['🎵', '📋'];\n let nl = String.fromCharCode(10);\n java.toast('━━━━━━━━━━━' + nl +\n icons[x] + ' 当前搜索模式' + nl +\n names[x] + nl +\n '━━━━━━━━━━━');\n};\nB = (x) => {\n let v = String(this.source.getVariable()).split(',');\n v[0] = x;\n this.source.setVariable(v.join(','));\n let names = ['歌曲', '歌单'];\n java.toast('已切换到:' + names[x]);\n};\n",
"respondTime": 180000,
"ruleBookInfo": {
"author": "@js:var m=baseUrl.match(\/artist=([^&]+)\/);\nm?decodeURIComponent(m[1]):''",
"coverUrl": "@js:var m=baseUrl.match(\/pic=([^&]+)\/);\nm?decodeURIComponent(m[1]):''",
"intro": "@js:var n=baseUrl.match(\/name=([^&]+)\/);\nvar a=baseUrl.match(\/artist=([^&]+)\/);\nvar indent=' '; \nvar r='';\nif(n) r+=indent+'歌曲:'+decodeURIComponent(n[1])+'\\n';\nif(a) r+=indent+'歌手:'+decodeURIComponent(a[1]);\nr",
"kind": "@js:var m=baseUrl.match(\/\\\/(song|playlist)\\\/\/);\nm?(m[1]=='song'?'单曲':'歌单'):''",
"name": "@js:var m=baseUrl.match(\/name=([^&]+)\/);\nm?decodeURIComponent(m[1]):''",
"tocUrl": "@js:var m=baseUrl.match(\/\\\/(song|playlist)\\\/([a-z]+)\\\/(\\d+)\/);\n(!m||m[1]=='song')?baseUrl:'https:\/\/fy-musicbox-api.mu-jie.cc\/meting\/?server='+m[2]+'&type=playlist&id='+m[3];"
},
"ruleContent": {
"content": "<js>\nvar raw = baseUrl;\nvar clean = raw;\nvar idx = raw.indexOf(',{');\nif (idx !== -1) {\n clean = raw.substring(0, idx);\n}\nvar headers = {\"Referer\": \"https:\/\/mu-jie.cc\/\"};\nvar resp = java.get(clean, headers);\nvar loc = resp.header(\"Location\");\nloc || clean;\n<\/js>"
},
"ruleExplore": {
"author": "@js:var d=JSON.parse(result);(d.trackCount||0)+'首'",
"bookList": "@js:var d=JSON.parse(result);\nvar arr=[];\nfor(var i=0;\ni<d.length;\ni++){arr.push(JSON.stringify(d[i]));\n}arr;",
"bookUrl": "@js:var d=JSON.parse(result);\n'https:\/\/fy-musicbox-api.mu-jie.cc\/playlist\/'+(d.server||'netease')+'\/'+d.id+'?name='+encodeURIComponent(d.name)+'&pic='+encodeURIComponent(d.coverImgUrl)",
"coverUrl": "$.coverImgUrl",
"intro": "@js:var d=JSON.parse(result);\n'歌单 · '+((d.playCount||0)\/10000).toFixed(1)+'万播放\\\\n'+((d.trackCount||0))+'首'",
"kind": "$.server",
"name": "$.name"
},
"ruleSearch": {
"author": "@js:var d=JSON.parse(result);\nd.artist?d.artist:((d.trackCount||0)+'首');",
"bookList": "@js:var d=JSON.parse(result);var arr=[];\nfor(var i=0;i<d.length;i++){arr.push(JSON.stringify(d[i]));}\narr;",
"bookUrl": "@js:var d=JSON.parse(result);d.artist?'https:\/\/fy-musicbox-api.mu-jie.cc\/song\/netease\/'+d.id+'?name='+encodeURIComponent(d.name)+'&artist='+encodeURIComponent(d.artist)+'&pic='+encodeURIComponent(d.pic):'https:\/\/fy-musicbox-api.mu-jie.cc\/playlist\/netease\/'+d.id+'?name='+encodeURIComponent(d.name)+'&pic='+encodeURIComponent(d.coverImgUrl);",
"coverUrl": "@js:var d=JSON.parse(result);\nd.pic?d.pic:d.coverImgUrl;",
"intro": "@js:var d=JSON.parse(result);\nd.artist?d.name+'\\n'+d.artist:'歌单 · '+((d.playCount||0)\/10000).toFixed(1)+'万播放 · '+((d.trackCount||0))+'首';",
"kind": "$.id",
"name": "@Json:$.name"
},
"ruleToc": {
"chapterList": "@js:\nvar m=baseUrl.match(\/\\\/(song|playlist)\\\/([a-z]+)\\\/(\\d+)\\?\/);\nvar arr=[];\nif(m&&m[1]=='song'){\n var nm=baseUrl.match(\/name=([^&]+)\/);\n var name=nm?decodeURIComponent(nm[1]):'歌曲';\n var u='https:\/\/fy-musicbox-api.mu-jie.cc\/meting\/?server='+m[2]+'&type=url&id='+m[3]+',{\"headers\":{\"Referer\":\"https:\/\/mu-jie.cc\/\"}}';\n arr.push(JSON.stringify({name:name,url:u,itemId:m[3]}));\n}else{\n var d=(typeof result==='string')?JSON.parse(result):result;\n var tracks=(d&&d.tracks)||[];\n for(var i=0;i<tracks.length;i++){\n var t=tracks[i];t.url=t.url+',{\"headers\":{\"Referer\":\"https:\/\/mu-jie.cc\/\"}}';arr.push(JSON.stringify(t));\n }\n}\narr;",
"chapterName": "$.name",
"chapterUrl": "$.url"
},
"searchUrl": "@js:\nvar st = parseInt(String(source.getVariable()).split(\",\")[0]) || 0;\nst == 1\n ? 'https:\/\/fy-musicbox-api.mu-jie.cc\/netease\/search\/playlist\/?keywords=' + encodeURIComponent(key) + '&limit=20'\n : 'https:\/\/fy-musicbox-api.mu-jie.cc\/netease\/search\/song\/?keywords=' + encodeURIComponent(key) + '&pn=' + page + '&limit=20';",
"weight": 0
}