Greasy Fork

Greasy Fork is available in English.

Local Vk Downloader

Get Vk raw link without external service.

目前为 2020-04-23 提交的版本,查看 最新版本

// ==UserScript==
// @name         Local Vk Downloader
// @namespace    vkDownloadAuto
// @version      1.0.0
// @description  Get Vk raw link without external service.
// @match        https://m.vk.com/mail*
// ==/UserScript==
var peer = null;

function vkGet(url, callback) {
    return ajax.plainpost(
        url,
        { _ajax: 1 },
        (function (e) {
            return function (e, t, n) {
                var a = parseJSON(e)
                    , o = a.user
                    , r = a.user_hash
                    , s = a.contacts
                    , l = "/friends.php?act=save_contacts&type=" + n;
                if (a.error)
                    return void i(n);
                ajax.post(l, {
                    _ajax: 1,
                    user: o,
                    userhash: r,
                    hash: t,
                    contacts: s
                }, {
                        onDone: function (e, t) {
                            return function (e, t, n) {
                                console.log("DONE:", e, t, n)
                                callback(parseJSON(e));
                            }(n, e, t)
                        },
                        onFail: function () {
                            return callback(null);
                        }
                    })
            }(e, t, n)
        }
        ),
        (function () {
            callback(null)
        }),
        !0
    );
}

function getMore(href) {
    vkGet(href, function (data) {
        receiveMore(data);
    });
}

function getSearchMoreHref(result) {
    if (!result || !result[1]) {
        return;
    }
    var showMore = $(".show_more", $(result[1]));
    if (!showMore.length) {
        return;
    }
    var href = showMore.attr("href");
    if (!href) {
        return null;
    }
}

function checkSearch() {
    var newPeer = getPeer();
    if (newPeer && newPeer != peer) {
        getAllMedia(newPeer);
    }
}

function listenSearch() {
    window.setInterval(checkSearch, 500);
}

function getPeer() {
    var hash = window.location.search;
    var idx = hash.indexOf("peer");
    if (idx == -1) {
        return null;
    }
    var end = hash.indexOf("&", idx);
    if (end == -1) {
        end = hash.length;
    }
    return hash.substring(idx + 5, end);
}

function getMediaUrl(newPeer, section) {
    var mediaUrlBase = "/mail?act=show_medias&peer=";
    var sectionUrl = "&section=";
    return mediaUrlBase + newPeer + sectionUrl + section;
}

function recursiveGetVideos(searchMoreLink, data, finishState) {
    if (!searchMoreLink) {
        finishState.videos = true;
        finishSegment(data, "videos", finishState);
        return;
    }
}

function getVideos(newPeer, data, finishState) {
    vkGet(getMediaUrl(newPeer, "video"), function (result) {
        console.log("RESULT:", result);
        if (result && result.data) {
            data.videos.concat(getVideosLinks(result.data));
        }
        var searchMoreLink = getSearchMoreHref(result);
        recursiveGetVideos(searchMoreLink, data, finishState);
    });
}

function getPhotos() {

}

function getDocs() {

}

function getAllMedia(newPeer) {
    console.log("***********************************ALL_MEDIA************************************")
    peer = newPeer;
    var data = {
        videos: [],
        photos: [],
        docs: []
    }
    var finishState = {
        videos: false,
        photos: false,
        docs: false
    }
    getVideos(newPeer, data, finishState);
    getPhotos(newPeer, data, finishState);
    getDocs(newPeer, data, finishState);
}

function start() {
    var newPeer = getPeer();
    if (newPeer != null) {
        getAllMedia(newPeer);
    }
}

function finishSegment(data, segment, finishState) {
    console.log(segment + ":", data[segment]);
    if (finishState.videos && finishState.photos && finishState.docs) {
        finish(data);
    }
}

function finish(data) {
    console.log(data);
    console.log("************************************FINISH**************************************")
}

listenSearch();
start();