Download Mgoon Videos

By Seo Sanghyeon Last update Nov 22, 2007 — Installed 499 times.
// ==UserScript==
// @name           Download Mgoon Videos
// @namespace      sanxiyn@gmail.com
// @include        http://mgoon.com/view.htm?id=*
// @include        http://*.mgoon.com/view.htm?id=*
// ==/UserScript==

// 2007-11-23

function shuffle(str, steps, order) {
    var count = steps.length;
    var start = 0;
    var strs = new Array(count);
    for (var i = 0; i < count; i++) {
        var end = start + steps[i];
        strs[order[i]-1] = str.substring(start, end);
        start = end;
    }
    return strs.join('');
}

function decode(key) {
    var n = key.length;
    var q = n / 5;
    var r = n % 5;
    key = shuffle(key, [3,n-6,3], [3,2,1]);
    key = shuffle(key, [q+r-3,4,q+q+q-4,4,q-1], [1,4,3,2,5]);
    key = shuffle(key, [q+q+r-3,4,q-4,4,q+q-1], [1,4,3,2,5]);
    key = shuffle(key, [q+r,q,q,q,q], [5,4,2,1,3]);
    return key;
}

function decode_url(url) {
    var i;
    i = url.indexOf('=') + 1;
    var prefix = url.substring(0, i);
    var key = url.substring(i);
    i = key.indexOf('=');
    var trailer = '';
    if (i != -1) {
        trailer = key.substring(i);
        key = key.substring(0, i);
    }
    key = decode(key);
    url = prefix + key + trailer;
    return url;
}

var regex = /id=(\d+)/
var xmlbase = 'http://222.239.226.90/oc/get?id='
var xpath = 'VIDEO/@FLV_URL'

var loc = window.location.toString();
var id = regex.exec(loc)[1];

function callback() {
    GM_xmlhttpRequest({
        method: 'GET',
        url: xmlbase + id,
        onload: function(response) {
            var parser = new DOMParser();
            var dom = parser.parseFromString(response.responseText,
                'application/xml');
            var url = dom.evaluate(xpath, dom.documentElement, null,
                XPathResult.STRING_TYPE, null).stringValue;
            url = decode_url(url);
            window.open(url);
        }
    });
}

var element = document.getElementsByTagName('h2')[0];
var download = document.createElement('a');
download.innerHTML = 'Download';
download.addEventListener('click', callback, false);
element.appendChild(download);