您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
喜马拉雅音乐或视频下载
当前为
// ==UserScript== // @name ximalaya-download // @namespace http://greasyfork.icu/zh-CN/users/135090 // @grant none // @version 1.4.1 // @author zwb83925462 // @license BSD // @description 喜马拉雅音乐或视频下载 // @run-at document-end // @require https://registry.npmmirror.com/ajax-hook/3.0.3/files/dist/ajaxhook.min.js // @require https://registry.npmmirror.com/crypto-js/4.2.0/files/crypto-js.js // @require https://registry.npmmirror.com/jquery/3.7.1/files/dist/jquery.min.js // @match https://www.ximalaya.com/sound/* // @match https://www.ximalaya.com/album/* // ==/UserScript== (function() { 'use strict'; //获取单曲解析结果 if (location.pathname.includes("/sound/")){ var playurl; var title=document?.querySelector("h1.title")?.textContent || document?.querySelector("h1.title-wrapper")?.textContent; if (window?.location?.pathname?.includes("sound")){ var trackid=window?.location?.pathname?.split("/")[2]; var item={ id:trackid, ttl:title }; setTimeout(function(){ var link = document.createElement("a"); var container = document.body; link.id="mp4"; link.style="position:fixed;top:10%;left:2%"; link.style.display = "block"; link.style.color = "#230de5"; getAllMusicURL2(item).then(result=>{ playurl=result?.toString(); return playurl; }).then(data=>{ if (data == undefined){ link.textContent="未购买,无法下载"; link.style.fontSize = "20px"; link.style.color="#F00"; } else { link.download=item.ttl; link.textContent=item.ttl; console.log(link.href=data); } }); container.append(link); },2000); } async function getAllMusicURL2(item) { function decrypt(t) { return CryptoJS.AES.decrypt({ ciphertext: CryptoJS.enc.Base64url.parse(t) }, CryptoJS.enc.Hex.parse('aaad3e4fd540b0f79dca95606e72bf93'), { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8); } var res = null; var ares = null; const timestamp = Date.parse(new Date()); var url = `https://www.ximalaya.com/mobile-playpage/track/v3/baseInfo/${timestamp}?device=web&trackId=${item.id}&forVideo=true&needMp4=true`; var aurl =`https://www.ximalaya.com/mobile-playpage/track/v3/baseInfo/${timestamp}?device=web&trackId=${item.id}`; $.ajax({ type: 'get', url: aurl, async: false, dataType: "json", success: function(resp) { try { ares = decrypt(resp.trackInfo.playUrlList[0].url); } catch (e) { console.log("无效"); } } }); $.ajax({ type: 'get', url: url, async: false, dataType: "json", success: function(resp) { try { res = decrypt(resp.trackInfo.playUrlList[0].url); item.ttl += ".mp4"; } catch (e) { console.log("解密错误,无视频"); item.ttl += ".m4a"; res=ares; } } }); return res; } } //获取专辑列表 if (location.pathname.includes("/album/")){ var alt=[]; var ttls=[]; var abid=location.pathname.includes("/album/") ? location.pathname.split("/")[2] : "77545064"; var abapi=`https://www.ximalaya.com/revision/album/v1/getTracksList?albumId=${abid}&pageNum=1&pageSize=100`; fetch(abapi,{method:"get"}) .then(res=>{return res?.json()}) .then(res=>{ var trackcount=res?.data?.trackTotalCount; var pagenums=(trackcount/100 | 0) + (trackcount % 100 >0 ? 1 : 0); //var pagenums = (trackcount % 100 >0 ? trackcount+100 : trackcount) / 100 | 0; //console.log(pagenums); var tracks=res?.data?.tracks; tracks.forEach(i=>{ alt.push(i.url);ttls.push(i.title); }); return pagenums; }) .then(pns => { if (document.querySelector("div.download-more")){ document.querySelector("div.download-more").style.marginTop="2vh"; document.querySelector("div.download-more").innerHTML=null; } if (pns > 1){ var abapinew=abapi.replace('pageNum=1','pageNum='+pns); var morehtm=`<a id="newab" target="_blank" href="${abapinew}">${abapinew}</a><p id=tip></p>`; document.querySelector("div.download-more").innerHTML=morehtm; document.querySelector("div.download-more > #newab").style.color = "#230de5"; document.querySelector("div.download-more > #tip").textContent="专辑曲目超过100,请修改API参数后再访问.最大页码为"+pns; } document.querySelector(".sound-list>ul").innerHTML=null; document.querySelector(".sound-list>ul").style.listStyle = 'decimal'; ttls.forEach((it,n)=>{ //console.log(it,n); var ulli=document.createElement("li"); var plink=document.createElement("a"); plink.href=alt[n]; plink.target="_blank"; plink.style.color="#088"; plink.style.fontSize="20px"; plink.textContent=it; ulli.append(plink); document.querySelector(".sound-list>ul").append(ulli); }); }); } })();