// ==UserScript== // @name 柒灵全能视频下载器 // @namespace https://weibo.com/guoxuebiji/profile?is_all=1 // @version 1.7.4 // @description (目前仅支持)哔哩哔哩(bilibili)视频批量下载 // @author 东风 // @date 2020-4-25 // @modified 2020-11-02 // @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 // @downloadURL none // ==/UserScript== (function () { 'use strict'; //==========utils===================================================================== //加载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/3.0.0/jquery.min.js", function () { $.noConflict(); // addJS("https://static.saintic.com/cdn/layer/3.1.1/layer.js"); addJS("https://www.layuicdn.com/layui-v2.5.6/layui.js"); addCSS("https://www.layuicdn.com/layui-v2.5.5/css/layui.css"); }); 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= 0) { title = title.substring(0,n); } return title; } function ShowTips(str) { layui.use('layer', function(){ var layer = layui.layer; layer.msg(str, { icon: 1 }); }); } //==========以下是与下载器通讯===================================================================== 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"]]} ShowTips("任务发送成功"); }; function wsclose() { console.log("连接关闭"); // layui.use('layer', function(){ // var layer = layui.layer; // layer.msg("连接关闭", { // icon: 1 // }); // }); }; 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) }; setTimeout(function() { if (ws.readyState===1) { //连接成功什么事情都不用处理 }else{ ShowTips("连接下载器失败,请确认开启下载器"); } }, 1000) ws.onopen = wsopen; ws.onmessage = wsmessage; ws.onclose = wsclose; }; //=============================================================================== // 拷贝我的收藏视频网址 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("")); return list.map(function (pin) { var item = {"url": "https:" + pin.children[0].attributes["href"].nodeValue}; item.folder = "我的收藏" item.islist = false; return item; }) }else { ShowTips("找不到视频"); } } // 拷贝播放列表视频网址 function CopyVedioUrls() { var title = Trim(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("")); return list.map(function (pin) { var item = {"url": "https://www.bilibili.com" + pin.children[0].attributes["href"].nodeValue} item.folder = Trim(title) item.islist = false; return item; }) }else { ShowTips("找不到视频"); } } // 拷贝番剧播放列表视频网址 function CopyBangumiUrls() { jQuery.ajax({ url: window.location.href, async: false, success: function (res) { // console.log(res); var info = res var n = info.lastIndexOf(""); // console.log("1111",n, n2,info) info = info.substring(0,n2); } var bili_state = JSON.parse(info) if (bili_state) { console.log(bili_state) var epList = bili_state.epList var title = bili_state.mediaInfo.title var ssType = bili_state.ssType // console.log(bili_state.epList) // console.log("epList =", epList, "mediaInfo = ", mediaInfo) // for (var i = 0; i < epList.length; i++) { // console.log(i, epList[i]) // } // if (ssType==1) { //番剧 var urls = epList.map(function (ep) { var item = { "url": "https://www.bilibili.com/bangumi/play/ep"+ ep.id, "titleFormat":Trim(ep.titleFormat), "longTitle":Trim(ep.longTitle), "fileName":Trim(ep.titleFormat+":"+ep.longTitle) } item.folder = Trim(title) item.islist = false; return item; }) Download(urls) // }else // {// 电影 // DownloadSelf(title, false) // } }else { var title = document.querySelector('meta[property="og:title"]').getAttribute('content'); DownloadSelf(title, true) } }, omplete: function (data) { if (data.status === 200) { } else { ShowTips("系统错误:暂时无法连接服务器") var title = document.querySelector('meta[property="og:title"]').getAttribute('content'); DownloadSelf(title, true) } } }); } // function CopyBangumiUrlsEx() { // 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("")); // var item = {"url": window.location.href} // item.folder = title; // item.islist = true; // return [item] // }else // { // ShowTips("找不到视频"); // } // } function DownloadSelf(title, islist) { var item = {"url": window.location.href} item.folder = Trim(title); // 不能有空格,有时候下载失败是因为有空格 item.islist = islist; Download([item]) } 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 GMaddStyleString(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 = '' // 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 } GMaddStyleString(`#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 = `
`; document.body.insertAdjacentHTML('afterEnd', html); document.getElementById("downloadVideos").onclick = function () { var urls = ParseUrl(); console.log("urls = ",urls) if (urls) { Download(urls) } }; // },3000) } })();