// ==UserScript== // @name 酷狗在线听/下载 // @namespace http://tampermonkey.net/ // @version 1.0 // @icon https://i0.hdslb.com/bfs/album/0d58ba3462659867aa46633d4a4791e93160ffb5.jpg // @description 无需登录在线听你想听的音乐 // @author 今天是充满希望的一天 // @match *://www.kugou.com/mixsong/* // @match *://www.kugou.com/song/* // @grant GM_xmlhttpRequest // @grant GM_download // @grant GM_addStyle // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js // @require https://cdn.bootcdn.net/ajax/libs/nprogress/0.2.0/nprogress.min.js // @connect * // @downloadURL none // ==/UserScript== console.log("==================================插件启动成功==================================") let mp3_Hash = ""; let mp3_Url = ""; let mp3_Name = ""; let url = ""; let download_url = ""; // audio let audioMp3 = document.getElementById('myAudio'); // 监听audio开始播放事件(事件在视频/音频(audio/video)开始播放时触发。) audioMp3.addEventListener("play", function () { // 判断是否需要修改src属性 if (audioMp3.getAttribute("data-hash") != mp3_Hash) { getMp3Detail(); } }) // 点击下载按钮 document.getElementsByClassName("btnDownloadClient")[0].onclick = function () { if (download_url == mp3_Url) { alert(mp3_Name + " 已在下载中!") } else { downloadBySrc(); setTimeout(function () { document.getElementsByClassName('ui-popup ui-popup-show ui-popup-focus')[0].style.display = "none" }, 50) } }; // 点击下载按钮 document.getElementById('pb_download').onclick = function () { if (download_url == mp3_Url) { alert(mp3_Name + " 已在下载中!") } else { downloadBySrc(); setTimeout(function () { document.getElementsByClassName('ui-popup ui-popup-show ui-popup-focus')[0].style.display = "none" }, 50) } }; // 点击下载 function downloadBySrc() { download_url = mp3_Url; let loaded = 0.0; NProgress.set(0.0); // 与.start() GM_download({ url: mp3_Url, name: mp3_Name, //不填则自动获取文件名 saveAs: true, //布尔值,显示"保存为"对话框 onerror: function (error) { //如果下载最终出现错误,则要执行的回调 console.log(error) console.log(mp3_Name + " 下载报错,请反馈!"); }, onprogress: (pro) => { //如果此下载取得了一些进展,则要执行的回调 // console.log(pro.loaded) //文件加载量 // console.log(pro.totalSize) //文件总大小 let size = (pro.loaded / pro.totalSize).toFixed(1); if (loaded != size) { loaded = size; NProgress.inc(0.1); } }, ontimeout: () => { //如果此下载由于超时而失败,则要执行的回调 console.log(mp3_Name + "下载超时,请反馈!"); }, onload: () => { //如果此下载完成,则要执行的回调 console.log(mp3_Name + " 下载完成!"); NProgress.done(); } }) } // js修改audio的src属性,即播放链接 function getMp3Detail() { mp3_Hash = audioMp3.getAttribute("data-hash"); // 访问第三方解析无损接口 url = "http://8.142.95.208:5001/url/byhash?hash=" + mp3_Hash; // get请求获取无损音质的信息 GM_xmlhttpRequest({ method: "get", url: url, onload: function (r) { let jsonTxt = r.responseText; let json = JSON.parse(jsonTxt); mp3_Url = json.data.play_url; mp3_Name = json.data.audio_name; audioMp3.src = mp3_Url; document.getElementById('openKugou').href = mp3_Url; if (audioMp3.paused) { audioMp3.play(); } console.log(mp3_Name + " 加载完成"); } }) } //========================================= nprogress.min.css GM_addStyle(` #nprogress{pointer-events:none}#nprogress .bar{background:#f90;position:fixed;z-index:1031;top:0;left:0;width:100%;height:5px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #f90,0 0 5px #f90;opacity:1;-webkit-transform:rotate(3deg) translate(0,-4px);-ms-transform:rotate(3deg) translate(0,-4px);transform:rotate(3deg) translate(0,-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:2px solid transparent;border-top-color:#f90;border-left-color:#f90;border-radius:50%;-webkit-animation:nprogress-spinner 400ms linear infinite;animation:nprogress-spinner 400ms linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}} `);