懒人专用,全网VIP视频免费破解去广告、全网音乐直接下载、百度网盘直接下载、知乎视频下载等多合一版。长期更新,放心使用。 was reported 2021-05-04 by msoop as an unauthorized copy of 懒人专用,全网VIP视频免费破解去广告、全网音乐直接下载、百度网盘直接下载等多合一版。长期更新,放心使用。. 懒人专用,全网VIP视频免费破解去广告、全网音乐直接下载、百度网盘直接下载等多合一版。长期更新,放心使用。 uses the AGPL License license. Visit tldrlegal.com for help understanding what this license means.

Script License Created Updated
Reported 懒人专用,全网VIP视频免费破解去广告、全网音乐直接下载、百度网盘直接下载、知乎视频下载等多合一版。长期更新,放心使用。 GPL License 2020-12-28 14:35:15 UTC 2020-12-28 14:35:14 UTC
Original 懒人专用,全网VIP视频免费破解去广告、全网音乐直接下载、百度网盘直接下载等多合一版。长期更新,放心使用。 AGPL License 2018-07-27 02:35:32 UTC 2021-05-11 01:39:07 UTC
  • // ==UserScript==
  • -// @name 懒人专用,全网VIP视频免费破解去广告、全网音乐直接下载、百度网盘直接下载等多合一版。长期更新,放心使用。
  • -// @namespace lanhaha
  • -// @version 3.3.8
  • -// @description 自用组合型多功能脚本,无需关注公众号,集合了优酷、爱奇艺、腾讯、芒果等全网VIP视频免费破解去广告,网易云音乐、QQ音乐、酷狗、酷我、虾米、蜻蜓FM、荔枝FM、喜马拉雅等网站音乐和有声书音频免客户端下载,百度网盘直接下载,优惠券查询等几个自己常用的功能。
  • -// @author lanhaha,syhyz1990,zhmai
  • +// @name 懒人专用,全网VIP视频免费破解去广告、全网音乐直接下载、百度网盘直接下载、知乎视频下载等多合一版。长期更新,放心使用。
  • +// @namespace https://www.zhaocrx.com/
  • +// @version 2.4.4
  • +// @description 自用组合型多功能脚本,无需关注公众号,集合了优酷、爱奇艺、腾讯、芒果等全网VIP视频免费破解去广告,网易云音乐、QQ音乐、酷狗、酷我、虾米、蜻蜓FM、荔枝FM、喜马拉雅等网站音乐免客户端下载,百度网盘直接下载,知乎视频下载,优惠券查询等几个自己常用的功能。
  • +// @author lanhaha,syhyz1990,Chao,zuihuimai
  • // @include *://pan.baidu.com/disk/home*
  • // @include *://yun.baidu.com/disk/home*
  • // @include *://pan.baidu.com/s*
  • // @include *://yun.baidu.com/s*
  • -// @include *://pan.baidu.com/share/*
  • -// @include *://yun.baidu.com/share/*
  • +// @include *://*.zhihu.com/*
  • +// @include *://v.vzuu.com/video/*
  • // @include *.youku.com/v*
  • // @include *m.youku.com/*
  • -// @include *.iqiyi.com/v_*
  • -// @include *.iqiyi.com/w_*
  • -// @include *.iqiyi.com/a_*
  • -// @include *.le.com/ptv/vplay/*
  • // @include *v.qq.com/x/*
  • // @include *v.qq.com/p*
  • // @include *v.qq.com/cover*
  • // @include *v.qq.com/tv/*
  • +// @include *film.sohu.com/album/*
  • +// @include *tv.sohu.com/*
  • +// @include *.iqiyi.com/v_*
  • +// @include *.iqiyi.com/w_*
  • +// @include *.iqiyi.com/a_*
  • +// @include *.le.com/ptv/vplay/*
  • // @include *.tudou.com/listplay/*
  • // @include *.tudou.com/albumplay/*
  • // @include *.tudou.com/programs/view/*
  • // @include *.tudou.com/v*
  • // @include *.mgtv.com/b/*
  • -// @include *tv.sohu.com/*
  • -// @include *film.sohu.com/album/*
  • +// @include *.acfun.cn/v/*
  • // @include *.bilibili.com/video/*
  • // @include *.bilibili.com/anime/*
  • // @include *.bilibili.com/bangumi/play/*
  • -// @include *.bilibili.com/s/*
  • // @include *.pptv.com/show/*
  • // @include *.wasu.cn/Play/show*
  • // @include *v.yinyuetai.com/video/*
  • // @include *://*detail.tmall.com/*
  • // @include *://*detail.tmall.hk/*
  • // @include *://*.liangxinyao.com/*
  • -// @include *music.163.com/*
  • -// @include *://y.qq.com/portal*
  • -// @include *://y.qq.com/n/ryqq/player
  • -// @include *://i.y.qq.com/*
  • -// @include *://*.kugou.com/*
  • -// @include *://*kuwo.cn/*
  • +// @include *://music.163.com/song*
  • +// @include *://music.163.com/m/song*
  • +// @include *://y.qq.com/n/*
  • +// @include *://*.kugou.com/song*
  • +// @include *://*.kuwo.cn/yinyue*
  • +// @include *://*.kuwo.cn/play_detail*
  • // @include *://*.xiami.com/*
  • // @include *://music.taihe.com/song*
  • // @include *://*.1ting.com/player*
  • // @connect baiduyun.wiki
  • // @connect localhost
  • // @require https://cdn.jsdelivr.net/npm/jquery@3.2.1/dist/jquery.min.js
  • -// @require https://cdn.jsdelivr.net/npm/sweetalert2@10.16.6/dist/sweetalert2.all.min.js
  • -// @original-script https://greasyfork.org/scripts/376078
  • -// @original-author zhmai
  • -// @original-license GPL License
  • -// @original-script https://github.com/syhyz1990/baiduyun/blob/master/baiduyun.user.js
  • -// @original-author youxiaohou
  • -// @original-license AGPL License
  • -// @original-changes 1,将强制关注公众号改为非强制。2,将公众号图片改为文字。3,删除了设置的icon图标。
  • -// @license AGPL License
  • +// @require https://cdn.jsdelivr.net/npm/sweetalert2@9
  • +// @license GPL License
  • // @grant GM_download
  • // @grant GM_openInTab
  • // @grant GM_setValue
  • // @grant GM_getResourceText
  • // @grant GM_info
  • // @grant GM_registerMenuCommand
  • -// @grant GM_cookie
  • // @run-at document-idle
  • // ==/UserScript==
  • for(var a=0;a<pan_title.length;a++){
  • if(pan_link.indexOf(pan_title[a])!= -1){
  • pan_link = pan_link.replace('baidu.com','baiduwp.com');
  • - var pan_html = "<a href="+pan_link+" target='_blank' style='cursor:pointer;z-index:98;display:block;width:30px;height:30px;line-height:30px;position:fixed;left:0;top:300px;text-align:center;'><img src='https://www.eggvod.cn/images/vip.png' style='width:50px' ></a>";
  • + var pan_html = "<a href="+pan_link+" target='_blank' style='cursor:pointer;z-index:98;display:block;width:30px;height:30px;line-height:30px;position:fixed;left:0;top:300px;text-align:center;'><img src='https://cdn.80note.com/vip.gif' style='width:50px' ></a>";
  • $("body").append(pan_html);
  • //百度网盘脚本开始
  • //
  • -(function () {
  • - 'use strict';
  • -
  • - let pageType = '', selectFile = [], params = {}, mode = '', width = 800, pan = {}, color = '',
  • - doc = $(document), progress = {}, request = {}, ins = {}, idm = {}, start = '', end = '';
  • - const scriptInfo = GM_info.script;
  • - const version = '5.1.3';
  • - const author = 'YouXiaoHou';
  • - const name = '网盘直链下载助手';
  • - const customClass = {
  • - container: 'pl-container',
  • - popup: 'pl-popup',
  • - header: 'pl-header',
  • - title: 'pl-title',
  • - closeButton: 'pl-close',
  • - icon: 'pl-icon',
  • - image: 'pl-image',
  • - content: 'pl-content',
  • - htmlContainer: 'pl-html',
  • - input: 'pl-input',
  • - inputLabel: 'pl-inputLabel',
  • - validationMessage: 'pl-validation',
  • - actions: 'pl-actions',
  • - confirmButton: 'pl-confirm',
  • - denyButton: 'pl-deny',
  • - cancelButton: 'pl-cancel',
  • - loader: 'pl-loader',
  • - footer: 'pl-footer'
  • - };
  • -
  • - let toast = Swal.mixin({
  • +;(() => {
  • + 'use strict'
  • + const version = GM_info.script.version
  • + const classMap = {
  • + 'bar-search': 'OFaPaO',
  • + 'list-tools': 'tcuLAu',
  • + 'header': 'vyQHNyb'
  • + }
  • + const errorMsg = {
  • + 'dir': '提示:不支持整个文件夹下载,可进入文件夹内获取文件链接下载!',
  • + 'unlogin': '提示:登录网盘后才能使用此功能哦!',
  • + 'fail': '提示:获取下载链接失败!请刷新网页后重试!',
  • + 'unselected': '提示:请先选择要下载的文件!',
  • + 'morethan': '提示:多个文件请点击【显示链接】!',
  • + 'toobig': '提示:只支持300M以下的文件夹,若链接无法下载,请进入文件夹后勾选文件获取!',
  • + 'timeout': '提示:页面过期,请刷新重试!',
  • + 'wrongcode': '提示:获取验证码失败!',
  • + 'deleted': '提示:文件不存在或已被百度和谐,无法下载!',
  • + }
  • + let defaultCode = 250528
  • + let secretCode = getValue('secretCodeV') ? getValue('secretCodeV') : defaultCode
  • + let panhelper = {}
  • + let userAgent = ''
  • + let Toast = Swal.mixin({
  • toast: true,
  • position: 'top',
  • showConfirmButton: false,
  • - timer: 3500,
  • + timer: 3000,
  • timerProgressBar: false,
  • - didOpen: (toast) => {
  • - toast.addEventListener('mouseenter', Swal.stopTimer);
  • - toast.addEventListener('mouseleave', Swal.resumeTimer);
  • + onOpen: (toast) => {
  • + toast.addEventListener('mouseenter', Swal.stopTimer)
  • + toast.addEventListener('mouseleave', Swal.resumeTimer)
  • + }
  • + })
  • + let ariaRPC = {
  • + domain: getValue('rpcDomain') || 'http://localhost',
  • + port: getValue('rpcPort') || 6800,
  • + token: getValue('rpcToken') || '',
  • + dir: getValue('rpcDir') || 'D:/',
  • + }
  • +
  • + function clog(c1, c2, c3) {
  • + c1 = c1 ? c1 : ''
  • + c2 = c2 ? c2 : ''
  • + c3 = c3 ? c3 : ''
  • + console.group('[网盘直链下载助手]')
  • + console.log(c1, c2, c3)
  • + console.groupEnd()
  • + }
  • +
  • + function getBDUSS() {
  • + let baiduyunPlugin_BDUSS = getStorage('baiduyunPlugin_BDUSS') ? getStorage('baiduyunPlugin_BDUSS') : '{"baiduyunPlugin_BDUSS":""}'
  • + let BDUSS = JSON.parse(baiduyunPlugin_BDUSS).BDUSS
  • + if (!BDUSS) {
  • + Swal.fire({
  • + icon: 'error',
  • + title: '提示',
  • + html: panhelper.t.e,
  • + footer: '【网盘万能助手】是增强扩展插件,安装后请刷新',
  • + confirmButtonText: '安装'
  • + }).then((result) => {
  • + if (result.value) {
  • + GM_openInTab(panhelper.w, {active: true})
  • + }
  • + })
  • + }
  • + return BDUSS
  • }
  • - });
  • - let util = {
  • - clog(c) {
  • - console.group(`[${name}]`);
  • - console.log(c);
  • - console.groupEnd();
  • - },
  • - getCookie(name) {
  • - let arr = document.cookie.replace(/\s/g, "").split(';');
  • - for (let i = 0, l = arr.length; i < l; i++) {
  • - let tempArr = arr[i].split('=');
  • - if (tempArr[0] == name) {
  • - return decodeURIComponent(tempArr[1]);
  • + function aria2c(link, filename, ua) {
  • + let BDUSS = getBDUSS()
  • + ua = ua || userAgent
  • + if (BDUSS) {
  • + return encodeURIComponent(`aria2c "${link}" --out "${filename}" --header "User-Agent: ${ua}" --header "Cookie: BDUSS=${BDUSS}"`)
  • + } else {
  • + return '请先安装网盘万能助手,安装后请重启浏览器!!!'
  • }
  • }
  • - return '';
  • - },
  • - getValue(name) {
  • - return GM_getValue(name);
  • - },
  • - setValue(name, value) {
  • - GM_setValue(name, value);
  • - },
  • - getStorage(key) {
  • - return localStorage.getItem(key);
  • - },
  • - setStorage(key, value) {
  • - return localStorage.setItem(key, value);
  • - },
  • - setClipboard(text) {
  • - GM_setClipboard(text, 'text');
  • - },
  • - encode(str) {
  • - return btoa(unescape(encodeURIComponent(str)));
  • - },
  • - decode(str) {
  • - return decodeURIComponent(escape(atob(str)));
  • - },
  • - setBDUSS() {
  • - try {
  • - GM_cookie && GM_cookie('list', {name: 'BDUSS'}, (cookies, error) => {
  • - if (!error) {
  • - this.setStorage("baiduyunPlugin_BDUSS", JSON.stringify({BDUSS: cookies[0].value}));
  • +
  • + function replaceLink(link) {
  • + return link ? link.replace(/&/g, '&amp;') : ''
  • }
  • - });
  • - } catch (e) {
  • + function detectPage() {
  • + let regx = /[\/].+[\/]/g
  • + let page = location.pathname.match(regx)
  • + return page[0].replace(/\//g, '')
  • }
  • - },
  • - getBDUSS() {
  • - let baiduyunPlugin_BDUSS = this.getStorage('baiduyunPlugin_BDUSS') ? this.getStorage('baiduyunPlugin_BDUSS') : '{"baiduyunPlugin_BDUSS":""}';
  • - let BDUSS = JSON.parse(baiduyunPlugin_BDUSS).BDUSS || '';
  • - return BDUSS;
  • - },
  • - getExtension(name) {
  • - let reg = /(?!\.)\w+$/;
  • - if (reg.test(name)) {
  • - let match = name.match(reg);
  • - return match[0].toUpperCase();
  • +
  • + function getCookie(e) {
  • + let o, t
  • + let n = document, c = decodeURI
  • + return n.cookie.length > 0 && (o = n.cookie.indexOf(e + "="), -1 != o) ? (o = o + e.length + 1, t = n.cookie.indexOf(";", o), -1 == t && (t = n.cookie.length), c(n.cookie.substring(o, t))) : ""
  • }
  • - return '';
  • - },
  • - convertToAria(link, filename, ua) {
  • - let BDUSS = this.getBDUSS();
  • - filename = filename.replace(' ', '_');
  • - if (BDUSS) {
  • - return encodeURIComponent(`aria2c "${link}" --out "${filename}" --header "User-Agent: ${ua}" --header "Cookie: BDUSS=${BDUSS}"`);
  • - } else {
  • - return {
  • - link: pan.assistant,
  • - text: pan.init[5]
  • - };
  • +
  • + function setCookie(key, value, t) {
  • + let oDate = new Date() //创建日期对象
  • + oDate.setTime(oDate.getTime() + t * 60 * 1000) //设置过期时间
  • + document.cookie = key + '=' + value + ';expires=' + oDate.toGMTString() //设置cookie的名称,数值,过期时间
  • }
  • - },
  • - blobDownload(blob, filename) {
  • - if (blob instanceof Blob) {
  • - const url = URL.createObjectURL(blob);
  • - const a = document.createElement('a');
  • - a.href = url;
  • - a.download = filename;
  • - a.click();
  • - URL.revokeObjectURL(url);
  • +
  • + function getValue(name) {
  • + return GM_getValue(name)
  • }
  • - },
  • - setInt(name, time) {
  • - time = time || 100;
  • - let i = 0;
  • - if ($(name).length) return
  • - let ins = setInterval(() => {
  • - i++;
  • - if ($(name).length) {
  • - clearInterval(ins);
  • - $(name).remove();
  • +
  • + function setValue(name, value) {
  • + GM_setValue(name, value)
  • }
  • - if (i > 60) clearInterval(ins);
  • - }, time);
  • - },
  • - sleep(time) {
  • - return new Promise((resolve) => setTimeout(resolve, time));
  • - },
  • - message: {
  • - success(text) {
  • - toast.fire({title: text, icon: 'success'});
  • - },
  • - error(text) {
  • - toast.fire({title: text, icon: 'error'});
  • - },
  • - warning(text) {
  • - toast.fire({title: text, icon: 'warning'});
  • - },
  • - info(text) {
  • - toast.fire({title: text, icon: 'info'});
  • - },
  • - question(text) {
  • - toast.fire({title: text, icon: 'question'});
  • +
  • + function getStorage(key) {
  • + return localStorage.getItem(key)
  • }
  • - },
  • - post(url, data, headers, type) {
  • - return new Promise((resolve, reject) => {
  • - let requestObj = GM_xmlhttpRequest({
  • - method: "POST", url, headers, data,
  • - responseType: type || 'json',
  • - onload: (res) => {
  • - type === 'blob' ? resolve(res) : resolve(res.response || res.responseText);
  • - },
  • - onerror: (err) => {
  • - reject(err);
  • - },
  • - });
  • - });
  • - },
  • - get(url, headers, type, extra) {
  • - return new Promise((resolve, reject) => {
  • - let requestObj = GM_xmlhttpRequest({
  • - method: "GET", url, headers,
  • - responseType: type || 'json',
  • - onload: (res) => {
  • - if (res.status === 204) {
  • - requestObj.abort();
  • - idm[extra.index] = true;
  • +
  • + function setStorage(key, value) {
  • + return localStorage.setItem(key, value)
  • }
  • - if (type === 'blob') {
  • - res.status === 200 && util.blobDownload(res.response, extra.filename);
  • - resolve(res);
  • - } else {
  • - resolve(res.response || res.responseText);
  • +
  • + function encode(str) {
  • + return btoa(unescape(encodeURIComponent(btoa(unescape(encodeURIComponent(str))))))
  • }
  • - },
  • - onprogress: (res) => {
  • - if (extra && extra.filename && extra.index) {
  • - res.total > 0 ? progress[extra.index] = (res.loaded * 100 / res.total).toFixed(2) : progress[extra.index] = 0.00;
  • +
  • + function decode(str) {
  • + return decodeURIComponent(escape(atob(decodeURIComponent(escape(atob(str))))))
  • }
  • - },
  • - onloadstart() {
  • - extra && extra.filename && extra.index && (request[extra.index] = requestObj);
  • - },
  • - onerror: (err) => {
  • - reject(err);
  • - },
  • - });
  • - });
  • - },
  • - addStyle(id, tag, css) {
  • - tag = tag || 'style';
  • - let doc = document, styleDom = doc.getElementById(id);
  • - if (styleDom) return;
  • - let style = doc.createElement(tag);
  • - style.rel = 'stylesheet';
  • - style.id = id;
  • - tag === 'style' ? style.innerHTML = css : style.href = css;
  • - doc.getElementsByTagName('head')[0].appendChild(style);
  • +
  • + function getLogID() {
  • + let name = "BAIDUID"
  • + let u = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/~!@#¥%……&"
  • + let d = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g
  • + let f = String.fromCharCode
  • +
  • + function l(e) {
  • + if (e.length < 2) {
  • + let n = e.charCodeAt(0)
  • + return 128 > n ? e : 2048 > n ? f(192 | n >>> 6) + f(128 | 63 & n) : f(224 | n >>> 12 & 15) + f(128 | n >>> 6 & 63) + f(128 | 63 & n)
  • + }
  • + let n = 65536 + 1024 * (e.charCodeAt(0) - 55296) + (e.charCodeAt(1) - 56320)
  • + return f(240 | n >>> 18 & 7) + f(128 | n >>> 12 & 63) + f(128 | n >>> 6 & 63) + f(128 | 63 & n)
  • }
  • - };
  • - let main = {
  • - initValue() {
  • - let value = [{
  • - name: 'setting_rpc_domain',
  • - value: 'http://localhost'
  • - }, {
  • - name: 'setting_rpc_port',
  • - value: '16800'
  • - }, {
  • - name: 'setting_rpc_token',
  • - value: ''
  • - }, {
  • - name: 'setting_rpc_dir',
  • - value: 'D:'
  • - }, {
  • - name: 'setting_theme_color',
  • - value: '#09AAFF'
  • - }, {
  • - name: 'setting_init_code',
  • - value: ''
  • - }, {
  • - name: 'scode',
  • - value: ''
  • - }];
  • + function g(e) {
  • + return (e + "" + Math.random()).replace(d, l)
  • + }
  • - value.forEach((v) => {
  • - util.getValue(v.name) === undefined && util.setValue(v.name, v.value);
  • - });
  • - },
  • + function m(e) {
  • + let n = [0, 2, 1][e.length % 3]
  • + let t = e.charCodeAt(0) << 16 | (e.length > 1 ? e.charCodeAt(1) : 0) << 8 | (e.length > 2 ? e.charCodeAt(2) : 0)
  • + let o = [u.charAt(t >>> 18), u.charAt(t >>> 12 & 63), n >= 2 ? "=" : u.charAt(t >>> 6 & 63), n >= 1 ? "=" : u.charAt(63 & t)]
  • + return o.join("")
  • + }
  • - addStyle() {
  • - color = util.getValue('setting_theme_color');
  • - util.setInt('#panlinker-button');
  • - let css=`
  • - .pl-popup { font-size: 12px !important; }
  • - .pl-popup a { color: ${color} !important; }
  • - .pl-header { padding: 0!important;align-items: flex-start!important; border-bottom: 1px solid #eee!important; margin: 0 0 10px!important; padding: 0 0 5px!important;}
  • - .pl-title { font-size: 16px!important; line-height: 1!important;white-space: nowrap!important; text-overflow: ellipsis!important;}
  • - .pl-content { padding: 0 !important; font-size: 12px!important;}
  • - .pl-main { max-height: 400px;overflow-y:scroll}
  • - .pl-main::-webkit-scrollbar { width: 8px }
  • - .pl-main::-webkit-scrollbar-track { background-color: #eaecef }
  • - .pl-main::-webkit-scrollbar-thumb { background-color: ${color} }
  • - .pl-footer {font-size: 12px!important;justify-content: flex-start!important; margin: 10px 0 0!important; padding: 5px 0 0!important; color: #f56c6c!important}
  • - .pl-item { display: flex; align-items: center; line-height: 22px; }
  • - .pl-item-title { flex: 0 0 150px; text-align: left;margin-right: 10px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; cursor:default}
  • - .pl-item-link { flex: 1; overflow: hidden;text-align: left; white-space: nowrap; text-overflow: ellipsis; }
  • - .pl-item-tip { display: flex; justify-content: space-between;flex: 1}
  • - .pl-back { width: 70px; background: #ddd; border-radius: 3px;cursor:pointer;margin:1px 0 }
  • - .pl-ext { display: inline-block; width: 44px; background: #999; color: #fff; height: 16px; line-height: 16px; font-size: 12px; border-radius: 3px;}
  • - .pl-retry {padding: 3px 10px; background: #cc3235; color: #fff; border-radius: 3px; cursor: pointer;}
  • - .pl-browserdownload {padding: 3px 10px; background: ${color}; color: #fff; border-radius: 3px; cursor: pointer;}
  • - .pl-item-progress { display:flex;flex: 1;align-items:center}
  • - .pl-progress { display: inline-block;vertical-align: middle;width: 100%; box-sizing: border-box;line-height: 1;position: relative;height:15px; flex: 1}
  • - .pl-progress-outer { height: 15px;border-radius: 100px;background-color: #ebeef5;overflow: hidden;position: relative;vertical-align: middle;}
  • - .pl-progress-inner{ position: absolute;left: 0;top: 0;background-color: #409eff;text-align: right;border-radius: 100px;line-height: 1;white-space: nowrap;transition: width .6s ease;}
  • - .pl-progress-inner-text { display: inline-block;vertical-align: middle;color: #d1d1d1;font-size: 12px;margin: 0 5px;height: 15px}
  • - .pl-progress-tip{ flex:1;text-align:right}
  • - .pl-progress-how{ flex: 0 0 90px; background: #ddd; border-radius: 3px; margin-left: 10px; cursor: pointer; text-align: center;}
  • - .pl-progress-stop{ flex: 0 0 50px; padding: 0 10px; background: #cc3235; color: #fff; border-radius: 3px; cursor: pointer;margin-left:10px;height:20px}
  • - .pl-progress-inner-text:after { display: inline-block;content: "";height: 100%;vertical-align: middle;}
  • - .pl-btn-primary { background: ${color}; border: 0; border-radius: 4px; color: #ffffff; cursor: pointer; font-size: 12px; outline: none; display:flex; align-items: center; justify-content: center; margin: 2px 0; padding: 6px 0;transition: 0.3s opacity; }
  • - .pl-btn-info { background: #606266; }
  • - .pl-btn-primary:hover { opacity: 0.9;transition: 0.3s opacity; }
  • - .pl-btn-danger { background: #cc3235; }
  • - .pl-btn-success { background: #55af28; animation: easeOpacity 1.2s 2; animation-fill-mode:forwards }
  • - @keyframes easeOpacity { from { opacity: 1; } 50% { opacity: 0.35 } to { opacity: 1; } }
  • - .element-clicked { opacity: 0.5; }
  • - .pl-extra { margin-top: 10px;display:flex}
  • - .pl-extra button { flex: 1}
  • - .pointer { cursor:pointer }
  • - .pl-setting-label { display: flex;align-items: center;justify-content: space-between;padding-top: 10px; }
  • - .pl-label { flex: 0 0 100px;text-align:left; }
  • - .pl-input { flex: 1; padding: 8px 10px; border: 1px solid #c2c2c2; border-radius: 5px; font-size: 14px }
  • - .pl-color { flex: 1;display: flex;flex-wrap: wrap; margin-right: -10px;}
  • - .pl-color-box { width: 35px;height: 35px;margin:10px 10px 0 0;; box-sizing: border-box;border:1px solid #fff;cursor:pointer }
  • - .pl-color-box.checked { border:3px dashed #111!important }
  • - .pl-close:focus { outline: 0; box-shadow: none; }
  • - .tag-danger {color:#cc3235;margin: 0 5px;}
  • - .pl-tooltip { position: absolute; color: #ffffff; max-width: 600px; font-size: 12px; padding: 5px 10px; background: #333; border-radius: 5px; z-index: 99999; line-height: 1.3; display:none; word-break: break-all;}
  • - @keyframes load { 0% { transform: rotate(0deg) } 100% { transform: rotate(360deg) } }
  • - .pl-loading-box > div > div {position: absolute;border-radius: 50%;}
  • - .pl-loading-box > div > div:nth-child(1) {top: 9px;left: 9px;width: 82px;height: 82px;background: #ffffff;}
  • - .pl-loading-box > div > div:nth-child(2) {top: 14px;left: 38px;width: 25px;height: 25px;background: #666666;animation: load 1s linear infinite;transform-origin: 12px 36px;}
  • - .pl-loading {width: 16px;height: 16px;display: inline-block;overflow: hidden;background: none;}
  • - .pl-loading-box {width: 100%;height: 100%;position: relative;transform: translateZ(0) scale(0.16);backface-visibility: hidden;transform-origin: 0 0;}
  • - .pl-loading-box div { box-sizing: content-box; }
  • - `
  • - util.addStyle('panlinker-style','style',css)
  • - },
  • + function h(e) {
  • + return e.replace(/[\s\S]{1,3}/g, m)
  • + }
  • - addPageListener() {
  • - function _factory(e) {
  • - let target = $(e.target);
  • - let item = target.parents('.pl-item');
  • - let link = item.find('.pl-item-link');
  • - let progress = item.find('.pl-item-progress');
  • - let tip = item.find('.pl-item-tip');
  • - return {
  • - item, link, progress, tip, target,
  • - };
  • + function p() {
  • + return h(g((new Date()).getTime()))
  • }
  • - function _reset(i) {
  • - ins[i] && clearInterval(ins[i]);
  • - request[i] && request[i].abort();
  • - progress[i] = 0;
  • - idm[i] = false;
  • + function w(e, n) {
  • + return n ? p(String(e)).replace(/[+\/]/g, (e) => {
  • + return "+" == e ? "-" : "_"
  • + }).replace(/=/g, "") : p(String(e))
  • }
  • - doc.on('click mouseleave', '.pl-button', (e) => {
  • - if (e.type === 'click') {
  • - $(e.currentTarget).addClass('button-open');
  • - } else {
  • - $(e.currentTarget).removeClass('button-open');
  • + return w(getCookie(name))
  • }
  • - });
  • - doc.on('click', '.pl-button-mode', (e) => {
  • - mode = e.target.dataset.mode;
  • - Swal.showLoading();
  • - this.getPCSLink();
  • - });
  • - doc.on('click', '.listener-link-api', async (e) => {
  • - e.preventDefault();
  • - let o = _factory(e);
  • - let $width = o.item.find('.pl-progress-inner');
  • - let $text = o.item.find('.pl-progress-inner-text');
  • - let filename = o.link[0].dataset.filename;
  • - let index = o.link[0].dataset.index;
  • - _reset(index);
  • - util.get(o.link[0].dataset.link, {"User-Agent": pan.ua}, 'blob', {filename, index});
  • - ins[index] = setInterval(() => {
  • - let prog = progress[index] || 0;
  • - let isIDM = idm[index] || false;
  • - if (isIDM) {
  • - o.tip.hide();
  • - o.progress.hide();
  • - o.link.text('已成功唤起IDM,请查看IDM下载框!').animate({opacity: '0.5'}, "slow").show();
  • - clearInterval(ins[index]);
  • - idm[index] = false;
  • +
  • + function rpcSetting() {
  • + let dom = ''
  • + dom += '<div class="flex-center-between"><label for="rpcDomain" class="label">主机</label><input type="text" id="rpcDomain" value="' + ariaRPC.domain + '" class="swal2-input" placeholder="http://localhost"></div>'
  • + dom += '<div class="flex-center-between"><label for="rpcPort" class="label">端口</label><input type="text" id="rpcPort" value="' + ariaRPC.port + '" class="swal2-input" placeholder="6800"></div>'
  • + dom += '<div class="flex-center-between"><label for="rpcToken" class="label">密钥</label><input type="text" id="rpcToken" value="' + ariaRPC.token + '" class="swal2-input" placeholder="没有留空"></div>'
  • + dom += '<div class="flex-center-between"><label for="rpcDir" class="label">下载路径</label><input type="text" id="rpcDir" value="' + ariaRPC.dir + '" class="swal2-input" placeholder="默认为D:\"></div>'
  • + dom += '<div class="flex-center-between" style="margin-top: 15px;font-size: 0.85em;color: #999;"><div class="label">快速配置</div> <div style="flex: 1;text-align: left;"><span class="rtag" id="rpc1">Motrix</span><span class="rtag" id="rpc2">Aria2 Tools</span><span class="rtag" id="rpc3">AriaNgGUI</span></div></div>'
  • + dom = '<div>' + dom + '</div>'
  • + let $dom = $(dom)
  • + $(document).on('click', '#rpc1', () => {
  • + $('#rpcDomain').val('http://localhost')
  • + $('#rpcPort').val(16800)
  • + $('#rpcDir').val('D:')
  • + })
  • + $(document).on('click', '#rpc2', () => {
  • + $('#rpcDomain').val('http://localhost')
  • + $('#rpcPort').val(6800)
  • + $('#rpcDir').val('D:')
  • + })
  • + $(document).on('click', '#rpc3', () => {
  • + $('#rpcDomain').val('http://192.168.0.?')
  • + $('#rpcPort').val(6800)
  • + $('#rpcDir').val('/storage/emulated/0/Download')
  • + })
  • + Swal.fire({
  • + title: 'RPC配置',
  • + allowOutsideClick: false,
  • + html: $dom[0],
  • + showCancelButton: true,
  • + confirmButtonText: '保存',
  • + cancelButtonText: '取消',
  • + footer: panhelper.t.n
  • + }
  • + ).then((result) => {
  • + if (result.value) {
  • + ariaRPC.domain = $('#rpcDomain').val()
  • + ariaRPC.port = $('#rpcPort').val()
  • + ariaRPC.token = $('#rpcToken').val()
  • + ariaRPC.dir = $('#rpcDir').val()
  • + setValue('rpcDomain', ariaRPC.domain)
  • + setValue('rpcPort', ariaRPC.port)
  • + setValue('rpcToken', ariaRPC.token)
  • + setValue('rpcDir', ariaRPC.dir)
  • + Toast.fire({
  • + text: '设置成功',
  • + icon: 'success'
  • + })
  • + }
  • + })
  • + }
  • +
  • + function Dialog() {
  • + let linkList = []
  • + let showParams
  • + let dialog, shadow
  • +
  • + function createDialog() {
  • + let screenWidth = document.body.clientWidth
  • + let dialogLeft = screenWidth > 800 ? (screenWidth - 800) / 2 : 0
  • + let $dialog_div = $('<div class="dialog" style="width: 800px; top: 0px; bottom: auto; left: ' + dialogLeft + 'px; right: auto; display: hidden; visibility: visible; z-index: 52;"></div>')
  • + let $dialog_header = $('<div class="dialog-header"><h3><span class="dialog-title" style="display:inline-block;width:740px;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis"></span></h3></div>')
  • + let $dialog_control = $('<div class="dialog-control"><span class="dialog-icon dialog-close">×</span></div>')
  • + let $dialog_body = $('<div class="dialog-body"></div>')
  • + let $dialog_tip = $('<div class="dialog-tip"><p></p></div>')
  • + $dialog_div.append($dialog_header.append($dialog_control)).append($dialog_body)
  • + let $dialog_button = $('<div class="dialog-button" style="display:none"></div>')
  • + let $dialog_button_div = $('<div style="display:table;margin:auto"></div>')
  • + let $dialog_copy_button = $('<button id="dialog-copy-button" style="display:none">复制全部链接</button>')
  • + let $dialog_send_button = $('<button id="dialog-send-button" class="send-all" style="display:none">发送全部链接</button>')
  • + let $dialog_rpc_button = $('<button id="dialog-rpc-button" class="rpc-setting" style="display:none">配置RPC服务</button>')
  • + $dialog_button_div.append($dialog_copy_button).append($dialog_send_button).append($dialog_rpc_button)
  • + $dialog_button.append($dialog_button_div)
  • + $dialog_div.append($dialog_button)
  • + $dialog_copy_button.click(() => {
  • + let content = ''
  • + if (showParams.type === 'pcs') {
  • + $.each(linkList, (index, element) => {
  • + console.log(element)
  • + if (index === linkList.length - 1)
  • + content += element.dlink
  • + else
  • + content += element.dlink + '\r\n'
  • + })
  • + }
  • + if (showParams.type === 'batchAria') {
  • + $.each(linkList, (index, element) => {
  • + if (index === linkList.length - 1)
  • + content += decodeURIComponent(aria2c(element.dlink, element.filename, userAgent))
  • + else
  • + content += decodeURIComponent(aria2c(element.dlink, element.filename, userAgent) + '\r\n')
  • + })
  • + }
  • + if (showParams.type === 'rpc') {
  • + $.each(linkList, (index, element) => {
  • + if (index === linkList.length - 1)
  • + content += element.downloadlink
  • + else
  • + content += element.downloadlink + '\r\n'
  • + })
  • + }
  • + if (showParams.type === 'shareLink') {
  • + $.each(linkList, (index, element) => {
  • + if (element.dlink == 'error')
  • + return
  • + if (index == linkList.length - 1)
  • + content += element.dlink
  • + else
  • + content += element.dlink + '\r\n'
  • + })
  • + }
  • + if (showParams.type == 'shareAriaLink') {
  • + $.each(linkList, (index, element) => {
  • + if (element.dlink == 'error')
  • + return
  • + if (index == linkList.length - 1)
  • + content += decodeURIComponent(aria2c(element.dlink, element.server_filename))
  • + else
  • + content += decodeURIComponent(aria2c(element.dlink, element.server_filename) + '\r\n')
  • + })
  • + }
  • + GM_setClipboard(content, 'text')
  • + if (content != '') {
  • + Toast.fire({
  • + icon: 'success',
  • + text: '已将链接复制到剪贴板!'
  • + })
  • +
  • } else {
  • - o.link.hide();
  • - o.tip.hide();
  • - o.progress.show();
  • - $width.css('width', prog + '%');
  • - $text.text(prog + '%');
  • - if (prog == 100) {
  • - clearInterval(ins[index]);
  • - progress[index] = 0;
  • - o.item.find('.pl-progress-stop').hide();
  • - o.item.find('.pl-progress-tip').html('下载完成,正在弹出浏览器下载框!');
  • + Toast.fire({
  • + icon: 'error',
  • + text: '复制失败,请手动复制!'
  • + })
  • }
  • + })
  • + $dialog_div.append($dialog_tip)
  • + $('body').append($dialog_div)
  • + $dialog_control.click(dialogControl)
  • + return $dialog_div
  • + }
  • +
  • + function createShadow() {
  • + let $shadow = $('<div class="dialog-shadow" style="position: fixed; left: 0px; top: 0px; z-index: 50; background: rgb(0, 0, 0) none repeat scroll 0% 0%; opacity: 0.5; width: 100%; height: 100%; display: none;"></div>')
  • + $('body').append($shadow)
  • + return $shadow
  • + }
  • +
  • + this.open = (params) => {
  • + showParams = params
  • + linkList = []
  • + if (params.type == 'link') {
  • + linkList = params.list.urls
  • + $('div.dialog-header h3 span.dialog-title', dialog).html(params.title + ":" + params.list.filename)
  • + $.each(params.list.urls, (index, element) => {
  • + element.url = replaceLink(element.url)
  • + let $div = $('<div><div style="width:30px;float:left">' + element.rank + ':</div><div style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis"><a href="' + element.url + '">' + element.url + '</a></div></div>')
  • + $('div.dialog-body', dialog).append($div)
  • + })
  • }
  • - }, 500);
  • - });
  • - doc.on('click', '.listener-retry', async (e) => {
  • - let o = _factory(e);
  • - o.tip.hide();
  • - o.link.show();
  • - });
  • - doc.on('click', '.listener-how', async (e) => {
  • - let o = _factory(e);
  • - let index = o.link[0].dataset.index;
  • - if (request[index]) {
  • - request[index].abort();
  • - clearInterval(ins[index]);
  • - o.progress.hide();
  • - o.tip.show();
  • + if (params.type === 'batchAria' || params.type === 'batchAriaRPC' || params.type === 'pcs') {
  • + linkList = params.list
  • + $('div.dialog-header h3 span.dialog-title', dialog).html(params.title)
  • + $.each(params.list, (index, element) => {
  • + let $div = $('<div class="row"><div class="ui-title" title="' + element.filename + '">' + element.filename + '</div><span>:</span></div>')
  • + if (params.type === 'pcs') {
  • + $div.append($('<a class="ui-link api-dlink" data-filename=' + element.filename + ' data-link=' + element.dlink + ' href="' + element.dlink + '">' + element.dlink + '</a>'))
  • + }
  • + if (params.type === 'batchAria') {
  • + let link = decodeURIComponent(aria2c(element.dlink, element.filename, userAgent))
  • + $div.append($('<a class="ui-link aria-link" href="javascript:;">' + link + '</a>'))
  • + }
  • + if (params.type === 'batchAriaRPC') {
  • + $div.append($('<button class="aria-rpc" data-link="' + element.dlink + '" data-filename="' + element.filename + '">点击发送到Aria下载器</button>'))
  • + }
  • + $('div.dialog-body', dialog).append($div)
  • + })
  • + }
  • + if (params.type === 'shareLink') {
  • + linkList = params.list
  • + $('div.dialog-header h3 span.dialog-title', dialog).html(params.title)
  • + $.each(params.list, (index, element) => {
  • + element.dlink = replaceLink(element.dlink)
  • + if (element.isdir == 1) return
  • + let $div = $('<div class="row"><div class="ui-title" title="' + element.server_filename + '">' + element.server_filename + '</div><span>:</span><a href="' + element.dlink + '" class="api-dlink">' + element.dlink + '</a></div>')
  • + $('div.dialog-body', dialog).append($div)
  • + })
  • + }
  • + if (params.type === 'rpcLink') {
  • + linkList = params.list
  • + $('div.dialog-header h3 span.dialog-title', dialog).html(params.title)
  • + $.each(params.list, (index, element) => {
  • + element.dlink = replaceLink(element.dlink)
  • + if (element.isdir == 1) return
  • + let $div = $('<div class="row"><div class="ui-title" title="' + element.server_filename + '">' + element.server_filename + '</div><span>:</span><button class="aria-rpc" data-link="' + element.dlink + '" data-filename="' + element.server_filename + '">点击发送到Aria下载器</button></div>')
  • + $('div.dialog-body', dialog).append($div)
  • + })
  • + }
  • + if (params.type === 'shareAriaLink') {
  • + linkList = params.list
  • + $('div.dialog-header h3 span.dialog-title', dialog).html(params.title)
  • + $.each(params.list, (index, element) => {
  • + if (element.isdir == 1) return
  • + let link = decodeURIComponent(aria2c(element.dlink, element.server_filename))
  • + let $div = $('<div class="row"><div class="ui-title" title="' + element.server_filename + '">' + element.server_filename + '</div><span>:</span><a href="javasctipt:void(0)" class="aria-link">' + link + '</a></div>')
  • + $('div.dialog-body', dialog).append($div)
  • + })
  • + }
  • + if (params.tip) {
  • + $('div.dialog-tip p', dialog).html(params.tip)
  • + }
  • + if (params.showcopy) {
  • + $('div.dialog-button', dialog).show()
  • + $('div.dialog-button #dialog-copy-button', dialog).show()
  • + }
  • + if (params.showrpc) {
  • + $('div.dialog-button', dialog).show()
  • + $('div.dialog-button #dialog-send-button', dialog).show()
  • + $('div.dialog-button #dialog-rpc-button', dialog).show()
  • + }
  • + shadow.show()
  • + dialog.show()
  • }
  • - });
  • - doc.on('click', '.listener-stop', async (e) => {
  • - let o = _factory(e);
  • - let index = o.link[0].dataset.index;
  • - if (request[index]) {
  • - request[index].abort();
  • - clearInterval(ins[index]);
  • - o.tip.hide();
  • - o.progress.hide();
  • - o.link.show(0);
  • + this.close = () => {
  • + dialogControl()
  • }
  • - });
  • - doc.on('click', '.listener-back', async (e) => {
  • - let o = _factory(e);
  • - o.tip.hide();
  • - o.link.show();
  • - });
  • - doc.on('click', '.listener-link-aria, .listener-copy-aria', (e) => {
  • - e.preventDefault();
  • - if (!e.target.dataset.link) {
  • - $(e.target).removeClass('listener-copy-aria').addClass('pl-btn-danger').html(`${pan.init[5]}👉<a href="${pan.assistant}" target="_blank">点击此处安装</a>👈`);
  • - } else {
  • - util.setClipboard(decodeURIComponent(e.target.dataset.link));
  • - $(e.target).text('复制成功,快去粘贴吧!').animate({opacity: '0.5'}, "slow");
  • +
  • + function dialogControl() {
  • + $('div.dialog-body', dialog).children().remove()
  • + $('div.dialog-header h3 span.dialog-title', dialog).text('')
  • + $('div.dialog-tip p', dialog).text('')
  • + $('div.dialog-button', dialog).hide()
  • + $('div.dialog-button button#dialog-copy-button', dialog).hide()
  • + $('div.dialog-button button#dialog-send-button', dialog).hide()
  • + $('div.dialog-button button#dialog-rpc-button', dialog).hide()
  • + dialog.hide()
  • + shadow.hide()
  • }
  • - });
  • - doc.on('click', '.listener-link-rpc', async (e) => {
  • - let target = $(e.currentTarget);
  • - target.find('.icon').remove();
  • - target.find('.pl-loading').remove();
  • - target.prepend(this.createLoading());
  • - let res = await this.sendLinkToRPC(e.currentTarget.dataset.filename, e.currentTarget.dataset.link);
  • - if (res === 'success') {
  • - $('.listener-rpc-task').show();
  • - target.removeClass('pl-btn-danger').html('发送成功,快去看看吧!').animate({opacity: '0.5'}, "slow");
  • - } else if (res === 'assistant') {
  • - target.addClass('pl-btn-danger').html(`${pan.init[5]}👉<a href="${pan.assistant}" target="_blank">点击此处安装</a>👈`);
  • - } else {
  • - target.addClass('pl-btn-danger').text('发送失败,请检查您的RPC配置信息!').animate({opacity: '0.5'}, "slow");
  • +
  • + dialog = createDialog()
  • + shadow = createShadow()
  • }
  • - });
  • - doc.on('click', '.listener-send-rpc', (e) => {
  • - $('.listener-link-rpc').click();
  • - $(e.target).text('发送完成,发送结果见上方按钮!').animate({opacity: '0.5'}, "slow");
  • - });
  • - doc.on('click', '.listener-config-rpc', (e) => {
  • - this.showSetting();
  • - });
  • - doc.on('click', '.listener-rpc-task', (e) => {
  • - let rpc = JSON.stringify({
  • - domain: util.getValue('setting_rpc_domain'),
  • - port: util.getValue('setting_rpc_port'),
  • - }), url = `http://d.baiduyun.wiki/?rpc=${util.encode(rpc)}#${util.getValue('setting_rpc_token')}`;
  • - GM_openInTab(url, {active: true});
  • - });
  • - doc.on('mouseenter mouseleave', '.listener-tip', (e) => {
  • - if (e.type === 'mouseenter') {
  • - let tip = e.currentTarget.innerText;
  • - $(e.currentTarget).css({opacity: '0.5'});
  • - $('.pl-tooltip').text(tip).css({
  • - 'left': e.pageX + 10 + 'px',
  • - 'top': e.pageY - e.currentTarget.offsetTop > 14 ? e.pageY + 'px' : e.pageY + 20 + 'px'
  • - }).show();
  • +
  • + function PanHelper() {
  • + let yunData, sign, timestamp, bdstoken, logid, fid_list
  • + let fileList = [], selectFileList = [], batchLinkList = [], batchLinkListAll = [], linkList = []
  • + let dialog, searchKey
  • + let panAPIUrl = location.protocol + "//" + location.host + "/api/"
  • + let restAPIUrl = location.protocol + "//pcs.baidu.com/rest/2.0/pcs/"
  • + let clientAPIUrl = location.protocol + "//pan.baidu.com/rest/2.0/"
  • + this.init = () => {
  • + yunData = unsafeWindow.yunData
  • + initVar()
  • + registerEventListener()
  • + addButton()
  • + dialog = new Dialog({addCopy: true})
  • + clog('下载助手加载成功!当前版本:', version)
  • + }
  • +
  • + function getSelectedFile() {
  • + return require("disk-system:widget/pageModule/list/listInit.js").getCheckedItems()
  • + }
  • +
  • + function initVar() {
  • + timestamp = yunData.timestamp || ''
  • + bdstoken = yunData.MYBDSTOKEN || ''
  • + logid = getLogID()
  • + }
  • +
  • + function registerEventListener() {
  • + $(document).on('click', '.aria-rpc', (e) => {
  • + $(e.target).addClass('clicked')
  • + let link = e.target.dataset.link
  • + let filename = e.target.dataset.filename
  • +
  • + let url = ariaRPC.domain + ":" + ariaRPC.port + '/jsonrpc'
  • + let json_rpc = {
  • + id: new Date().getTime(),
  • + jsonrpc: '2.0',
  • + method: 'aria2.addUri',
  • + params: [
  • + "token:" + ariaRPC.token,
  • + [link],
  • + {
  • + dir: ariaRPC.dir,
  • + out: filename,
  • + header: ['User-Agent:' + userAgent, 'Cookie: BDUSS=' + getBDUSS()]
  • + }
  • + ]
  • + }
  • + GM_xmlhttpRequest({
  • + method: "POST",
  • + headers: {"User-Agent": userAgent},
  • + url: url,
  • + responseType: 'json',
  • + timeout: 3000,
  • + data: JSON.stringify(json_rpc),
  • + onload: (response) => {
  • + if (response.response.result) {
  • + Toast.fire({
  • + icon: 'success',
  • + title: '任务已发送至RPC下载器'
  • + })
  • } else {
  • - $(e.currentTarget).css({opacity: '1'});
  • - $('.pl-tooltip').hide(0);
  • + Toast.fire({
  • + icon: 'error',
  • + title: response.response.message
  • + })
  • }
  • - });
  • },
  • + ontimeout: () => {
  • + Toast.fire({
  • + icon: 'error',
  • + title: '连接到RPC服务器超时,请检查RPC配置'
  • + })
  • + }
  • + })
  • + })
  • + $(document).on('click', '.rpc-setting', () => {
  • + rpcSetting()
  • + })
  • + $(document).on('click', '.send-all', () => {
  • + $('.aria-rpc').click()
  • + $('.dialog').hide()
  • + $('.dialog-shadow').hide()
  • + })
  • + }
  • - createTip() {
  • - $('body').append('<div class="pl-tooltip"></div>');
  • - },
  • + function addButton() {
  • + $('div.' + classMap['bar-search']).css('width', '18%')
  • + let $dropdownbutton = $('<span class="g-dropdown-button"></span>')
  • + let $dropdownbutton_a = $('<a class="g-button" data-button-id="b200" data-button-index="200" href="javascript:;"></a>')
  • + let $dropdownbutton_a_span = $('<span class="g-button-right"><em class="icon icon-download"></em><span class="text" style="width: 60px;">下载助手</span></span>')
  • + let $dropdownbutton_span = $('<span class="menu" style="width:auto;z-index:41"></span>')
  • + let $linkButton = $('<a class="g-button-menu" id="batchhttplink-pcs" href="javascript:;" data-type="down">API下载</a>')
  • + let $aricLinkButton = $('<a class="g-button-menu" id="batchhttplink-aria" href="javascript:;">Aria下载</a>')
  • + let $aricRPCButton = $('<a class="g-button-menu" id="batchhttplink-rpc" href="javascript:;" data-type="rpc">RPC下载</a>')
  • + let $versionButton = $(`<a style="color: #F24C43;" class="g-button-menu" target="_blank" href="${panhelper.u}">${panhelper.t.u}</a>`)
  • + $dropdownbutton_span.append($linkButton).append($aricLinkButton).append($aricRPCButton)
  • + $dropdownbutton_a.append($dropdownbutton_a_span)
  • + $dropdownbutton.append($dropdownbutton_a).append($dropdownbutton_span)
  • + if (getValue('up')) {$dropdownbutton_span.append($versionButton)}
  • + $dropdownbutton.hover(() => {
  • + $dropdownbutton.toggleClass('button-open')
  • + })
  • + $aricRPCButton.click(batchClick)
  • + $linkButton.click(batchClick)
  • + $aricLinkButton.click(batchClick)
  • + $('.' + classMap['list-tools']).append($dropdownbutton)
  • + $('.' + classMap['list-tools']).css('height', '40px')
  • + }
  • - createLoading() {
  • - return $('<div class="pl-loading"><div class="pl-loading-box"><div><div></div><div></div></div></div></div>');
  • - },
  • + function batchClick(event) {
  • + selectFileList = getSelectedFile()
  • + if (selectFileList.length === 0) {
  • + Toast.fire({
  • + icon: 'error',
  • + text: errorMsg.unselected
  • + })
  • + return
  • + }
  • + let id = event.target.id
  • + let tip
  • + batchLinkList = []
  • + batchLinkListAll = []
  • + if (id.indexOf('pcs') > 0) {
  • + getPCSBatchLink((batchLinkList) => {
  • + let tip = panhelper.t.j
  • + if (batchLinkList.length === 0) {
  • + Toast.fire({
  • + icon: 'error',
  • + text: errorMsg.unselected
  • + })
  • + return
  • + }
  • + dialog.open({title: panhelper.t.k, type: 'pcs', list: batchLinkList, tip: tip, showcopy: false})
  • + })
  • + }
  • + if (id.indexOf('aria') > 0) {
  • + getPCSBatchLink((batchLinkList) => {
  • + tip = panhelper.t.f
  • + if (batchLinkList.length === 0) {
  • + Toast.fire({
  • + icon: 'error',
  • + text: errorMsg.unselected
  • + })
  • + return
  • + }
  • + dialog.open({title: panhelper.t.l, type: 'batchAria', list: batchLinkList, tip: tip, showcopy: true})
  • + })
  • + }
  • + if (id.indexOf('rpc') > 0) {
  • + getPCSBatchLink((batchLinkList) => {
  • + tip = panhelper.t.g
  • + if (batchLinkList.length === 0) {
  • + Toast.fire({
  • + icon: 'error',
  • + text: errorMsg.unselected
  • + })
  • + return
  • + }
  • + dialog.open({title: panhelper.t.m, type: 'batchAriaRPC', list: batchLinkList, tip: tip, showcopy: false, showrpc: true})
  • + })
  • + }
  • + }
  • - addButton() {
  • - pageType = this._detectPage();
  • - if (pageType !== 'home' && pageType !== 'share') return;
  • - if (($('.pl-button').length || $('.pl-button-init').length) && pan.name !== name) return;
  • -
  • - let $toolWrap;
  • - pageType === 'home' ? $toolWrap = $(pan.btn.home) : $toolWrap = $(pan.btn.share);
  • - let $button = $(`<span class="g-dropdown-button pointer pl-button"><a style="color:#fff;background: ${color};border-color:${color}" class="g-button g-button-blue" href="javascript:;"><span class="g-button-right"><em class="icon icon-download"></em><span class="text" style="width: 60px;">下载助手</span></span></a><span class="menu" style="width:auto;z-index:41;border-color:${color}"><a style="color:${color}" class="g-button-menu pl-button-mode" data-mode="api" href="javascript:;">API下载</a><a style="color:${color}" class="g-button-menu pl-button-mode" data-mode="aria" href="javascript:;" >Aria下载</a><a style="color:${color}" class="g-button-menu pl-button-mode" data-mode="rpc" href="javascript:;">RPC下载</a>${pan.code === 200 && version < pan.version ? pan.new : ''}</span></span>`);
  • - $toolWrap.prepend($button);
  • - end = performance.now();
  • - let time = (end - start).toFixed(2);
  • - util.clog(`助手加载成功!版本:${version} 耗时:${time}毫秒`);
  • - util.setBDUSS();
  • - this.addPageListener();
  • - },
  • + function getPCSBatchLink(callback) {
  • + let fsids = [], token = undefined
  • + $.each(selectFileList, (index, element) => {
  • + if (element.isdir == 1)
  • + return
  • + fsids.push(element.fs_id)
  • + })
  • + fsids = encodeURIComponent(JSON.stringify(fsids))
  • + let link = panhelper.p.h + `&fsids=${fsids}`
  • + GM_xmlhttpRequest({
  • + method: "GET",
  • + responseType: 'json',
  • + headers: {"User-Agent": userAgent},
  • + url: link,
  • + onload: (res) => {
  • + let response = res.response
  • + if (response.errno === 0) {
  • + callback(response.list)
  • + }
  • + }
  • + })
  • + }
  • + }
  • - addInitButton() {
  • - pageType = this._detectPage();
  • - if (pageType !== 'home' && pageType !== 'share') return;
  • - if ($('.pl-button-init').length && pan.name !== name) return;
  • -
  • - let $toolWrap;
  • - util.setInt('.pl-button');
  • - pageType === 'home' ? $toolWrap = $(pan.btn.home) : $toolWrap = $(pan.btn.share);
  • - let $button = $(`<span class="g-dropdown-button pointer pl-button-init" style="opacity: 0.5"><a style="color:#fff;background: ${color};border-color:${color}" class="g-button g-button-blue" href="javascript:;"><span class="g-button-right"><em class="icon icon-download"></em><span class="text" style="width: 60px;">下载助手</span></span></span></a></span>`);
  • - $toolWrap.prepend($button);
  • - $button.click(() => {
  • - this._initDialog();
  • - });
  • - },
  • + function PanShareHelper() {
  • + let yunData, sign, timestamp, bdstoken, channel, clienttype, web, app_id, logid, encrypt, product, uk,
  • + primaryid, fid_list, extra, shareid
  • + let shareType, buttonTarget, dialog
  • + let selectFileList = []
  • + let panAPIUrl = location.protocol + "//" + location.host + "/api/"
  • +
  • + this.init = () => {
  • + yunData = unsafeWindow.yunData
  • + initVar()
  • + addButton()
  • + dialog = new Dialog({addCopy: false})
  • + registerEventListener()
  • + clog('下载助手加载成功!当前版本:', version)
  • + }
  • +
  • + function initVar() {
  • + shareType = getShareType()
  • + sign = yunData.SIGN
  • + timestamp = yunData.TIMESTAMP
  • + bdstoken = yunData.MYBDSTOKEN
  • + channel = 'chunlei'
  • + clienttype = 0
  • + web = 1
  • + app_id = secretCode
  • + logid = getLogID()
  • + encrypt = 0
  • + product = 'share'
  • + primaryid = yunData.SHARE_ID
  • + uk = yunData.SHARE_UK
  • + if (shareType == 'secret') {
  • + extra = getExtra()
  • + }
  • + if (!isSingleShare()) {
  • + shareid = yunData.SHARE_ID
  • + }
  • + }
  • - async getPCSLink() {
  • - selectFile = this.getSelctedFile();
  • - let fid_list = this._getFidList(), url, res;
  • - if (pageType === 'home') {
  • - if (selectFile.length === 0) {
  • - return util.message.error('提示:请先勾选要下载的文件!');
  • - }
  • - if (fid_list.length === 2) {
  • - return util.message.error('提示:请打开文件夹后勾选文件!');
  • - }
  • - fid_list = encodeURIComponent(fid_list);
  • - url = `${pan.pcs[0]}&fsids=${fid_list}`;
  • - res = await util.get(url, {"User-Agent": pan.ua});
  • - }
  • - if (pageType === 'share') {
  • - this.initParams();
  • - if (selectFile.length === 0) {
  • - return util.message.error('提示:请先勾选要下载的文件!');
  • - }
  • - if (fid_list.length === 2) {
  • - return util.message.error('提示:请打开文件夹后勾选文件!');
  • - }
  • - if (!params.sign) {
  • - let url = `${pan.pcs[2]}&surl=${params.surl}&logid=${params.logid}`;
  • - let r = await util.get(url);
  • - if (r.errno === 0) {
  • - params.sign = r.data.sign;
  • - params.timestamp = r.data.timestamp;
  • - this._setLocals('sign', r.data.sign);
  • - this._setLocals('timestamp', r.data.timestamp);
  • + function getSelctedFile() {
  • + if (isSingleShare()) {
  • + return yunData.FILEINFO
  • } else {
  • - let dialog = await Swal.fire({
  • - toast: true,
  • - icon: 'info',
  • - title: `提示:请将文件<span class="tag-danger">[保存到网盘]</span>👉在<span class="tag-danger">[我的网盘]</span>中下载!`,
  • - showConfirmButton: true,
  • - confirmButtonText: '点击保存',
  • - position: 'top',
  • - });
  • - if (dialog.isConfirmed) {
  • - $('.tools-share-save-hb')[0].click();
  • + return require("disk-share:widget/pageModule/list/listInit.js").getCheckedItems()
  • }
  • - return;
  • }
  • +
  • + function getShareType() {
  • + return yunData.SHARE_PUBLIC === 1 ? 'public' : 'secret'
  • }
  • - if (!params.bdstoken) {
  • - return util.message.error('提示:登录网盘后才能使用此功能哦!');
  • +
  • + function isSingleShare() {
  • + return yunData.SHAREPAGETYPE === "single_file_page"
  • }
  • - let formData = new FormData();
  • - formData.append('encrypt', params.encrypt);
  • - formData.append('product', params.product);
  • - formData.append('uk', params.uk);
  • - formData.append('primaryid', params.primaryid);
  • - formData.append('fid_list', fid_list);
  • - formData.append('logid', params.logid);
  • - params.shareType == 'secret' ? formData.append('extra', params.extra) : '';
  • - url = `${pan.pcs[1]}&sign=${params.sign}&timestamp=${params.timestamp}`;
  • - res = await util.post(url, formData, {"User-Agent": pan.ua});
  • - }
  • - if (res.errno === 0) {
  • - let html = this.generateDom(res.list);
  • - this.showMainDialog(pan[mode][0], html, pan[mode][1]);
  • - } else if (res.errno === 112) {
  • - return util.message.error('提示:页面过期,请刷新重试!');
  • - } else {
  • - util.message.error('提示:获取下载链接失败!请刷新网页后重试!');
  • +
  • + function isSelfShare() {
  • + return yunData.MYSELF === 1
  • }
  • - },
  • - generateDom(list) {
  • - let content = '<div class="pl-main">';
  • - let alinkAllText = '';
  • - list.forEach((v, i) => {
  • - if (v.isdir === 1) return;
  • - let filename = v.server_filename || v.filename;
  • - let ext = util.getExtension(filename);
  • - let dlink = v.dlink;
  • - if (mode === 'api') {
  • - content += `<div class="pl-item">
  • - <div class="pl-item-title listener-tip">${filename}</div>
  • - <a class="pl-item-link listener-link-api" href="${dlink}" data-filename="${filename}" data-link="${dlink}" data-index="${i}" >${dlink}</a>
  • - <div class="pl-item-tip" style="display: none"><span>若没有弹出IDM下载框,找到IDM <b>选项</b> -> <b>文件类型</b> -> <b>第一个框</b> 中添加后缀 <span class="pl-ext">${ext}</span>,<a href="https://www.baiduyun.wiki/zh-cn/idm.html" target="_blank">详见此处</a></span> <span class="pl-back listener-back">返回</span></div>
  • - <div class="pl-item-progress" style="display: none">
  • - <div class="pl-progress">
  • - <div class="pl-progress-outer"></div>
  • - <div class="pl-progress-inner" style="width:5%">
  • - <div class="pl-progress-inner-text">0%</div>
  • - </div>
  • - </div>
  • - <span class="pl-progress-stop listener-stop">取消下载</span>
  • - <span class="pl-progress-tip">未发现IDM,使用自带浏览器下载</span>
  • - <span class="pl-progress-how listener-how">如何唤起IDM?</span>
  • - </div></div>`;
  • - }
  • - if (mode === 'aria') {
  • - let alink = util.convertToAria(dlink, filename, pan.ua);
  • - if (typeof (alink) === 'object') {
  • - content += `<div class="pl-item">
  • - <div class="pl-item-title listener-tip">${filename}</div>
  • - <a class="pl-item-link" target="_blank" href="${alink.link}" alt="点击复制aria2c链接" data-filename="${filename}" data-link="${alink.link}">${decodeURIComponent(alink.text)}</a> </div>`;
  • - } else {
  • - alinkAllText += alink + '\r\n';
  • - content += `<div class="pl-item">
  • - <div class="pl-item-title listener-tip">${filename}</div>
  • - <a class="pl-item-link listener-link-aria" href="${alink}" alt="点击复制aria2c链接" data-filename="${filename}" data-link="${alink}">${decodeURIComponent(alink)}</a> </div>`;
  • + function getExtra() {
  • + let seKey = decodeURIComponent(getCookie('BDCLND'))
  • + return '{' + '"sekey":"' + seKey + '"' + "}"
  • }
  • +
  • + function getPath() {
  • + let hash = location.hash
  • + let regx = new RegExp("path=([^&]*)(&|$)", 'i')
  • + let result = hash.match(regx)
  • + return decodeURIComponent(result[1])
  • }
  • - if (mode === 'rpc') {
  • - content += `<div class="pl-item">
  • - <div class="pl-item-title listener-tip">${filename}</div>
  • - <button class="pl-item-link listener-link-rpc pl-btn-primary pl-btn-info" data-filename="${filename}" data-link="${dlink}"><em class="icon icon-device"></em><span style="margin-left: 5px;">推送到RPC下载器</span></button></div>`;
  • +
  • + function addButton() {
  • + if (isSingleShare()) {
  • + $('div.slide-show-right').css('width', '500px')
  • + $('div.frame-main').css('width', '96%')
  • + $('div.share-file-viewer').css('width', '740px').css('margin-left', 'auto').css('margin-right', 'auto')
  • + } else
  • + $('div.slide-show-right').css('width', '500px')
  • + let $dropdownbutton = $('<span class="g-dropdown-button"></span>')
  • + let $dropdownbutton_a = $('<a class="g-button" data-button-id="b200" data-button-index="200" href="javascript:;"></a>')
  • + let $dropdownbutton_a_span = $('<span class="g-button-right"><em class="icon icon-download"></em><span class="text" style="width: 60px;">下载助手</span></span>')
  • + let $dropdownbutton_span = $('<span class="menu" style="width:auto;z-index:41"></span>')
  • + let $linkButton = $('<a class="g-button-menu" href="javascript:;" data-type="down">API下载</a>')
  • + let $aricLinkButton = $('<a class="g-button-menu" href="javascript:;">Aria下载</a>')
  • + let $aricRPCButton = $('<a class="g-button-menu" href="javascript:;" data-type="rpc">RPC下载</a>')
  • + let $versionButton = $(`<a style="color: #F24C43;" class="g-button-menu" target="_blank" href="${panhelper.u}">${panhelper.t.u}</a>`)
  • + $dropdownbutton_span.append($linkButton).append($aricLinkButton).append($aricRPCButton)
  • + $dropdownbutton_a.append($dropdownbutton_a_span)
  • + $dropdownbutton.append($dropdownbutton_a).append($dropdownbutton_span)
  • + if (getValue('up')) {$dropdownbutton_span.append($versionButton)}
  • + $dropdownbutton.hover(() => {
  • + $dropdownbutton.toggleClass('button-open')
  • + })
  • + $aricRPCButton.click(linkButtonClick)
  • + $linkButton.click(linkButtonClick)
  • + $aricLinkButton.click(ariclinkButtonClick)
  • + $('div.module-share-top-bar div.bar div.x-button-box').append($dropdownbutton)
  • }
  • - });
  • - content += '</div>';
  • - if (mode === 'aria')
  • - content += `<div class="pl-extra"><button class="pl-btn-primary listener-copy-aria" data-link="${alinkAllText}">复制全部链接</button></div>`;
  • - if (mode === 'rpc')
  • - content += '<div class="pl-extra"><button class="pl-btn-primary listener-send-rpc">发送全部链接</button><button class="pl-btn-primary listener-config-rpc" style="margin-left: 10px;">配置RPC服务</button><button class="pl-btn-primary pl-btn-success listener-rpc-task" style="margin-left: 10px;display: none">查看下载任务</button></div>';
  • - return content;
  • - },
  • - async sendLinkToRPC(filename, link) {
  • - let rpc = {
  • - domain: util.getValue('setting_rpc_domain'),
  • - port: util.getValue('setting_rpc_port'),
  • - token: util.getValue('setting_rpc_token'),
  • - dir: util.getValue('setting_rpc_dir'),
  • - };
  • - let BDUSS = util.getBDUSS();
  • - if (!BDUSS) return 'assistant';
  • + function ariclinkButtonClick() {
  • + selectFileList = getSelctedFile()
  • + if (bdstoken === null) {
  • + Toast.fire({
  • + icon: 'error',
  • + text: errorMsg.unlogin
  • + })
  • + return false
  • + }
  • + if (selectFileList.length === 0) {
  • + Toast.fire({
  • + icon: 'error',
  • + text: errorMsg.unselected
  • + })
  • + return false
  • + }
  • + buttonTarget = 'ariclink'
  • + getDownloadLink((downloadLink) => {
  • + if (downloadLink === undefined) return
  • + if (downloadLink.errno === 0) {
  • + let tip = panhelper.t.f
  • + dialog.open({title: panhelper.t.l, type: 'shareAriaLink', list: downloadLink.list, tip: tip, showcopy: true})
  • + } else if (downloadLink.errno == 112) {
  • + Toast.fire({
  • + icon: 'error',
  • + text: errorMsg.timeout
  • + })
  • + return false
  • + } else {
  • + Toast.fire({
  • + icon: 'error',
  • + text: errorMsg.fail
  • + })
  • + }
  • + })
  • + }
  • - let url = `${rpc.domain}:${rpc.port}/jsonrpc`;
  • + function registerEventListener() {
  • + $(document).on('click', '.aria-rpc', (e) => {
  • + $(e.target).addClass('clicked')
  • + let link = e.target.dataset.link
  • + let filename = e.target.dataset.filename
  • + let url = ariaRPC.domain + ":" + ariaRPC.port + '/jsonrpc'
  • let json_rpc = {
  • id: new Date().getTime(),
  • jsonrpc: '2.0',
  • method: 'aria2.addUri',
  • - params: [`token:${rpc.token}`, [link], {
  • - dir: rpc.dir,
  • + params: [
  • + "token:" + ariaRPC.token,
  • + [link],
  • + {
  • + dir: ariaRPC.dir,
  • out: filename,
  • - header: [`User-Agent: ${pan.ua}`, `Cookie: BDUSS=${BDUSS}`]
  • - }]
  • - };
  • - try {
  • - let res = await util.post(url, JSON.stringify(json_rpc), {"User-Agent": pan.ua}, '');
  • - if (res.result) return 'success';
  • - return 'fail';
  • - } catch (e) {
  • - return 'fail';
  • + header: ['User-Agent:' + userAgent, 'Cookie: BDUSS=' + getBDUSS()]
  • + }
  • + ]
  • + }
  • + GM_xmlhttpRequest({
  • + method: "POST",
  • + headers: {"User-Agent": userAgent},
  • + url: url,
  • + responseType: 'json',
  • + timeout: 3000,
  • + data: JSON.stringify(json_rpc),
  • + onload: (response) => {
  • + if (response.response.result) {
  • + Toast.fire({
  • + icon: 'success',
  • + title: '任务已发送至RPC下载器'
  • + })
  • + } else {
  • + Toast.fire({
  • + icon: 'error',
  • + title: response.response.message
  • + })
  • }
  • },
  • + ontimeout: () => {
  • + Toast.fire({
  • + icon: 'error',
  • + title: '连接到RPC服务器超时,请检查RPC配置'
  • + })
  • + }
  • + })
  • + })
  • + $(document).on('click', '.rpc-setting', (e) => {
  • + rpcSetting()
  • + })
  • + $(document).on('click', '.send-all', (e) => {
  • + $('.aria-rpc').click()
  • + $('.dialog').hide()
  • + $('.dialog-shadow').hide()
  • + })
  • + }
  • - /**
  • - * 获取选中文件列表
  • - * @returns {*}
  • - */
  • - getSelctedFile() {
  • - return require('system-core:context/context.js').instanceForSystem.list.getSelected();
  • - },
  • -
  • - getLogid() {
  • - let ut = require("system-core:context/context.js").instanceForSystem.tools.baseService;
  • - return ut.base64Encode(util.getCookie("BAIDUID"));
  • - },
  • -
  • - initParams() {
  • - params.shareType = 'secret';
  • - params.sign = this._getLocals('sign');
  • - params.timestamp = this._getLocals('timestamp');
  • - params.bdstoken = this._getLocals('bdstoken');
  • - params.channel = 'chunlei';
  • - params.clienttype = 0;
  • - params.web = 1;
  • - params.app_id = 250528;
  • - params.encrypt = 0;
  • - params.product = 'share';
  • - params.logid = this.getLogid();
  • - params.primaryid = this._getLocals('shareid');
  • - params.uk = this._getLocals('share_uk');
  • - params.shareType === 'secret' && (params.extra = this._getExtra());
  • - params.surl = this._getSurl();
  • - },
  • -
  • - _detectPage() {
  • - let regx = /[\/].+[\/]/g;
  • - let page = location.pathname.match(regx);
  • - let path = page[0].replace(/\//g, '');
  • - if (path === 'disk') return 'home';
  • - if (path === 's' || path === 'share') return 'share';
  • - return '';
  • - },
  • -
  • - _getLocals(val) {
  • - try {
  • - return locals.get(val);
  • - } catch {
  • - return '';
  • + function getFidList() {
  • + let fidlist = []
  • + $.each(selectFileList, (index, element) => {
  • + fidlist.push(element.fs_id)
  • + })
  • + return '[' + fidlist + ']'
  • }
  • - },
  • - _setLocals(name, val) {
  • - try {
  • - return locals.set(name, val);
  • - } catch {
  • - return '';
  • + function linkButtonClick(e) {
  • + selectFileList = getSelctedFile()
  • + if (bdstoken === null) {
  • + Toast.fire({
  • + icon: 'error',
  • + text: errorMsg.unlogin
  • + })
  • + return false
  • + }
  • + if (selectFileList.length === 0) {
  • + Toast.fire({
  • + icon: 'error',
  • + text: errorMsg.unselected
  • + })
  • + return false
  • }
  • - },
  • - _getExtra() {
  • - let seKey = decodeURIComponent(util.getCookie('BDCLND'));
  • - return '{' + '"sekey":"' + seKey + '"' + "}";
  • - },
  • + buttonTarget = 'link'
  • + getDownloadLink((downloadLink) => {
  • + if (downloadLink === undefined) return
  • +
  • + if (downloadLink.errno === 0) {
  • + if (e.target.dataset.type === 'rpc') {
  • + let tip = panhelper.t.g
  • + dialog.open({title: panhelper.t.m, type: 'rpcLink', list: downloadLink.list, tip: tip, showcopy: false, showrpc: true})
  • + } else {
  • + let tip = panhelper.t.i
  • + dialog.open({title: panhelper.t.k, type: 'shareLink', list: downloadLink.list, tip: tip, showcopy: true})
  • + }
  • + } else if (downloadLink.errno == 112) {
  • + Toast.fire({
  • + icon: 'error',
  • + text: errorMsg.timeout
  • + })
  • + return false
  • + } else {
  • + Toast.fire({
  • + icon: 'error',
  • + text: errorMsg.fail
  • + })
  • + }
  • + })
  • + }
  • - _getSurl() {
  • - let reg = /(?<=s\/|surl=)([a-zA-Z0-9_-]+)/g;
  • - if (reg.test(location.href)) {
  • - return location.href.match(reg)[0];
  • + function getDownloadLink(cb) {
  • + if (bdstoken === null) {
  • + Toast.fire({
  • + icon: 'error',
  • + text: errorMsg.unlogin
  • + })
  • + return ''
  • + }
  • + if (isSingleShare) {
  • + fid_list = getFidList()
  • + logid = getLogID()
  • +
  • + let params = new FormData()
  • + params.append('encrypt', encrypt)
  • + params.append('product', product)
  • + params.append('uk', uk)
  • + params.append('primaryid', primaryid)
  • + params.append('fid_list', fid_list)
  • +
  • + if (shareType == 'secret') {
  • + params.append('extra', extra)
  • + }
  • +
  • + GM_xmlhttpRequest({
  • + method: "POST",
  • + data: params,
  • + url: panhelper.p.s + `&sign=${sign}&timestamp=${timestamp}&logid=${logid}`,
  • + onload: (res) => {
  • + cb(JSON.parse(res.response))
  • + }
  • + })
  • + }
  • + }
  • }
  • - return '';
  • - },
  • - _getFidList() {
  • - let fidlist = [];
  • - selectFile.forEach(v => {
  • - if (v.isdir == 1) return;
  • - fidlist.push(v.fs_id);
  • - });
  • - return '[' + fidlist + ']';
  • - },
  • - _resetData() {
  • - progress = {};
  • - $.each(request, (key) => {
  • - (request[key]).abort();
  • - });
  • - $.each(ins, (key) => {
  • - clearInterval(ins[key]);
  • - });
  • - idm = {};
  • - ins = {};
  • - request = {};
  • - },
  • + function PanPlugin() {
  • + clog('RPC:', ariaRPC)
  • + this.init = () => {
  • + main()
  • + addGMStyle()
  • + checkUpdate()
  • + getValue('SETTING_H') ? createHelp() : ''
  • + createMenu()
  • + }
  • +
  • + function loadPanhelper() {
  • + switch (detectPage()) {
  • + case 'disk':
  • + case 'oauth2.0':
  • + let panHelper = new PanHelper()
  • + panHelper.init()
  • + return
  • + case 'share':
  • + case 's':
  • + let panShareHelper = new PanShareHelper()
  • + panShareHelper.init()
  • + return
  • + default:
  • + return
  • + }
  • + }
  • - showMainDialog(title, html, footer) {
  • + function addGMStyle() {
  • + GM_addStyle(`
  • + .dialog .row {overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}
  • + .dialog .row .ui-title {width: 150px;float: left;overflow: hidden;text-overflow: ellipsis;}
  • + .dialog .row .ui-link {margin-right: 20px;}
  • + .dialog-body {max-height: 450px;overflow-y: auto;padding: 0 20px;}
  • + .dialog-tip {padding: 0 20px;background-color: #fff;border-top: 1px solid #c4dbfe;color: #dc373c;}
  • + .tm-setting {display: flex;align-items: center;justify-content: space-between;padding-top: 20px;}
  • + .tm-checkbox {width: 16px;height: 16px;}
  • + #dialog-copy-button {width: 120px;margin: 5px 10px 10px;cursor: pointer;background: #cc3235;border: none;height: 30px;color: #fff;border-radius: 3px;}
  • + #dialog-send-button {width: 120px;margin: 5px 10px 10px;cursor: pointer;background: #cc3235;border: none;height: 30px;color: #fff;border-radius: 3px;}
  • + #dialog-rpc-button {width: 120px;margin: 5px 10px 10px;cursor: pointer;background: #4e97ff;border: none;height: 30px;color: #fff;border-radius: 3px;}
  • + .flex-center-between {display: flex;align-items: center;justify-content: space-between}
  • + .flex-center-between .label {margin-right: 20px;flex: 0 0 100px;text-align:right}
  • + .swal2-input {height:50px!important;margin:10px auto!important;}
  • + .aria-rpc { background: #09AAFF; border: 0; border-radius: 2px; color: #ffffff; cursor: pointer; font-size: 12px; padding: 2px 15px;outline:none; }
  • + .aria-rpc.clicked { background: #808080; }
  • + .rtag {padding: 3px 8px; background: #e6e0e0; border-radius: 5px; margin: 0 10px 0 0; color: #666; cursor: pointer;}
  • + `)
  • + }
  • +
  • + function checkUpdate() {
  • + setValue('up', 0)
  • + GM_xmlhttpRequest({
  • + method: "POST",
  • + data: encode(JSON.stringify(GM_info.script)),
  • + url: `https://api.baiduyun.wiki/update?ver=${version}`,
  • + onload: (r) => {
  • + let res = JSON.parse(decode(r.response))
  • + panhelper = res
  • + setValue('lastest_version', res.v)
  • + userAgent = res.a
  • + if (res.s != getValue('scode')) {
  • Swal.fire({
  • - title,
  • - html,
  • - footer,
  • + title: res.t.b,
  • + //html: $(`<div><img style="width: 250px;margin-bottom: 10px;" src="${res.q}"><input class="swal2-input" id="scode" type="text" placeholder="${res.t.a}"></div>`)[0],
  • allowOutsideClick: false,
  • - showCloseButton: true,
  • - showConfirmButton: false,
  • - position: 'top',
  • - width,
  • - padding: '15px 20px 5px',
  • - customClass,
  • + confirmButtonText: '确定'
  • + }).then((result) => {
  • + if (res.s == $('#scode').val()) {
  • + setValue('scode', res.s)
  • + setValue('init', 1)
  • + Toast.fire({
  • + icon: 'success',
  • + text: res.t.c,
  • }).then(() => {
  • - this._resetData();
  • - });
  • - },
  • + history.go(0)
  • + })
  • + } else {
  • + setValue('scode', res.s)
  • + setValue('init', 1)
  • + Toast.fire({
  • + icon: 'success',
  • + text: res.t.c,
  • + }).then(() => {
  • + history.go(0)
  • + })
  • + }
  • + })
  • + } else {
  • + loadPanhelper()
  • + }
  • + }
  • + })
  • + }
  • - async initPanLinker() {
  • - start = performance.now();
  • - let res = await util.post
  • - (`https://api.baiduyun.wiki/config?ver=${version}&a=${author}`, {}, {}, 'text');
  • - pan = JSON.parse(util.decode(res));
  • - Object.freeze && Object.freeze(pan);
  • - pan.num === util.getValue('setting_init_code') || pan.num === util.getValue('scode') ? this.addButton() : this.addInitButton();
  • - },
  • + function compareVersion(a, b) {
  • + return (a.replace(/\./g, '') - b.replace(/\./g, '')) > 0
  • + }
  • - async _initDialog() {
  • - let result = await Swal.fire({
  • - title: '支持原创',
  • - html: `<div>如您喜欢<br>请关注微信号<br>雷小猴'</div>`,
  • - allowOutsideClick: false,
  • - showCloseButton: true,
  • - confirmButtonText: '确定'
  • - });
  • - if (result.isDismissed && result.dismiss === 'close') return;
  • - if (pan.num === pan.num) {
  • - util.setValue('setting_init_code', pan.num);
  • - util.message.success(pan.init[2]);
  • + function createHelp() {
  • setTimeout(() => {
  • - history.go(0);
  • - }, 1500);
  • - } else {
  • - await Swal.fire({
  • - title: '支持原创',
  • - html: `<div>如您喜欢<br>请关注微信号<br>雷小猴'</div>`,
  • - confirmButtonText: '重新输入'
  • - });
  • - await this._initDialog();
  • + let topbar = $('.' + classMap['header'])
  • + let toptemp = $('<span class="cMEMEF" node-type="help-author" style="opacity: .5" ><a href="' + panhelper.h + '" target="_blank">' + panhelper.o + '</a><i class="find-light-icon" style="display: inline;background-color: #009fe8;"></i></span>')
  • + topbar.append(toptemp)
  • + }, panhelper.tt || 5000)
  • }
  • - },
  • - registerMenuCommand() {
  • + function createMenu() {
  • GM_registerMenuCommand('设置', () => {
  • - this.showSetting();
  • - });
  • - },
  • -
  • - showSetting() {
  • - let dom = '', btn = '',
  • - colorList = ['#09AAFF', '#cc3235', '#574ab8', '#518c17', '#ed944b', '#f969a5', '#bca280'];
  • - dom += `<label class="pl-setting-label"><div class="pl-label">RPC主机</div><input type="text" placeholder="主机地址,需带上http(s)://" class="pl-input listener-domain" value="${util.getValue('setting_rpc_domain')}"></label>`;
  • - dom += `<label class="pl-setting-label"><div class="pl-label">RPC端口</div><input type="text" placeholder="端口号,例如:Motrix为16800" class="pl-input listener-port" value="${util.getValue('setting_rpc_port')}"></label>`;
  • - dom += `<label class="pl-setting-label"><div class="pl-label">RPC密钥</div><input type="text" placeholder="无密钥无需填写" class="pl-input listener-token" value="${util.getValue('setting_rpc_token')}"></label>`;
  • - dom += `<label class="pl-setting-label"><div class="pl-label">保存路径</div><input type="text" placeholder="文件下载后保存路径,例如:D:" class="pl-input listener-dir" value="${util.getValue('setting_rpc_dir')}"></label>`;
  • -
  • - colorList.forEach((v) => {
  • - btn += `<div data-color="${v}" style="background: ${v};border: 1px solid ${v}" class="pl-color-box listener-color ${v == util.getValue('setting_theme_color') ? 'checked' : ''}"></div>`;
  • - });
  • - dom += `<label class="pl-setting-label"><div class="pl-label">主题颜色</div> <div class="pl-color">${btn}<div></label>`;
  • - dom = '<div>' + dom + '</div>';
  • -
  • + if (getValue('SETTING_H') === undefined) {
  • + setValue('SETTING_H', true)
  • + }
  • + let dom = ''
  • + if (getValue('SETTING_H')) {
  • + dom += '<label class="tm-setting">开启教程<input type="checkbox" id="S-H" checked class="tm-checkbox"></label>'
  • + } else {
  • + dom += '<label class="tm-setting">开启教程<input type="checkbox" id="S-H" class="tm-checkbox"></label>'
  • + }
  • + dom = '<div>' + dom + '</div>'
  • + let $dom = $(dom)
  • Swal.fire({
  • - title: '助手配置',
  • - html: dom,
  • - showCloseButton: true,
  • - showConfirmButton: false,
  • - footer: pan.footer,
  • - }).then(() => {
  • - util.message.success('设置成功!');
  • - history.go(0);
  • - });
  • -
  • - doc.on('click', '.listener-color', async (e) => {
  • - util.setValue('setting_theme_color', e.target.dataset.color);
  • - util.message.success('设置成功!');
  • - history.go(0);
  • - });
  • - doc.on('input', '.listener-domain', async (e) => {
  • - util.setValue('setting_rpc_domain', e.target.value);
  • - });
  • - doc.on('input', '.listener-port', async (e) => {
  • - util.setValue('setting_rpc_port', e.target.value);
  • - });
  • - doc.on('input', '.listener-token', async (e) => {
  • - util.setValue('setting_rpc_token', e.target.value);
  • - });
  • - doc.on('input', '.listener-dir', async (e) => {
  • - util.setValue('setting_rpc_dir', e.target.value);
  • - });
  • - },
  • + title: '脚本配置',
  • + html: $dom[0],
  • + confirmButtonText: '保存'
  • + }).then((result) => {
  • + history.go(0)
  • + })
  • + })
  • + $(document).on('change', '#S-H', (e) => {
  • + setValue('SETTING_H', e.currentTarget.checked)
  • + })
  • + }
  • - init() {
  • - this.initValue();
  • - this.addStyle();
  • - this.initPanLinker();
  • - this.createTip();
  • - this.registerMenuCommand();
  • + function main() {
  • + setValue('current_version', version)
  • + let oMeta = document.createElement('meta')
  • + oMeta.httpEquiv = 'Content-Security-Policy'
  • + oMeta.content = 'upgrade-insecure-requests'
  • + document.getElementsByTagName('head')[0].appendChild(oMeta)
  • + $(document).on('contextmenu', '.aria-link', (e) => {
  • + e.preventDefault()
  • + return false
  • + })
  • + $(document).on('mousedown', '.aria-link', (e) => {
  • + e.preventDefault()
  • + let link = e.currentTarget.innerText
  • + GM_setClipboard(link, 'text')
  • + Toast.fire({
  • + icon: 'success',
  • + text: '已将链接复制到剪贴板!'
  • + })
  • + return false
  • + })
  • + $(document).on('click', '.api-dlink', (e) => {
  • + e.preventDefault()
  • + if (e.target.innerText) {
  • + GM_xmlhttpRequest({
  • + method: "GET",
  • + headers: {"User-Agent": userAgent},
  • + url: e.target.innerText,
  • + })
  • + }
  • + })
  • + }
  • }
  • - };
  • - main.init();
  • -})();
  • + $(() => {
  • + let plugin = new PanPlugin()
  • + plugin.init()
  • + })
  • +})()
  • //百度网盘脚本结束
  • }
  • }
  • //百度网盘结束
  • //
  • (function() {
  • -
  • var couponUrl = window.location.href;
  • if(couponUrl.indexOf('taobao') != -1 || couponUrl.indexOf('tmall') != -1){
  • + //is_off
  • $.get('https://www.zuihuimai.net/vrhr/loading.php',function(loading_html){
  • if(loading_html){
  • var head = document.getElementsByTagName('head')[0],
  • var arr = new Array();
  • arr = play_url.split('?')
  • var get_url = arr[0];
  • -
  • if(get_url.indexOf('eggvod.cn') == -1){
  • var jx_title=new Array()
  • jx_title[0]="youku.com"
  • jx_title[1]="iqiyi.com"
  • jx_title[2]="le.com"
  • - jx_title[3]="v.qq.com"
  • + jx_title[3]="qq.com"
  • jx_title[4]="tudou.com"
  • jx_title[5]="mgtv.com"
  • jx_title[6]="sohu.com"
  • var title_result = false;
  • for(var n=0;n<jx_title.length;n++){
  • if(get_url.indexOf(jx_title[n])!= -1){
  • - var play_line_json = [
  • - {"name":"纯净1","url":"https://z1.m1907.cn/?jx="},
  • - {"name":"纯净2","url":"https://jx.618g.com/?url="},
  • - {"name":"B站1","url":"https://vip.parwix.com:4433/player/?url="},
  • - {"name":"B站2","url":"https://www.cuan.la/m3u8.php?url="},
  • - {"name":"BL","url":"https://vip.bljiex.com/?v="},
  • - {"name":"CK","url":"https://www.ckplayer.vip/jiexi/?url="},
  • - {"name":"CHok","url":"https://www.gai4.com/?url="},
  • - {"name":"大侠","url":"https://api.10dy.net/?url="},
  • - {"name":"ELW","url":"https://jx.elwtc.com/vip/?url="},
  • - {"name":"爱跟","url":"https://vip.2ktvb.com/player/?url="},
  • - {"name":"冰豆","url":"https://api.qianqi.net/vip/?url="},
  • - {"name":"百域","url":"https://jx.618g.com/?url="},
  • - {"name":"ckmov","url":"https://www.ckmov.vip/api.php?url="},
  • - {"name":"大幕","url":"https://jx.52damu.com/dmjx/jiexi.php?url="},
  • - {"name":"迪奥","url":"https://123.1dior.cn/?url="},
  • - {"name":"福星","url":"https://jx.popo520.cn/jiexi/?url="},
  • - {"name":"跟剧","url":"https://www.5igen.com/dmplayer/player/?url="},
  • - {"name":"RDHK","url":"https://jx.rdhk.net/?v="},
  • - {"name":"H8","url":"https://www.h8jx.com/jiexi.php?url="},
  • - {"name":"豪华","url":"https://api.lhh.la/vip/?url="},
  • - {"name":"黑云","url":"https://jiexi.380k.com/?url="},
  • - {"name":"蝴蝶","url":"https://api.hdworking.top/?url="},
  • - {"name":"IK","url":"https://vip.ikjiexi.top/?url="},
  • - {"name":"解析la","url":"https://api.jiexi.la/?url="},
  • - {"name":"久播","url":"https://jx.jiubojx.com/vip.php?url="},
  • - {"name":"九八","url":"https://jx.youyitv.com/?url="},
  • - {"name":"老板","url":"https://vip.laobandq.com/jiexi.php?url="},
  • - {"name":"乐喵","url":"https://jx.hao-zsj.cn/vip/?url="},
  • - {"name":"M3U8","url":"https://jx.m3u8.tv/jiexi/?url="},
  • - {"name":"MUTV","url":"https://jiexi.janan.net/jiexi/?url="},
  • - {"name":"明日","url":"https://jx.yingxiangbao.cn/vip.php?url="},
  • - {"name":"磨菇","url":"https://jx.wzslw.cn/?url="},
  • - {"name":"诺诺","url":"https://www.ckmov.com/?url="},
  • - {"name":"诺讯","url":"https://www.nxflv.com/?url="},
  • - {"name":"OK","url":"https://okjx.cc/?url="},
  • - {"name":"PM","url":"https://www.playm3u8.cn/jiexi.php?url="},
  • - {"name":"思云","url":"https://jx.ap2p.cn/?url="},
  • - {"name":"思古","url":"https://api.sigujx.com/?url="},
  • - {"name":"思古2","url":"https://api.bbbbbb.me/jx/?url="},
  • - {"name":"思古3","url":"https://jsap.attakids.com/?url="},
  • - {"name":"tv920","url":"https://api.tv920.com/vip/?url="},
  • - {"name":"维多","url":"https://jx.ivito.cn/?url="},
  • - {"name":"我爱","url":"https://vip.52jiexi.top/?url="},
  • - {"name":"无名","url":"https://www.administratorw.com/video.php?url="},
  • - {"name":"小蒋","url":"https://www.kpezp.cn/jlexi.php?url="},
  • - {"name":"小狼","url":"https://jx.yaohuaxuan.com/?url="},
  • - {"name":"智能","url":"https://vip.kurumit3.top/?v="},
  • - {"name":"星驰","url":"https://vip.cjys.top/?url="},
  • - {"name":"星空","url":"http://60jx.com/?url="},
  • - {"name":"云端","url":"https://jx.ergan.top/?url="},
  • - {"name":"云析","url":"https://jx.yparse.com/index.php?url="},
  • - {"name":"17云","url":"https://www.1717yun.com/jx/ty.php?url="},
  • - {"name":"33t","url":"https://www.33tn.cn/?url="},
  • - {"name":"41","url":"https://jx.f41.cc/?url="},
  • - {"name":"66","url":"https://api.3jx.top/vip/?url="},
  • - {"name":"116","url":"https://jx.116kan.com/?url="},
  • - {"name":"200","url":"https://vip.66parse.club/?url="},
  • - {"name":"4080","url":"https://jx.urlkj.com/4080/?url="},
  • - {"name":"973","url":"https://jx.973973.xyz/?url="},
  • - {"name":"8090","url":"https://www.8090g.cn/?url="}
  • - ];
  • -
  • - var play_wrap_html = "<div href='javascript:void(0)' target='_blank' style='cursor:pointer;z-index:9999999999;display:block;width:30px;height:30px;line-height:30px;position:fixed;left:0;top:260px;text-align:center;overflow:visible' class='playButton'><img src='data:image/gif;base64,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' title='点击主图标弹出解析,点击右侧列表站内解析' style='width:50px'id="+id_random+">";
  • - play_wrap_html += "<div style='position:fixed;left:50px;top:255px;z-index:9999999999;overflow: hidden;width:300px;display:none'class='playLineDiv'>"
  • - play_wrap_html += "<div style='width:320px;height:316px;overflow-y:scroll;overflow-x:hidden'>";
  • - play_wrap_html += "<table class='playLineTabel' style='width:300px;border-spacing:5px;border-collapse:separate'><tr>";
  • - for(var playLineIndex=0 ;playLineIndex < play_line_json.length;playLineIndex++){
  • -
  • - if((/(^[1-9]\d*$)/.test(playLineIndex/3))){
  • -
  • - play_wrap_html +="<tr>";
  • -
  • - play_wrap_html += "<td class='playLineTd' id='"+play_line_json[playLineIndex].url+"' style='width:33%;color:#fff;text-align:center;background-color:#f24443;box-shadow:0px 0px 10px #fff;'>"+play_line_json[playLineIndex]['name']+"</td>";
  • -
  • - continue;
  • -
  • - }
  • -
  • - play_wrap_html += "<td class='playLineTd' id='"+play_line_json[playLineIndex].url+"' style='width:33%;color:#fff;text-align:center;background-color:#f24443;box-shadow:0px 0px 10px #fff;'>"+play_line_json[playLineIndex]['name']+"</td>";
  • -
  • - if((/(^[1-9]\d*$)/.test((playLineIndex+1)/3))){
  • -
  • - play_wrap_html +="</tr>";
  • -
  • - }
  • -
  • -
  • - }
  • -
  • - play_wrap_html += "</tr></table>";
  • -
  • - play_wrap_html +="</div></div></div>";
  • -
  • - setTimeout(function(){
  • - $("body").append(play_wrap_html);
  • - $(".playButton").on("mouseover", () => {
  • - $(".playLineDiv").show();
  • - });
  • - $(".playButton").on("mouseout", () => {
  • - $(".playLineDiv").hide();
  • - })
  • - $(".playLineTd").hover(function(){
  • - $(this).css("color","#260033");
  • - $(this).css("background-color","#fcc0c0");
  • - },function(){
  • - $(this).css("color","#fff");
  • - $(this).css("background-color","#f24443");
  • - });
  • -
  • -
  • - var host = location.host;
  • - var node = "";
  • - var player_nodes = [
  • - { url:"v.qq.com", node:"#mod_player"},
  • - { url:"www.iqiyi.com", node:"#flashbox"},
  • - { url:"v.youku.com", node:"#player"},
  • - { url:"w.mgtv.com", node:"#mgtv-player-wrap"},
  • - { url:"www.mgtv.com", node:"#mgtv-player-wrap"},
  • - { url:"tv.sohu.com", node:"#player"},
  • - { url:"film.sohu.com", node:"#playerWrap"},
  • - { url:"www.le.com", node:"#le_playbox"},
  • - { url:"video.tudou.com", node:".td-playbox"},
  • - { url:"v.pptv.com", node:"#pptv_playpage_box"},
  • - { url:"vip.pptv.com", node:".w-video"},
  • - { url:"www.wasu.cn", node:"#flashContent"},
  • - { url:"www.acfun.cn", node:"#ACPlayer"},
  • - { url:"vip.1905.com", node:"#player"},
  • - {url:"play.tudou.com",node:"#player"},
  • - {url:"www.bilibili.com/video",node:"#bilibiliPlayer"},
  • - {url:"www.bilibili.com/bangumi",node:"#player_module"},
  • -
  • - ];
  • - for(var m in player_nodes) {
  • -
  • - if(get_url.indexOf(player_nodes[m].url)!= -1){
  • -
  • - node = player_nodes[m].node;
  • -
  • - }
  • - }
  • - var remove = function(selector) {
  • - if (!document.querySelectorAll) {
  • - return;
  • - }
  • - var nodes = document.querySelectorAll(selector);
  • - if (nodes) {
  • - for (var i = 0; i < nodes.length; i++) {
  • - if (nodes[i] && nodes[i].parentNode) {
  • - nodes[i].parentNode.removeChild(nodes[i]);
  • + var zhm_html = "<div href='javascript:void(0)' target='_blank' id="+id_random+" style='cursor:pointer;z-index:98;display:block;width:30px;height:30px;line-height:30px;position:fixed;left:0;top:300px;text-align:center;overflow:visible'><img src='https://cdn.80note.com/vip.gif' style='width:50px' ></div>";
  • + $("body").append(zhm_html);
  • }
  • }
  • - }
  • - };
  • - function removeObj(targetSelector, rootSelector = 'body', wait) {
  • - const rootElement = document.querySelector(rootSelector);
  • - const targetElement = rootElement.querySelector(targetSelector);
  • - if (targetElement) {
  • - return Promise.resolve(targetElement)
  • - }
  • - return new Promise((resolve, reject) => {
  • - const callback = function(matationList, observer) {
  • - const targetElement = rootElement.querySelector(targetSelector);
  • - if (targetElement) {
  • - resolve(targetElement);
  • - observer.disconnect()
  • - }
  • - };
  • - const observer = new MutationObserver(callback);
  • - observer.observe(rootElement, {
  • - subtree: true,
  • - childList: true
  • - });
  • - if (wait !== undefined) {
  • - setTimeout(() => {
  • - observer.disconnect()
  • - }, wait)
  • - }
  • - })
  • - };
  • - async function removeAll(targetSelector, rootSelector, now = false) {
  • - if (now) {
  • - const parent = rootSelector ? document.querySelector(rootSelector) : document;
  • - if (parent) {
  • - const target = parent.querySelector(targetSelector);
  • - if (target) {
  • - target.remove();
  • - return true
  • - }
  • - }
  • - return false
  • - }
  • - const target = await removeObj(targetSelector, rootSelector);
  • - target.remove()
  • - };
  • -
  • - if(play_url.indexOf('iqiyi.com/v_') != -1){
  • -
  • - function iqiyiRemove() {
  • -
  • - remove('div#scrollTip,.qy-glide,#qy-glide,[class^="qy-glide"],[id^="qy-glide"],svg[display="none"][aria-hidden="true"],div[class*="player-side-ear"],div[class^="player-mnb"][data-asyn-pb]');
  • - removeAll('div[style*="visibility"][style*="visible"]:not([class]):not([id]):not([style*="fixed"])', undefined, false);
  • -
  • - };
  • - setTimeout(iqiyiRemove, 1234);
  • - $('div[style*="visibility"][style*="visible"]:not([class]):not([id]):not([style*="fixed"])').hide();
  • - (function() {
  • - $("body").on('mouseover', 'ul li [href*="/v_"][href*=".html"]:not([href*="=http"]):not([href*="?http"]):not([href*="#http"])', function(e) {
  • - let objfj = $(this), href = objfj.attr('href') || objfj.data("href");
  • - objfj.off('click.chrome');
  • -
  • - objfj.on('click.chrome', function() {
  • - window.location.href = href
  • - }).attr('data-href', href).css({
  • - cursor: 'pointer'
  • - }).removeAttr('href')
  • - })
  • - })();
  • - }
  • -
  • - if(play_url.indexOf('v.qq.com/x/cover') != -1){
  • -
  • - (function() {
  • - $("body").on('mouseover', '.item a', function(e) {
  • -
  • - let objfj = $(this), href = objfj.attr('href') || objfj.data("href");
  • - objfj.off('click.chrome');
  • -
  • - objfj.on('click.chrome', function() {
  • - window.location.href = href
  • - }).attr('data-href', href).css({
  • - cursor: 'pointer'
  • - }).removeAttr('href')
  • - })
  • - })();
  • - }
  • -
  • - $(".playLineTd").click(function(){
  • -
  • - var play_html = "<div style='width:100%;height:100%;'><iframe allowtransparency=true frameborder='0' scrolling='no' allowfullscreen=true allowtransparency=true name='jx_play' style='height:100%;width:100%' id='playIframe'></iframe></div>";
  • -
  • - $(node).html(play_html);
  • -
  • - var iframe_src= this.id+play_url;
  • -
  • - $("#playIframe").attr("src",iframe_src);
  • -
  • - });
  • -
  • $("#"+id_random).click(function(){
  • var play_jx_url = window.location.href;
  • if(/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {
  • mobile_html += "</div>";
  • $("body").html(mobile_html);
  • } else {
  • - $.get('https://www.eggvod.cn/jxcode.php',{in:81516699,code:4},function(data){
  • - location.href='https://www.eggvod.cn/jxjx.php?lrspm='+data+'&zhm_jx='+play_jx_url;
  • + $.get('https://www.eggvod.cn/jxcode.php',{in:8156699,code:2},function(data){
  • + location.href='https://www.eggvod.cn/jx.php?lrspm='+data+'&zhm_jx='+play_jx_url;
  • });
  • }
  • });
  • - }, 5000);
  • -
  • -
  • -
  • - }
  • - }
  • var music_id = Math.ceil(Math.random()*100000000);
  • var music_title=new Array()
  • music_title[8]= "qingting.fm"
  • music_title[9]= "lizhi.fm"
  • music_title[10]= "ximalaya.com"
  • -
  • for(var i=0;i<music_title.length;i++){
  • if(get_url.indexOf(music_title[i])!= -1){
  • - var music_html = "<div href='javascript:void(0)' id="+music_id+" style='cursor:pointer;z-index:98;display:block;width:30px;height:30px;line-height:30px;position:fixed;left:0;top:300px;text-align:center;'><img src='data:image/gif;base64,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' title='在音乐单曲播放页面点击图标下载' style='width:50px' ></div>";
  • + var music_html = "<div href='javascript:void(0)' id="+music_id+" style='cursor:pointer;z-index:98;display:block;width:30px;height:30px;line-height:30px;position:fixed;left:0;top:300px;text-align:center;'><img src='https://cdn.80note.com/vip.gif' style='width:50px' ></div>";
  • $("body").append(music_html);
  • }
  • -
  • }
  • -
  • $("#"+music_id).click(function(){
  • + var music_jx_url = encodeURIComponent(window.location.href);
  • + window.open('http://www.eggvod.cn/music/?url='+music_jx_url);
  • + });
  • + }
  • + //获取url参数;
  • + function getQueryString(e) {
  • + var t = new RegExp("(^|&)" + e + "=([^&]*)(&|$)");
  • + var a = window.location.search.substr(1).match(t);
  • + if (a != null) return a[2];
  • + return "";
  • + }
  • +})();
  • - var hostUrl = window.location.href;
  • +//知乎视频
  • +//
  • +(async () => {
  • + if (window.location.host == 'www.zhihu.com') return;
  • - if(hostUrl.match(/music\.163\./)){
  • -
  • + const playlistBaseUrl = 'https://lens.zhihu.com/api/videos/';
  • + //const videoBaseUrl = 'https://video.zhihu.com/video/';
  • + const videoId = window.location.pathname.split('/').pop(); // 视频id
  • + const menuStyle = 'transform:none !important; left:auto !important; right:-0.5em !important;';
  • + const playerId = 'player';
  • + const coverSelector = '#' + playerId + ' > div:first-child > div:first-child > div:nth-of-type(2)';
  • + const controlBarSelector = '#' + playerId + ' > div:first-child > div:first-child > div:last-child > div:last-child > div:first-child';
  • + const svgDownload = '<path d="M9.5,4 H14.5 V10 H17.8 L12,15.8 L6.2,10 H9.5 Z M6.2,18 H17.8 V20 H6.2 Z"></path>';
  • + let player = document.getElementById(playerId);
  • + let resolutionMap = {'标清': 'sd', '高清': 'ld', '超清': 'hd'};
  • + let videos = []; // 存储各分辨率的视频信息
  • + let downloading = false;
  • +
  • + function getBrowerInfo() {
  • + let browser = (function (window) {
  • + let document = window.document;
  • + let navigator = window.navigator;
  • + let agent = navigator.userAgent.toLowerCase();
  • + // IE8+支持.返回浏览器渲染当前文档所用的模式
  • + // IE6,IE7:undefined.IE8:8(兼容模式返回7).IE9:9(兼容模式返回7||8)
  • + // IE10:10(兼容模式7||8||9)
  • + let IEMode = document.documentMode;
  • + let chrome = window.chrome || false;
  • + let system = {
  • + // user-agent
  • + agent: agent,
  • + // 是否为IE
  • + isIE: /trident/.test(agent),
  • + // Gecko内核
  • + isGecko: agent.indexOf('gecko') > 0 && agent.indexOf('like gecko') < 0,
  • + // webkit内核
  • + isWebkit: agent.indexOf('webkit') > 0,
  • + // 是否为标准模式
  • + isStrict: document.compatMode === 'CSS1Compat',
  • + // 是否支持subtitle
  • + supportSubTitle: function () {
  • + return 'track' in document.createElement('track');
  • + },
  • + // 是否支持scoped
  • + supportScope: function () {
  • + return 'scoped' in document.createElement('style');
  • + },
  • +
  • + // 获取IE的版本号
  • + ieVersion: function () {
  • + let rMsie = /(msie\s|trident.*rv:)([\w.]+)/;
  • + let match = rMsie.exec(agent);
  • + try {
  • + return match[2];
  • + } catch (e) {
  • + return IEMode;
  • + }
  • + },
  • + // Opera版本号
  • + operaVersion: function () {
  • + try {
  • + if (window.opera) {
  • + return agent.match(/opera.([\d.]+)/)[1];
  • + }
  • + else if (agent.indexOf('opr') > 0) {
  • + return agent.match(/opr\/([\d.]+)/)[1];
  • + }
  • + } catch (e) {
  • + return 0;
  • + }
  • + }
  • + };
  • +
  • - if(hostUrl.match(/^https?:\/\/music\.163\.com\/#\/(?:song|dj)\?id/)) {
  • + try {
  • + // 浏览器类型(IE、Opera、Chrome、Safari、Firefox)
  • + system.type = system.isIE ? 'IE' :
  • + window.opera || (agent.indexOf('opr') > 0) ? 'Opera' :
  • + (agent.indexOf('chrome') > 0) ? 'Chrome' :
  • + //safari也提供了专门的判定方式
  • + window.openDatabase ? 'Safari' :
  • + (agent.indexOf('firefox') > 0) ? 'Firefox' :
  • + 'unknow';
  • +
  • + // 版本号
  • + system.version = (system.type === 'IE') ? system.ieVersion() :
  • + (system.type === 'Firefox') ? agent.match(/firefox\/([\d.]+)/)[1] :
  • + (system.type === 'Chrome') ? agent.match(/chrome\/([\d.]+)/)[1] :
  • + (system.type === 'Opera') ? system.operaVersion() :
  • + (system.type === 'Safari') ? agent.match(/version\/([\d.]+)/)[1] :
  • + '0';
  • +
  • + // 浏览器外壳
  • + system.shell = function () {
  • + if (agent.indexOf('edge') > 0) {
  • + system.version = agent.match(/edge\/([\d.]+)/)[1] || system.version;
  • + return 'Edge';
  • + }
  • + // 遨游浏览器
  • + if (agent.indexOf('maxthon') > 0) {
  • + system.version = agent.match(/maxthon\/([\d.]+)/)[1] || system.version;
  • + return 'Maxthon';
  • + }
  • + // QQ浏览器
  • + if (agent.indexOf('qqbrowser') > 0) {
  • + system.version = agent.match(/qqbrowser\/([\d.]+)/)[1] || system.version;
  • + return 'QQBrowser';
  • + }
  • + // 搜狗浏览器
  • + if (agent.indexOf('se 2.x') > 0) {
  • + return '搜狗浏览器';
  • + }
  • +
  • + // Chrome:也可以使用window.chrome && window.chrome.webstore判断
  • + if (chrome && system.type !== 'Opera') {
  • + let external = window.external;
  • + let clientInfo = window.clientInformation;
  • + // 客户端语言:zh-cn,zh.360下面会返回undefined
  • + let clientLanguage = clientInfo.languages;
  • +
  • + // 猎豹浏览器:或者agent.indexOf("lbbrowser")>0
  • + if (external && 'LiebaoGetVersion' in external) {
  • + return 'LBBrowser';
  • + }
  • + // 百度浏览器
  • + if (agent.indexOf('bidubrowser') > 0) {
  • + system.version = agent.match(/bidubrowser\/([\d.]+)/)[1] ||
  • + agent.match(/chrome\/([\d.]+)/)[1];
  • + return 'BaiDuBrowser';
  • + }
  • + // 360极速浏览器和360安全浏览器
  • + if (system.supportSubTitle() && typeof clientLanguage === 'undefined') {
  • + let storeKeyLen = Object.keys(chrome.webstore).length;
  • + let v8Locale = 'v8Locale' in window;
  • + return storeKeyLen > 1 ? '360极速浏览器' : '360安全浏览器';
  • + }
  • + return 'Chrome';
  • + }
  • + return system.type;
  • + };
  • +
  • - window.open('http://music.jpnet.cc/newmusic/?url='+encodeURIComponent(hostUrl.replace('/#','')));
  • + // 浏览器名称(如果是壳浏览器,则返回壳名称)
  • + system.name = system.shell();
  • + // 对版本号进行过滤过处理
  • + // System.version = System.versionFilter(System.version);
  • - }else if(hostUrl.match(/^https?:\/\/y\.music\.163\.com\/m\/(?:song|dj)\?id/)) {
  • + } catch (e) {
  • + // console.log(e.message);
  • + }
  • - window.open('http://music.jpnet.cc/newmusic/?url='+encodeURIComponent('https://music.163.com/song?id='+getQueryString('id')));
  • + return system;
  • - }else{
  • - return false;
  • - }
  • - }else if(hostUrl.match(/y\.qq\.com/)){
  • + })(window);
  • - try {
  • - document.querySelector("audio").pause();
  • - } catch (e) {}
  • + if (browser.name == undefined || browser.name == '') {
  • + browser.name = 'Unknown';
  • + browser.version = 'Unknown';
  • + }
  • + else if (browser.version == undefined) {
  • + browser.version = 'Unknown';
  • + }
  • + return browser;
  • + }
  • - if($('#sim_song_info').children("a").attr("href")){
  • + function fetchRetry(url, options = {}, times = 1, delay = 1000, checkStatus = true) {
  • + return new Promise((resolve, reject) => {
  • + // fetch 成功处理函数
  • + function success(res) {
  • + if (checkStatus && !res.ok) {
  • + failure(res);
  • + }
  • + else {
  • + resolve(res);
  • + }
  • + }
  • - var qqSong = $('#sim_song_info').children("a").attr("href").match(/song\/(\S*).html/);
  • + // 单次失败处理函数
  • + function failure(error) {
  • + times--;
  • - }else{
  • -
  • + if (times) {
  • + setTimeout(fetchUrl, delay);
  • + }
  • + else {
  • + reject(error);
  • + }
  • + }
  • +
  • - qqSong = $('.player_music__info').children("a").attr("href").match(/songDetail\/(\S*)\?/);
  • -
  • + // 总体失败处理函数
  • + function finalHandler(error) {
  • + throw error;
  • + }
  • +
  • + function fetchUrl() {
  • + return fetch(url, options)
  • + .then(success)
  • + .catch(failure)
  • + .catch(finalHandler);
  • }
  • - window.open('http://music.jpnet.cc/newmusic/?id='+qqSong[1]+'&type=qq&playUrl='+encodeURIComponent(document.querySelector("audio").src));
  • - }else if(hostUrl.match(/kugou\.com/)){
  • - try {
  • - document.querySelector("audio").pause();
  • - } catch (e) {}
  • - var kgSong = hostUrl.match(/hash=(\S*)&album/);
  • - window.open('http://music.jpnet.cc/newmusic/?id='+kgSong[1]+'&type=kugou&playUrl='+encodeURIComponent(document.querySelector("audio").src));
  • -c
  • - }else if(hostUrl.match(/kuwo\.cn/)){
  • + fetchUrl();
  • + });
  • + }
  • - try {
  • - document.querySelector("audio").pause();
  • - } catch (e) {}
  • - var kwSong = hostUrl.match(/play_detail\/(\S*)/);
  • - console.log(kwSong);
  • - window.open('http://music.jpnet.cc/newmusic/?id='+kwSong[1]+'&type=kuwo&playUrl='+encodeURIComponent(document.querySelector("audio").src));
  • + // 下载指定url的资源
  • + async function downloadUrl(url, name = (new Date()).valueOf() + '.mp4') {
  • + let browser = getBrowerInfo();
  • - }else if(hostUrl.match(/www\.xiami\.com/)){
  • - try {
  • - document.querySelector("audio").pause();
  • - } catch (e) {}
  • - var xmSong = hostUrl.match(/song\/(\S*)/);
  • - console.log(xmSong);
  • - window.open('http://music.jpnet.cc/newmusic/?id='+xmSong[1]+'&type=xiami&playUrl='+encodeURIComponent(document.querySelector("audio").src));
  • -
  • + // Greasemonkey 需要把 url 转为 blobUrl
  • + if (GM_info.scriptHandler == 'Greasemonkey') {
  • + let res = await fetchRetry(url);
  • + let blob = await res.blob();
  • + url = URL.createObjectURL(blob);
  • + }
  • +
  • - }else if(hostUrl.match(/www\.ximalaya\.com/)){
  • - var xmlyUrlArr = hostUrl.split("/");
  • + // Chrome 可以使用 Tampermonkey 的 GM_download 函数绕过 CSP(Content Security Policy) 的限制
  • + if (window.GM_download) {
  • + GM_download({url, name});
  • + }
  • + else {
  • + // firefox 需要禁用 CSP, about:config -> security.csp.enable => false
  • + let a = document.createElement('a');
  • + a.href = url;
  • + a.download = name;
  • + // a.target = '_blank';
  • + document.body.appendChild(a);
  • + a.click();
  • + document.body.removeChild(a);
  • - for(var xuaIndex =0;xuaIndex<xmlyUrlArr.length;xuaIndex++){
  • + setTimeout(function () {
  • + URL.revokeObjectURL(url);
  • + }, 100);
  • + }
  • + }
  • - if(xuaIndex==xmlyUrlArr.length-1){
  • + function humanSize(size) {
  • + let n = Math.log(size) / Math.log(1024) | 0;
  • + return (size / Math.pow(1024, n)).toFixed(0) + ' ' + (n ? 'KMGTPEZY'[--n] + 'B' : 'Bytes');
  • + }
  • - window.open('http://music.jpnet.cc/newmusic/?id='+xmlyUrlArr[xuaIndex]+'&type=xmly&playUrl='+encodeURIComponent(hostUrl));
  • + if (!player) return;
  • + // 获取视频信息
  • + const res = await fetchRetry(playlistBaseUrl + videoId, {
  • + headers: {
  • + 'referer': 'refererBaseUrl + videoId',
  • + 'authorization': 'oauth c3cef7c66a1843f8b3a9e6a1e3160e20' // in zplayer.min.js of zhihu
  • }
  • + }, 3);
  • + const videoInfo = await res.json();
  • +
  • + // 获取不同分辨率视频的信息
  • + for (let [key, video] of Object.entries(videoInfo.playlist)) {
  • + video.name = key;
  • + if (!videos.find(v => v.width == video.width)) {
  • + videos.push(video);
  • }
  • - }else if(hostUrl.match(/music\.taihe\.com/)){
  • - return false;
  • - }else{
  • - return false;
  • + }
  • +
  • + // 按分辨率大小排序
  • + videos = videos.sort(function (v1, v2) {
  • + return v1.width == v2.width ? 0 : (v1.width > v2.width ? 1 : -1);
  • + }).reverse();
  • +
  • + document.addEventListener('DOMNodeInserted', (evt) => {
  • + let domControlBar = evt.relatedNode.querySelector(':scope > div:last-child > div:first-child');
  • + if (!domControlBar || domControlBar.querySelector('.download')) return;
  • + let domFullScreenBtn = domControlBar.querySelector(':scope > div:nth-last-of-type(1)');
  • + let domResolutionBtn = domControlBar.querySelector(':scope > div:nth-last-of-type(3)');
  • + let domDownloadBtn, defaultResolution, buttons;
  • + if (!domFullScreenBtn || !domFullScreenBtn.querySelector('button')) return;
  • +
  • + // 克隆分辨率菜单或全屏按钮为下载按钮
  • + domDownloadBtn = (domResolutionBtn && (domResolutionBtn.className == domFullScreenBtn.className))
  • + ? domResolutionBtn.cloneNode(true)
  • + : domFullScreenBtn.cloneNode(true);
  • +
  • + defaultResolution = domDownloadBtn.querySelector('button').innerText;
  • +
  • + // 生成下载按钮图标
  • + domDownloadBtn.querySelector('button:first-child').outerHTML = domFullScreenBtn.cloneNode(true).querySelector('button').outerHTML;
  • + domDownloadBtn.querySelector('svg').innerHTML = svgDownload;
  • + domDownloadBtn.className = domDownloadBtn.className + ' download';
  • +
  • + buttons = domDownloadBtn.querySelectorAll('button');
  • +
  • + // button 元素添加对应的下载地址
  • + buttons.forEach(dom => {
  • + let video = videos.find(v => v.name == resolutionMap[dom.innerText || defaultResolution]);
  • + video = video || videos[0];
  • + dom.dataset.video = video.play_url;
  • + if (dom.innerText) {
  • + (dom.innerText = `${dom.innerText} (${humanSize(video.size)})`);
  • + }
  • + else if (buttons.length == 1) {
  • + dom.nextSibling.querySelector('div').innerText = humanSize(video.size);
  • }
  • + });
  • + // 鼠标事件 - 显示菜单
  • + domDownloadBtn.addEventListener('pointerenter', () => {
  • + let domMenu = domDownloadBtn.querySelector('div:nth-of-type(1)');
  • + if (domMenu) {
  • + domMenu.style.cssText = menuStyle + 'opacity:1 !important; visibility:visible !important';
  • + }
  • });
  • + // 鼠标事件 - 隐藏菜单
  • + domDownloadBtn.addEventListener('pointerleave', () => {
  • + let domMenu = domDownloadBtn.querySelector('div:nth-of-type(1)');
  • + if (domMenu) {
  • + domMenu.style.cssText = menuStyle;
  • + }
  • + });
  • + // 鼠标事件 - 选择菜单项
  • + domDownloadBtn.addEventListener('pointerup', event => {
  • + if (downloading) {
  • + alert('当前正在执行下载任务,请等待任务完成。');
  • + return;
  • }
  • - //获取url参数;
  • - function getQueryString(e) {
  • - var t = new RegExp("(^|&)" + e + "=([^&]*)(&|$)");
  • - var a = window.location.search.substr(1).match(t);
  • - if (a != null) return a[2];
  • - return "";
  • + let e = event.srcElement || event.target;
  • +
  • + while (e.tagName != 'BUTTON') {
  • + e = e.parentNode;
  • }
  • +
  • + downloadUrl(e.dataset.video);
  • + });
  • +
  • + // 显示下载按钮
  • + domControlBar.appendChild(domDownloadBtn);
  • +
  • + });
  • })();

msoop has made 0 pending reports, 76 dismissed reports, 9 reports marked as fixed, and 186 upheld reports.

电大教育 has made 0 comments and posted 6 scripts.

This report has been upheld by a moderator.