Greasy Fork

Greasy Fork is available in English.

柒灵全能视频下载器

(目前仅支持)哔哩哔哩(bilibili)视频批量下载

当前为 2020-10-29 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         柒灵全能视频下载器
// @namespace    https://weibo.com/guoxuebiji/profile?is_all=1
// @version      1.7
// @description  (目前仅支持)哔哩哔哩(bilibili)视频批量下载
// @author       东风
// @date         2020-4-25
// @modified     2020-10-26
// @match        http*://*.bilibili.com/video/*
// @match        http*://*.bilibili.com/bangumi/play/*
// @match        http*://*.bilibili.com/*/favlist*
// @icon         https://space.bilibili.com/favicon.ico
// @license      BSD 3-Clause License
// @grant        unsafeWindow
// @grant        GM_setClipboard
// @grant        GM_info
// @grant        GM_download
// @grant        GM_registerMenuCommand
// @grant        GM_xmlhttpRequest
// @grant        GM.xmlHttpRequest
// @grant        GM_openInTab
// @grant        GM.openInTab
// @grant        GM_getValue
// @grant        GM.getValue
// @grant        GM_setValue
// @grant        GM.setValue
// ==/UserScript==

(function () {
    'use strict';
    //==========以下是与下载器通讯=====================================================================
    var host = '127.0.0.1'
    ,port = '5678';
    
    function wsmessage(evt) 
    { 
        console.log(evt);
        var received_msg = evt.data;
        console.log("收到服务器的信息",received_msg);
        // ws.send(JSON.stringify(["https://www.bilibili.com/video/BV19E411D78Q?p=6","https://www.bilibili.com/video/BV19E411D78Q?p=3"]));
        // console.log(JSON.parse(received_msg));
        // 发送成功{id: 2333333, jsonrpc: "2.0", result: "a6ff40d33524229a"}
        // 开始下载{jsonrpc: "2.0", method: "aria2.onDownloadStart", params: [[gid: "a6ff40d33524229a"]]}
        // 下载完成{jsonrpc: "2.0", method: "aria2.onDownloadComplete", params: [[gid: "a6ff40d33524229a"]]}
        // 下载出错{jsonrpc: "2.0", method: "aria2.onDownloadError", params: [[gid: "a6ff40d33524229a"]]}
    };
        
    function wsclose() 
    { 
        console.log("连接关闭");
    };

    function Download(url, out, dir)
    {
        // var json = MakeSendData(url, out, dir)
        var ws = new WebSocket("ws://" + host + ":" + port + "/jsonrpc");

        function wsopen()
        {
            console.log("连接下载服务器");
            // var json = MakeSendData("http://aria2c.com/usage.html", "test.html", "./dow")
            // ws.send(JSON.stringify(["https://www.bilibili.com/video/BV19E411D78Q?p=5","https://www.bilibili.com/video/BV19E411D78Q?p=3"]));
            ws.send(JSON.stringify(url));


            setTimeout(function() {
                ws.close()
            }, 10000)
            
        };
        ws.onopen =  wsopen;
        ws.onmessage = wsmessage;
        ws.onclose =  wsclose;
    };

    //===============================================================================

    //加载css文件
    function addCSS(href) {
        var link = document.createElement('link');
        link.type = 'text/css';
        link.rel = 'stylesheet';
        link.href = href;
        document.getElementsByTagName("head")[0].appendChild(link);
    }
    //加载js文件
    function addJS(src, cb) {
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.src = src;
        document.getElementsByTagName('head')[0].appendChild(script);
        script.onload = typeof cb === "function" ? cb : function () {};
    }

    //由于@require方式引入jquery时layer使用异常,故引用cdn中jquery v1.10.1;加载完成后引用又拍云中layer v3.1.1
    addJS("https://cdn.bootcss.com/jquery/1.10.1/jquery.min.js", function () {
        $.noConflict();
        addJS("https://static.saintic.com/cdn/layer/3.1.1/layer.js");
    });

    function GetFileName(url) {
        var Business=url.split("/");
        return Business[Business.length-1];
    }

    // String.prototype.TextFilter=function(){
    //     var pattern=new RegExp("[`~%!@#^=''?~!@#¥……&——‘”“'?*()(),,。.、]"); //[]内输入你要过滤的字符
    //     var rs="";
    //     for(var i=0;i<this.length;i++){
    //         rs+=this.substr(i,1).replace(pattern,'');
    //     }
    //     return rs;
    // }

    // 去掉空格
    function Trim(str)
    {
        // str = str.TextFilter()
        var result = str.replace(/\s/g,"");
        return result;
    }

    // 去掉标题后缀
    function FormatTitle(str)
    {
        var title = Trim(document.title)
        var n = title.lastIndexOf(str);
        if (n >= 0) {
            title = title.substring(0,n);
        }
        return title;
    }   


    // 拷贝我的收藏视频网址
    function CopyFavlistUrls() {

        var title = "我的收藏"

        var x = document.getElementsByClassName("fav-video-list clearfix content")[0].children;
        console.log(title)

        var list = [];
        console.log(x)
        for (var i = 0; i < x.length; i++) {
            console.log(i,x[i].attributes["class"].nodeValue)
            if (x[i].attributes["class"].nodeValue != "small-item disabled") {
                list[i] = x[i];
            }
        }

        console.log(list)
        // zoomfile
        if (list) {

            GM_setClipboard( list.map(function (pin) {
                return "https:" + pin.children[0].attributes["href"].nodeValue + "\r\n";
            }).join(""));

            layer.msg("操作成功", {
                icon: 1, time:1
            });

            return list.map(function (pin) {
                var item = {"url": "https:" + pin.children[0].attributes["href"].nodeValue};
                item.folder = "我的收藏"
                item.islist = false;
                return item;
            })
        }else
        {
            layer.msg("找不到视频", {
                icon: 1, time:1
            });
        }
    }

    // 拷贝播放列表视频网址
    function CopyVedioUrls() {
        var title = document.querySelector('meta[property="og:title"]').getAttribute('content');//FormatTitle("_哔哩哔哩(゜-゜)つロ干杯~-bilibili")

        var list_box = document.getElementsByClassName("list-box")
        if (list_box.length == 0) {
            return [{"url": window.location.href,"islist": false}]
        }

        var x = document.getElementsByClassName("list-box")[0].children;
        console.log(title)

        var list = [];
        console.log(x)
        for (var i = 0; i < x.length; i++) {
            list[i] = x[i];
        }

        console.log(list)
        // zoomfile
        if (list) {

            GM_setClipboard( list.map(function (pin) {
                return "https://www.bilibili.com" + pin.children[0].attributes["href"].nodeValue + "\r\n";
            }).join(""));

            layer.msg("操作成功", {
                icon: 1, time:1
            });

            return list.map(function (pin) {
                var item = {"url": "https://www.bilibili.com" + pin.children[0].attributes["href"].nodeValue}
                item.folder = title
                item.islist = false;
                return item;
            })
        }else
        {
            layer.msg("找不到视频", {
                icon: 1, time:1
            });
        }
    }


    // 拷贝番剧播放列表视频网址
    function CopyBangumiUrls() {
        var title = document.querySelector('meta[property="og:title"]').getAttribute('content');//FormatTitle("_番剧_bilibili_哔哩哔哩")
        console.log(title)

        //进度
        var progress = document.getElementsByClassName("ep-list-progress");
        // console.log(progress[0])
        var arrprogress = progress[0].innerText.split('/')
        var index = parseInt(arrprogress[0])-1;
        var total = parseInt(arrprogress[1]);
        console.log("当前第"+index+"集")

        var arrUrl = window.location.pathname.split('/');
        // console.log("arrUrl = ", arrUrl);
        var preVideoID = arrUrl[3].substring(0,2)
        var videoID = parseInt(arrUrl[3].substring(2))-index
        console.log(preVideoID , "videoID = ", videoID)

        var list = [];
        // console.log(x)
        for (var i = 0; i < total; i++) {
            list[i] = videoID + i;
        }

        console.log(list)
        // zoomfile
        if (list) {

            GM_setClipboard( list.map(function (pin) {
                return "https://www.bilibili.com/bangumi/play/"+ preVideoID + pin + "\r\n";
            }).join(""));

            layer.msg("操作成功", {
                icon: 1, time:1
            });

            var item = {"url": window.location.href}
            item.folder = title;
            item.islist = true;
            return [item]

            // // 单个下载可以多线程并行
            // return list.map(function (pin) {
            //     var item = {"url": "https://www.bilibili.com/bangumi/play/"+ preVideoID + pin}
            //     item.folder = title
            //     item.islist = false;
            //     return item;
            // })
        }else
        {
            layer.msg("找不到视频", {
                icon: 1, time:1
            });
        }
    }


    function ParseUrl() {
        console.log("onclick-----------------")
        var arrUrl = window.location.pathname.split('/');
        console.log("arrUrl = ", arrUrl);
        if(!arrUrl[1]) return;
        if (arrUrl[1] == "video") 
            return CopyVedioUrls();
        else if (arrUrl[1] == "bangumi") 
            return CopyBangumiUrls();
        else if (arrUrl[2] == "favlist") 
            return CopyFavlistUrls();
        else
        {
            var item = {"url": window.location.href,"islist": false}
            // item.folder = title;
            return [item]
        }
    }

    /*
        主入口,分出不同模块:用户、画板,监听并刷新URL
    */
    window.onload =function() {

        function GMaddStyle(css) {
            var myStyle = document.createElement('style');
            myStyle.textContent = css;
            var doc = document.head || document.documentElement;
            doc.appendChild(myStyle);
        }

        var int=self.setInterval(function (){
            // console.log("Interval---------------");

            // var user_text = "拷贝下载链接";
            // var tmpHtml = '<button type="button" class="CopyPicUrls" style="  height:30px;width:100px;color:white;border-radius: 4px;background-color: #008CBA; font-size: 16px; text-align:center" id="CopyPicUrls" >拷贝下载链接</button>'

            // var btn = document.getElementsByClassName("CopyPicUrls")
            // // console.log(btn,"-======")
            // if (btn.length > 0) {
            //     btn.innerHTML = tmpHtml
            //     return
            // }

            // var gelement = document.getElementsByClassName("nav-search-box")
            // // console.log(gelement,"----------", gelement.length, gelement[0]);
            // var pab = document.getElementsByClassName("nav-search-box")[0];
            // // console.log(pab,"----------222");
            
            // // console.log(pab);
            // pab.insertAdjacentHTML('afterEnd', tmpHtml);
            // //监听用户点击下载事件
            // document.getElementById("CopyPicUrls").onclick = function () {
            //     ParseUrl();
            // };

            var btn = document.getElementsByClassName("btnDownload")
            if (btn.length > 0) {
                // btn.innerHTML = tmpHtml
                return
            }

            GMaddStyle(`#download_movie_box {cursor:pointer; position:fixed; top:` + 60 + `px; left:` + 0 + `px; width:0px; background-color:#2E9AFE; z-index:2147483647; font-size:20px; text-align:left;}
                #download_movie_box .item_text {width:28px; padding:4px 0px; text-align:center;}
                #download_movie_box .item_text img {width:35px; height:35px; display:inline-block; vertical-align:middle;}
                `);

            // var $ = $ || window.$;
            var ImgBase64Data = "data:image/png;base64,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"

            var html = 
            `<div id='download_movie_box' class="btnDownload">
                <div class='item_text'>
                    <img src='`+ ImgBase64Data +`' title='下载视频' id="downloadVideos"/>
                </div>
            </div>`;

            document.body.insertAdjacentHTML('afterEnd', html);

            document.getElementById("downloadVideos").onclick = function () {
                var urls = ParseUrl();
                console.log("urls = ",urls)
                if (urls) {
                    Download(urls)
                }
            };
        },3000)
    }


})();