// ==UserScript== // @name osu! my download // @description ous beatmap download from mirror.osu beatmap镜像站下载。支持的镜像站点:bloodcat.com、inso.link、osu.uu.gl。 // @author dazzulay // @copyright 2014+, dazzulay // @version 2.1.4 // @icon http://osu.ppy.sh/favicon.ico // @include http*://osu.ppy.sh/* // @grant none // @namespace https://greasyfork.org/scripts/3916 // @homepageURL https://greasyfork.org/scripts/3916 // @downloadURL none // ==/UserScript== var domain = document.domain; var drive = domain.replace(/\./g, '_'); if (drive == 'osu_mengsky_net') { var bmid = getUrlParameter('bmid'); if (bmid) { document.write(''); } } function myJQueryCode() { function osu_my_downoad() { var self = this; this.mirros = { bloodcat: { url: 'http://bloodcat.com/osu/m/{bmid}', class: 'my_orange', text: 'DOWNLOAD BLOODCAT', target: '_blank' }, /* 2017-07-16 挂了 mengsky: { url: 'http://osu.mengsky.net/?bmid={bmid}', url2: 'http://osu.mengsky.net/api/download/{bmid}', // 无法直接跳转,限制了 class: 'my_green', text: 'DOWNLOAD MENGSKY', target: '_blank' }, */ insolink: { url: 'http://inso.link/?source=osu_my_download&m={bmid}', class: 'my_pink', text: 'DOWNLOAD INSO.LINK', target: '_blank' }, osu_uu_gl: { url: 'http://osu.uu.gl/s/{bmid}', class: 'my_purpule', text: 'DOWNLOAD OSU.UU.GL', target: '_blank' } }; this.mirros_parse = function (bmid, mirro, param) { var _param = 'url'; if (param) { _param = param; } if (typeof self.mirros[mirro] !== "undefined") { self.mirros[mirro][_param] = str_render(self.mirros[mirro][_param], {bmid: bmid}); } else { $.each(self.mirros, function (k, v) { self.mirros[k][_param] = str_render(v[_param], {bmid: bmid}); }); } }; this.drives = { osu_ppy_sh: function () { var is_new = $( '.osu-layout').length; if(is_new){ // css样式 设置 $('head').append(''); var beatmapset_page = '.js-react--beatmapset-page'; var ready = function (){ // 获取beatmapid var bmsrc = $('.js-audio--play').attr('data-audio-url'); if(!bmsrc){ return false; } var bmid = bmsrc.substring(bmsrc.lastIndexOf("/") + 1, bmsrc.lastIndexOf(".")); // 设置url self.mirros_parse(bmid); // 添加按钮 var $container = $('
'); var btn_tpl = '
{text}
'; $.each(self.mirros, function (k, v) { $container.append(str_render(btn_tpl, self.mirros[k])); }); $('.beatmapset-header__box--main').append($container); }; // 第一次加载页面触发下面的load无效 用一个定时器 var _timer = setInterval(function(){ var $bp = $(beatmapset_page); if($bp.length == 0){ clearInterval(_timer); return; } if($bp.attr('data-react-turbolinks-loaded')==1){ ready(); clearInterval(_timer); } },200); $(document).on('turbolinks:load', ready); }else{ // 获取beatmapid var bmsrc = $('.bmt').attr('src'); if(!bmsrc){ return false; } var bmid = bmsrc.substring(bmsrc.indexOf("thumb/") + 6, bmsrc.lastIndexOf("l")); // css样式 设置 $('head').append(''); // 设置url self.mirros_parse(bmid); // 添加按钮 var $container = $('
'); var btn_tpl = '{text}
'; $.each(self.mirros, function (k, v) { $container.append(str_render(btn_tpl, self.mirros[k])); }); $('body').append($container); } }, new_ppy_sh: function () { }, osu_mengsky_net: function () { // 获取url参数的bmid var bmid = getUrlParameter('bmid'); if (!bmid) { return; } // css样式 设置 $('head').append(''); // 设置url self.mirros_parse(bmid, 'mengsky', 'url2'); // 添加按钮 var $container = $('
'); var btn_tpl = '{text}
'; $container.append(str_render(btn_tpl, self.mirros.mengsky)); $('body').html($container); // 点击按钮 $('a')[0].click(); } }; this.init = function () { var domain = document.domain; var drive = domain.replace(/\./g, '_'); self.drives[drive](); }; self.init(); } osu_my_downoad(); } if (typeof jQuery == 'undefined') { var headTag = document.getElementsByTagName("head")[0]; var jqTag = document.createElement('script'); jqTag.type = 'text/javascript'; jqTag.src = '//code.jquery.com/jquery-1.8.3.min.js'; jqTag.onload = myJQueryCode; headTag.appendChild(jqTag); } else { myJQueryCode(); } function str_render(template, context) { var tokenReg = /(\\)?\{([^\{\}\\]+)(\\)?\}/g; return template.replace(tokenReg, function (word, slash1, token, slash2) { if (slash1 || slash2) { return word.replace('\\', ''); } var variables = token.replace(/\s/g, '').split('.'); var currentObject = context; var i, length, variable; for (i = 0, length = variables.length; i < length; ++i) { variable = variables[i]; currentObject = currentObject[variable]; if (currentObject === undefined || currentObject === null) return ''; } return currentObject; }); } function getUrlParameter(sParam) { var sPageURL = decodeURIComponent(window.location.search.substring(1)), sURLVariables = sPageURL.split('&'), sParameterName, i; for (i = 0; i < sURLVariables.length; i++) { sParameterName = sURLVariables[i].split('='); if (sParameterName[0] === sParam) { return sParameterName[1] === undefined ? true : sParameterName[1]; } } }