Greasy Fork

osu! my download

ous beatmap download from mirror.osu beatmap镜像站下载。支持的镜像站点:bloodcat.com、osu.mengsky.net、inso.link。

当前为 2017-04-26 提交的版本,查看 最新版本

// ==UserScript==
// @name           osu! my download
// @description    ous beatmap download from mirror.osu beatmap镜像站下载。支持的镜像站点:bloodcat.com、osu.mengsky.net、inso.link。
// @author         dazzulay
// @copyright      2014+, dazzulay
// @version        2.0.5
// @icon           http://osu.ppy.sh/favicon.ico
// @include        http*://osu.ppy.sh/b/*
// @include        http*://osu.ppy.sh/s/*
// @include        http*://osu.ppy.sh/p/beatmap*
// @include        http*://new.ppy.sh/beatmapsets/*
// @include        http*://osu.mengsky.net/*
// @grant          none
// @namespace      https://greasyfork.org/scripts/3916
// @homepageURL    https://greasyfork.org/scripts/3916
// ==/UserScript==
function myJQueryCode() {
    //Do stuff with jQuery
    $(function() {
        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'
                },
                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'
                }
            };
            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(){
                    // css样式 设置
                    $('head').append('<style>.my_container{position:fixed;top:20px;right:0px;}.my_btn{text-align: center;width:150px;height:111px;display:table-cell;vertical-align:middle;margin:0 0 10px 0;padding:10px;font-family:Haettenschweiler,Impact,"Arial Grande",Tahoma,Helvetica,Arial,sans-serif;font-size:32px;font-weight:normal;color:#fff;border:4px solid #fff;border-radius:6px;}.my_btn:hover{text-shadow:0 0 20px floralwhite;color:#fff;}.my_orange{background:linear-gradient(to bottom,darkorange,orange,darkorange);}.my_blue{background:linear-gradient(to bottom,darkblue,blue,darkblue);}.my_green{background:linear-gradient(to bottom,darkgreen,green,darkgreen);}.my_pink{background:linear-gradient(to bottom,HotPink,pink,HotPink);}.my_btn span{display:inline-block;vertical-align:middle;text-align:center}</style>');

                    // 获取beatmapid
                    var bmsrc = $('.bmt').attr('src');
                    var bmid = bmsrc.substring(bmsrc.indexOf("thumb/")+6,bmsrc.lastIndexOf("l"));

                    // 设置url
                    self.mirros_parse(bmid);

                    // 添加按钮
                    var $container = $('<div class="my_container"></div>');
                    var btn_tpl = '<a class="my_btn {class}" href="{url}" target="{target}"><span>{text}</span></a><br/>';
                    $.each(self.mirros,function(k,v){
                        $container.append(str_render(btn_tpl,self.mirros[k]));
                    });
                    $('body').append($container);
                },
                new_ppy_sh:function(){
                    // css样式 设置
                    $('head').append('<style>.my_container a:before{content:" ";position:absolute;left:0;right:0;top:0;bottom:0;border-radius:4px;}.my_orange:before{background-color:rgba(255,141,0,.5)}.my_green:before{background-color:rgba(0,101,0,.5)}.my_pink:before{background-color:rgba(255,107,181,.5)}</style>');

                    // 获取beatmapid
                    var bmsrc = $('.js-audio--play').attr('data-audio-url');
                    var bmid = bmsrc.substring(bmsrc.lastIndexOf("/")+1,bmsrc.lastIndexOf("."));

                    // 设置url
                    self.mirros_parse(bmid);

                    // 添加按钮
                    var $container = $('<div class="beatmapset-header__buttons my_container"></div>');
                    var btn_tpl = '<a href="{url}" class="btn-osu-big btn-osu-big--beatmapset-header {class}"  target="{target}"><div class="btn-osu-big__content"><div class="btn-osu-big__left"><span class="btn-osu-big__text-top">{text}</span></div><div class="btn-osu-big__icon"><span class="fa fa-download"></span></div></div></a>';
                    $.each(self.mirros,function(k,v){
                        $container.append(str_render(btn_tpl,self.mirros[k]));
                    });
                    $('.beatmapset-header__box--main').append($container);
                },
                osu_mengsky_net:function(){
                    // 获取url参数的bmid
                    var bmid = getUrlParameter('bmid');
                    if(!bmid){
                        return;
                    }

                    // css样式 设置
                    $('head').append('<style>.my_container{position:fixed;top:20px;right:0px;}.my_btn{text-align: center;width:150px;height:111px;display:table-cell;vertical-align:middle;margin:0 0 10px 0;padding:10px;font-family:Haettenschweiler,Impact,"Arial Grande",Tahoma,Helvetica,Arial,sans-serif;font-size:32px;font-weight:normal;color:#fff;border:4px solid #fff;border-radius:6px;}.my_btn:hover{text-shadow:0 0 20px floralwhite;color:#fff;}.my_orange{background:linear-gradient(to bottom,darkorange,orange,darkorange);}.my_blue{background:linear-gradient(to bottom,darkblue,blue,darkblue);}.my_green{background:linear-gradient(to bottom,darkgreen,green,darkgreen);}.my_pink{background:linear-gradient(to bottom,HotPink,pink,HotPink);}.my_btn span{display:inline-block;vertical-align:middle;text-align:center}</style>');

                    // 设置url
                    self.mirros_parse(bmid,'mengsky','url2');

                    // 添加按钮
                    var $container = $('<div class="my_container"></div>');
                    var btn_tpl = '<a class="my_btn {class}" href="{url2}" target=""><span>{text}</span></a><br/>';
                    $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();

        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];
                }
            }
        }
    });
}
if(typeof jQuery=='undefined') {
    var headTag = document.getElementsByTagName("head")[0];
    var jqTag = document.createElement('script');
    jqTag.type = 'text/javascript';
    jqTag.src = 'http://code.jquery.com/jquery-1.8.3.min.js';
    jqTag.onload = myJQueryCode;
    headTag.appendChild(jqTag);
} else {
    myJQueryCode();
}