// ==UserScript== // @name 💯 懒人专用系列 ——— 全网音乐下载 // @namespace lr-toolbox-Musicdownload // @version 1.0.1 // @description ⭕网易云音乐、QQ音乐、酷狗、酷我、喜马拉雅等网站音乐和有声书音频免客户端下载。⭕喜马拉雅批量下载。⭕可自由修改图标位置、大小、透明度。❌拒绝收费。⭕持续更新。 // @author lanhaha // @icon https://s1.music.126.net/style/favicon.ico // @match *://music.163.com/* // @match *://y.qq.com/* // @match *://*.kugou.com/* // @match *://*.kuwo.cn/* // @match *://*.ximalaya.com/* // @require https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/crypto-js/4.1.1/crypto-js.min.js // @grant GM_registerMenuCommand // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // @grant GM_download // @grant GM_setClipboard // ==/UserScript== /* *********************************************************** 应Greasyfork.org网站规则要求, 懒人脚本将视频解析、音乐下载、视频下载等功能拆分为多个脚本: https://greasyfork.org/zh-CN/scripts/467776 https://greasyfork.org/zh-CN/scripts/469604 https://greasyfork.org/zh-CN/scripts/469689 https://greasyfork.org/zh-CN/scripts/468015 https://greasyfork.org/zh-CN/scripts/469521 可自行分别安装。 *********************************************************** */ (function() { 'use strict'; //GM_deleteValue('iconTop');return; //禁止iframe内加载脚本,如:网易云 if(self.frameElement && self.frameElement.tagName == "IFRAME"){ return; } /*--config--*/ var Config ={ couponUrl:window.location.href, couponHost:window.location.host, webUrl:'http://music.liuzhijin.cn/', isMobile:/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent), iconVipTop:360, iconVipPosition : 'left', iconVipWidth : 40, couponTimerNum : 100,//100次等于10秒 couponWaitTime : 100, iconWaitTime : 100, iconVipOpacity:100, selectedLeft:'selected', selectedRight:'', qqMusicDownload:GM_getValue('qqMusicDownload',22), netEaseMusicDownload:GM_getValue('netEaseMusicDownload',22), kugouMusicDownload:GM_getValue('kugouMusicDownload',22), kuwoMusicDownload:GM_getValue('kuwoMusicDownload',22), ximalayaMusicDownload:GM_getValue('ximalayaMusicDownload',22), } var {couponUrl, couponHost, webUrl, isMobile, iconVipTop, iconVipPosition, iconVipWidth, iconVipOpacity, couponTimerNum, couponWaitTime, iconWaitTime, selectedLeft, selectedRight, qqMusicDownload, netEaseMusicDownload, kugouMusicDownload, kuwoMusicDownload, ximalayaMusicDownload } = Config; /*--lang--*/ var lang = { set:'设置', iconPosition:'图标设置', playVideo:'音乐解析', playMusic:'音乐下载', iconHeight:'图标高度', iconWidth:'图标大小', iconLine:'水平位置', iconWaitTime:'等待时间', iconLeft:'靠左', iconRight:'靠右', tipIconHeight:'默认360,建议1~500', tipIconWidth:'默认40,建议20~50', tipIconOpacity:'请填写0-100的整数', tipErrorIconHeight:'<图标位置>中的<图标高度>应为1000以内正整数,建议1~500', tipErrorIconWidth:'<图标位置>中的<图标大小>应为100以内正整数,建议20~50', tipErrorIconOpacity:'填写数字不正确', musicDownload:'音乐下载', qqMusicDownload:'QQ音乐', netEaseMusicDownload:'网易云', kugouMusicDownload:'酷狗', kuwoMusicDownload:'酷我', ximalayaMusicDownload:'喜马拉雅', }; var musicDownload = [ {funcName:"playMusic",name:'netease',match:/^https?:\/\/music\.163\.com/,tip:'请在音乐单曲页点击图标下载',isOpen:netEaseMusicDownload}, {funcName:"playMusic",name:'qq',match:/^https?:\/\/y\.qq\.com/,tip:'请点击播放需要下载的歌曲,在播放页点击图标下载',isOpen:qqMusicDownload}, {funcName:"playMusic",name:'kugou',match:/kugou\.com/,tip:'请点击播放需要下载的歌曲,然后在网页下方播放器内点击"下载"',isOpen:kugouMusicDownload}, {funcName:"playMusic",name:'kuwo',match:/kuwo\.cn/,tip:'请点击播放需要下载的歌曲,然后在网页下方播放器内点击"下载"',isOpen:kuwoMusicDownload}, {funcName:"playMusic",name:'ximalaya',match:/^https?:\/\/www\.ximalaya\.com/,tip:'请点击播放需要下载的歌曲,然后在网页下方播放器内点击"下载"',isOpen: ximalayaMusicDownload} ]; /*--create style--*/ var domHead = document.getElementsByTagName('head')[0]; var domStyle = document.createElement('style'); domStyle.type = 'text/css'; domStyle.rel = 'stylesheet'; class BaseClass{ constructor(){ if(GM_getValue('iconPositionSetPage') != 0){ iconVipTop = GM_getValue('iconTop') || GM_getValue('iconTop') == 0?GM_getValue('iconTop'):iconVipTop; iconVipPosition = GM_getValue('iconPosition')?GM_getValue('iconPosition'):iconVipPosition; selectedLeft = iconVipPosition=='left'?'selected':''; selectedRight = iconVipPosition=='right'?'selected':''; iconVipWidth = GM_getValue('iconWidth')?GM_getValue('iconWidth'):iconVipWidth; iconWaitTime = GM_getValue('iconWaitTime')?GM_getValue('iconWaitTime')*1000:iconWaitTime; iconVipOpacity = GM_getValue('iconOpacity') || GM_getValue('iconOpacity') == 0?GM_getValue('iconOpacity'):iconVipOpacity; } GM_registerMenuCommand("设置", () => this.menuSet()); } menuSet(){ var _this = this; let menuSetStyle = ` .zhmMask{ z-index:999999999; background-color:#000; position: fixed;top: 0;right: 0;bottom: 0;left: 0; opacity:0.8; } .wrap-box{ z-index:1000000000; position:fixed;;top: 50%;left: 50%;transform: translate(-50%, -200px); width: 300px; color: #555; background-color: #fff; border-radius: 5px; overflow:hidden; font:16px numFont,PingFangSC-Regular,Tahoma,Microsoft Yahei,sans-serif !important; font-weight:400 !important; } .setWrapHead{ background-color:#f24443;height:40px;color:#fff;text-align:center;line-height:40px; } .setWrapLi{ margin:0px;padding:0px; } .setWrapLi li{ background-color: #fff; border-bottom:1px solid #eee; margin:0px !important; padding:12px 20px; display: flex; justify-content: space-between;align-items: center; list-style: none; } .setWrapLiContent{ display: flex;justify-content: space-between;align-items: center; } .setWrapSave{ position:absolute;top:-2px;right:10px;font-size:24px;cursor:pointer } .iconSetFoot{ position:absolute;bottom:0px;padding:10px 20px;width:100%; z-index:1000000009;background:#fef9ef; } .iconSetFootLi{ margin:0px;padding:0px; } .iconSetFootLi li{ display: inline-flex; padding:0px 2px; justify-content: space-between;align-items: center; font-size: 12px; } .iconSetFootLi li a{ color:#555; } .iconSetFootLi a:hover { color:#fe6d73; } .iconSetPage{ z-index:1000000001; position:absolute;top:0px;left:300px; background:#fff; width:300px; height:100%; } .iconSetUlHead{ padding:0px; margin:0px; } .iconSetPageHead{ border-bottom:1px solid #ccc; height:40px; line-height:40px; display: flex; justify-content: space-between; align-items: center; background-color:#fe6d73; color:#fff; font-size: 15px; } .iconSetPageLi{ margin:0px;padding:0px; } .iconSetPageLi li{ list-style: none; padding:8px 20px; } .zhihuSetPage{ z-index:1000000002;position:absolute;top:0px;left:300px;background:#fff;width:300px;height:100%; } .iconSetPageInput{ display: flex !important;justify-content: space-between;align-items: center; } .zhihuSetPageLi{ margin:0px;padding:0px; } .zhihuSetPageLi li{ border-bottom:1px solid #eee;padding:12px 20px;display:block; } .zhihuSetPageContent{ display: flex !important;justify-content: space-between;align-items: center; } li:last-child{ border-bottom:none; } .circular{ width: 40px;height: 20px;border-radius: 16px;transition: .3s;cursor: pointer;box-shadow: 0 0 3px #999 inset; } .round-button{ width: 20px;height: 20px;;border-radius: 50%;box-shadow: 0 1px 5px rgba(0,0,0,.5);transition: .3s;position: relative; } .back{ border: solid #FFF; border-width: 0 3px 3px 0; display: inline-block; padding: 3px;transform: rotate(135deg); -webkit-transform: rotate(135deg);margin-left:10px;cursor:pointer; } .to-right{ margin-left:20px; display: inline-block; padding: 3px;transform: rotate(-45deg); -webkit-transform: rotate(-45deg);cursor:pointer; } .iconSetSave{ font-size:24px;cursor:pointer;margin-right:5px;margin-bottom:4px;color:#FFF; } .zhm_set_page{ z-index:1000000003; position:absolute; top:0px;left:300px; background:#fff; width:300px; height:100%; } .zhm_set_page_header{ border-bottom:1px solid #ccc; height:40px; line-height:40px; display: flex; justify-content: space-between; align-items: center; background-color:#fe6d73; color:#fff; font-size: 15px; } .zhm_set_page_content{ display: flex !important;justify-content: space-between;align-items: center; } .zhm_set_page_list{ margin:0px;padding:0px; } .zhm_set_page_list li{ /*border-bottom:1px solid #ccc;*/ padding:12px 20px; display:block; border-bottom:1px solid #eee; } /*-form-*/ :root { --base-color: #434a56; --white-color-primary: #f7f8f8; --white-color-secondary: #fefefe; --gray-color-primary: #c2c2c2; --gray-color-secondary: #c2c2c2; --gray-color-tertiary: #676f79; --active-color: #227c9d; --valid-color: #c2c2c2; --invalid-color: #f72f47; --invalid-icon: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%20%3Cpath%20d%3D%22M13.41%2012l4.3-4.29a1%201%200%201%200-1.42-1.42L12%2010.59l-4.29-4.3a1%201%200%200%200-1.42%201.42l4.3%204.29-4.3%204.29a1%201%200%200%200%200%201.42%201%201%200%200%200%201.42%200l4.29-4.3%204.29%204.3a1%201%200%200%200%201.42%200%201%201%200%200%200%200-1.42z%22%20fill%3D%22%23f72f47%22%20%2F%3E%3C%2Fsvg%3E"); } .text-input { font-size: 16px; position: relative; right:0px; z-index: 0; } .text-input__body { -webkit-appearance: none; -moz-appearance: none; appearance: none; background-color: transparent; border: 1px solid var(--gray-color-primary); border-radius: 3px; height: 1.7em; line-height: 1.7; overflow: hidden; padding: 2px 1em; text-overflow: ellipsis; transition: background-color 0.3s; width:55%; font-size:14px; } .text-input__body:-ms-input-placeholder { color: var(--gray-color-secondary); } .text-input__body::-moz-placeholder { color: var(--gray-color-secondary); } .text-input__body::placeholder { color: var(--gray-color-secondary); } *, ::after, ::before { box-sizing: initial !important; } .text-input__body[data-is-valid] { padding-right: 1em; } .text-input__body[data-is-valid=true] { border-color: var(--valid-color); } .text-input__body[data-is-valid=false] { border-color: var(--invalid-color); box-shadow: inset 0 0 0 1px var(--invalid-color); } .text-input__body:focus { border-color: var(--active-color); box-shadow: inset 0 0 0 1px var(--active-color); outline: none; } .text-input__body:-webkit-autofill { transition-delay: 9999s; -webkit-transition-property: background-color; transition-property: background-color; } .text-input__validator { background-position: right 0.5em center; background-repeat: no-repeat; background-size: 1.5em; display: inline-block; height: 100%; left: 0; position: absolute; top: 0; width: 100%; z-index: -1; } .text-input__body[data-is-valid=false] + .text-input__validator { background-image: var(--invalid-icon); } .select-box { box-sizing: inherit; font-size: 16px; position: relative; transition: background-color 0.5s ease-out; width:90px; } .select-box::after { border-color: var(--gray-color-secondary) transparent transparent transparent; border-style: solid; border-width: 6px 4px 0; bottom: 0; content: ""; display: inline-block; height: 0; margin: auto 0; pointer-events: none; position: absolute; right: -72px; top: 0; width: 0; z-index: 1; } .select-box__body { box-sizing: inherit; -webkit-appearance: none; -moz-appearance: none; appearance: none; background-color: transparent; border: 1px solid var(--gray-color-primary); border-radius: 3px; cursor: pointer; height: 1.7em; line-height: 1.7; padding-left: 1em; padding-right: calc(1em + 16px); width: 140%; font-size:14px; padding-top:2px; padding-bottom:2px; } .select-box__body[data-is-valid=true] { border-color: var(--valid-color); box-shadow: inset 0 0 0 1px var(--valid-color); } .select-box__body[data-is-valid=false] { border-color: var(--invalid-color); box-shadow: inset 0 0 0 1px var(--invalid-color); } .select-box__body.focus-visible { border-color: var(--active-color); box-shadow: inset 0 0 0 1px var(--active-color); outline: none; } .select-box__body:-webkit-autofill { transition-delay: 9999s; -webkit-transition-property: background-color; transition-property: background-color; } .textarea__body { -webkit-appearance: none; -moz-appearance: none; appearance: none; background-color: transparent; border: 1px solid var(--gray-color-primary); border-radius: 0; box-sizing: border-box; font: inherit; left: 0; letter-spacing: inherit; overflow: hidden; padding: 1em; position: absolute; resize: none; top: 0; transition: background-color 0.5s ease-out; width: 100%; } .textarea__body:only-child { position: relative; resize: vertical; } .textarea__body:focus { border-color: var(--active-color); box-shadow: inset 0 0 0 1px var(--active-color); outline: none; } .textarea__body[data-is-valid=true] { border-color: var(--valid-color); box-shadow: inset 0 0 0 1px var(--valid-color); } .textarea__body[data-is-valid=false] { border-color: var(--invalid-color); box-shadow: inset 0 0 0 1px var(--invalid-color); } .textarea ._dummy-box { border: 1px solid; box-sizing: border-box; min-height: 240px; overflow: hidden; overflow-wrap: break-word; padding: 1em; visibility: hidden; white-space: pre-wrap; word-wrap: break-word; } .toLeftMove{ nimation:moveToLeft 0.5s infinite; -webkit-animation:moveToLeft 0.5s infinite; /*Safari and Chrome*/ animation-iteration-count:1; animation-fill-mode: forwards; } @keyframes moveToLeft{ from {left:200px;} to {left:0px;} } @-webkit-keyframes moveToLeft /*Safari and Chrome*/{ from {left:200px;} to {left:0px;} } .toRightMove{ nimation:moveToRight 2s infinite; -webkit-animation:moveToRight 2s infinite; /*Safari and Chrome*/ animation-iteration-count:1; animation-fill-mode: forwards; } @keyframes moveToRight{ from {left:0px;} to {left:2000px;} } @-webkit-keyframes moveToRight /*Safari and Chrome*/{ from {left:0px;} to {left:200px;} } `; domStyle .appendChild(document.createTextNode(menuSetStyle)); domHead.appendChild(domStyle); var setListJson= [ {'listName':lang.iconPosition,'setListID':'iconPositionSetPage','setPageID':'movieIconSetPage','takePlace':'0px'}, {'listName':lang.playMusic,'setListID':'musicList','setPageID':'musicSetPage','takePlace':'0px'}, ]; var musicListJson = [ {'optionName':lang.qqMusicDownload,'optionID':'qqMusicDownload','default':qqMusicDownload}, {'optionName':lang.netEaseMusicDownload,'optionID':'netEaseMusicDownload','default':netEaseMusicDownload}, {'optionName':lang.kugouMusicDownload,'optionID':'kugouMusicDownload','default':kugouMusicDownload}, {'optionName':lang.kuwoMusicDownload,'optionID':'kuwoMusicDownload','default':kuwoMusicDownload}, {'optionName':lang.ximalayaMusicDownload,'optionID':'ximalayaMusicDownload','default':ximalayaMusicDownload}, ]; var setHtml = "
"; setHtml +="