// ==UserScript== // @name 萧山史志PDF快速下载,方便研究学习 // @namespace lincong1987 // @match http://www.xssz.xs.zj.cn/* // @grant GM_xmlhttpRequest // @version 1.1 // @description use rpc download pdf // @author lincong1987 // @require https://static.hdslb.com/js/jquery.min.js // @description 萧山史志PDF快速下载,方便研究学习 // @license MIT // @downloadURL https://update.greasyfork.icu/scripts/439864/%E8%90%A7%E5%B1%B1%E5%8F%B2%E5%BF%97PDF%E5%BF%AB%E9%80%9F%E4%B8%8B%E8%BD%BD%EF%BC%8C%E6%96%B9%E4%BE%BF%E7%A0%94%E7%A9%B6%E5%AD%A6%E4%B9%A0.user.js // @updateURL https://update.greasyfork.icu/scripts/439864/%E8%90%A7%E5%B1%B1%E5%8F%B2%E5%BF%97PDF%E5%BF%AB%E9%80%9F%E4%B8%8B%E8%BD%BD%EF%BC%8C%E6%96%B9%E4%BE%BF%E7%A0%94%E7%A9%B6%E5%AD%A6%E4%B9%A0.meta.js // ==/UserScript== /* globals $ waitForKeyElements */ (function () { var rpc = { domain: 'http://localhost', port: 16800, token: '', dir: '/Users/lincong/Downloads/d3/', } var utils = { Message: undefined, MessageBox: undefined, } // Message & MessageBox utils.Message = { success: function (html) { return message(html, 'success') }, warning: function (html) { return message(html, 'warning') }, danger: function (html) { return message(html, 'danger') }, info: function (html) { return message(html, 'info') }, } utils.MessageBox = { alert: function (html, affirm) { return messageBox({ html: html, callback: {affirm: affirm}, }, 'alert') }, confirm: function (html, affirm, cancel) { return messageBox({ html: html, callback: { affirm: affirm, cancel: cancel, }, }, 'confirm') }, } var components_css = '' + '' var components_html = '' + '
' + '' function messageBox (ctx, type) { if (type === 'confirm') { $('div.message_box_btn button[name="cancel"]').show() } else if (type === 'alert') { $('div.message_box_btn button[name="cancel"]').hide() } if (ctx.html) { $('div#message_box_context'). html('
'.concat(ctx.html, '
')) } else { $('div#message_box_context'). html('
╰( ̄▽ ̄)╮
') } $('#message_box').show() hide_scroll() $('div#message_box').animate({ 'opacity': '1', }, 300) $('div.message_box_btn button[name="affirm"]')[0].onclick = function () { $('div#message_box').hide() show_scroll() if (ctx.callback && ctx.callback.affirm) { ctx.callback.affirm() } } $('div.message_box_btn button[name="cancel"]')[0].onclick = function () { $('div#message_box').hide() show_scroll() if (ctx.callback && ctx.callback.cancel) { ctx.callback.cancel() } } } var id = 0 function message (html, type) { id += 1 messageEnQueue( '

'). concat(type, '\uFF1A

'). concat(html, '

'), id) messageDeQueue(id, 3) } function messageEnQueue (message, id) { $('div.message-bg').append(message) $('div#message-'.concat(id)).animate({ 'margin-top': '+=70px', 'opacity': '1', }, 300) } function messageDeQueue (id, time) { if (time === void 0) { time = 3 } setTimeout(function () { var e = 'div#message-'.concat(id) $(e).animate({ 'margin-top': '-=70px', 'opacity': '0', }, 300, function () { $(e).remove() }) }, time * 1000) } var antd_css = '' $('body').append(components_html + components_css + antd_css) // Scroll 滚动条 utils.Scroll = { show: show_scroll, hide: hide_scroll, } function show_scroll () { if ($('div#my_config').is(':hidden') && $('div#message_box').is(':hidden')) { $('body').css('overflow', 'auto') } } function hide_scroll () { $('body').css('overflow', 'hidden') } var download_rpc_clicked = false function download_blob (url, filename) { if (download_blob_clicked) { utils.Message.info('(^・ω・^)~喵喵喵~') need_show_progress = true return } var xhr = new XMLHttpRequest() xhr.open('get', url) xhr.responseType = 'blob' xhr.onload = function () { if (this.status === 200 || this.status === 304) { if ('msSaveOrOpenBlob' in navigator) { navigator.msSaveOrOpenBlob(this.response, filename) return } var blob_url = URL.createObjectURL(this.response) var a = document.createElement('a') a.style.display = 'none' a.href = blob_url a.download = filename document.body.appendChild(a) a.click() a.remove() URL.revokeObjectURL(blob_url) } } need_show_progress = true xhr.onprogress = function (evt) { if (this.state != 4) { var loaded = evt.loaded var tot = evt.total show_progress({ total: tot, loaded: loaded, percent: Math.floor(100 * loaded / tot), }) } } xhr.send() download_blob_clicked = true // locked utils.Message.info('准备开始下载') } function download_rpc (url, filename, type) { if (type === void 0) { type = 'post' } if (download_rpc_clicked) { // utils.Message.info('(^・ω・^)~喵喵喵~'); return } download_rpc_clicked = true function getType (file) { var filename = file var index1 = filename.lastIndexOf('.') var index2 = filename.length var type = filename.substring(index1, index2) return type } var json_rpc = { id: window.btoa( 'BParse_'.concat(Date.now(), '_').concat(Math.random())), jsonrpc: '2.0', method: 'aria2.addUri', params: [ 'token:'.concat(rpc.token), [location.origin + url], { dir: rpc.dir, out: (filename + '.' + getType(url)).replace("..", "."), header: [ 'User-Agent: '.concat(window.navigator.userAgent), 'Referer: '.concat(window.location.href), ], }, ], } utils.Message.info('发送RPC下载请求') if (type === 'post') { debugger; let jsonrpc = JSON.stringify(json_rpc) let control = GM_xmlhttpRequest({ url: ''.concat(rpc.domain, ':').concat(rpc.port, '/jsonrpc'), method: 'post', headers: {}, responseType: 'json', data: JSON.stringify(json_rpc), onload: function (res) { debugger if (res && res.response && res.response.id) { utils.Message.success('RPC请求成功,稍后将自动下载完成') } else { utils.Message.warning('RPC请求失败') } download_rpc_clicked = false }, onerror: function () { utils.Message.danger('RPC请求异常,请确认RPC服务配置及软件运行状态') download_rpc_clicked = false }, }) // // // $.ajax(''.concat(rpc.domain, ':').concat(rpc.port, '/jsonrpc'), { // type: 'POST', // dataType: 'json', // data: JSON.stringify(json_rpc), // success: function (res) { // if (res.result) { // utils.Message.success('RPC请求成功') // } else { // utils.Message.warning('RPC请求失败') // } // download_rpc_clicked = false // }, // error: function () { // utils.Message.danger('RPC请求异常,请确认RPC服务配置及软件运行状态') // download_rpc_clicked = false // }, // }) } else if (type === 'ariang') { // const url = // `chrome-extension://mpkodccbngfoacfalldjimigbofkhgjn/ui/ariang/index.html/#!/settings/rpc/set/${rpc.domain.replace('://', // '/')}/${rpc.port}/jsonrpc/${window.btoa(rpc.token)}`; //const // url = // // `chrome-extension://mpkodccbngfoacfalldjimigbofkhgjn/ui/ariang/index.html/#!/settings/rpc/set/${rpc.domain.replace('://', // '/')}/${rpc.port}/jsonrpc/${window.btoa(rpc.token)}`; // a.setAttribute('target', '_blank'); a.setAttribute('onclick', // `window.bp_aria2_window=window.open('${url}');`); // document.body.appendChild(a); a.click(); a.remove(); var bp_aria2_window = window.bp_aria2_window var time = 100 if (!bp_aria2_window || bp_aria2_window.closed) { open_ariang() time = 3000 } setTimeout(function () { var bp_aria2_window = window.bp_aria2_window var aria2_header = 'header=User-Agent:'.concat( window.navigator.userAgent, '&header=Referer:'). concat(window.location.href) var task_hash = '#!/new/task?url='.concat(window.btoa(url), '&out='). concat(encodeURIComponent(filename), '&'). concat(aria2_header) if (bp_aria2_window && !bp_aria2_window.closed) { bp_aria2_window.location.href = 'chrome-extension://mpkodccbngfoacfalldjimigbofkhgjn/ui/ariang/index.html'.concat( task_hash) utils.Message.success('RPC请求成功') } else { utils.Message.warning('RPC请求失败') } download_rpc_clicked = false }, time) } } function open_ariang () { var url = 'chrome-extension://mpkodccbngfoacfalldjimigbofkhgjn/ui/ariang/index.html/' var a = document.createElement('a') a.setAttribute('target', '_blank') a.setAttribute('onclick', 'window.bp_aria2_window=window.open(\''.concat(url, '\');')) document.body.appendChild(a) a.click() a.remove() } var $title = $('table:eq(4) tr:eq(0) td>span') var filename = $title.html() $title.append('
配置 点击下载学习
' + '
' + '

rpc配置

' + '
*' + ' 请根据你的实际情况来配置一下内容
' + '
*' + ' 建议使用motrix来管理下载
' + '
domain:' + '
' + '
端口:' + '
' + '
token:' + '
' + '
保存目录:' + '
' + '
保存
' + '
' + '' + '') // var rpc = { // domain: 'http://localhost', // port: 16800, // token: '', // dir: '/Users/lincong/Downloads/d3/', // } if (filename) { utils.Message.info('获取文件名成功 - ' + filename) } var $link = $('a[href*=\'.pdf\']') var url = $link.attr('href') if ($link.length) { utils.Message.info( '获取下载链接成功 - ' + '' + url + '') } $('#biz_download_rpc_pdf').on('click', function (e) { download_rpc(url, filename, 'post') }) $('#biz_config_rpc_pdf').on('click', function (e) { $('#biz_config_rpc_form').toggle() }) $('#biz_config_rpc_form__save').on('click', function (e) { setConfig() }) function getConfig () { let config = {} let biz_config_rpc_form__config = localStorage.getItem( 'biz_config_rpc_form__config') if (!biz_config_rpc_form__config) { localStorage.setItem('biz_config_rpc_form__config', JSON.stringify(rpc)) biz_config_rpc_form__config = rpc config = biz_config_rpc_form__config } else { rpc = JSON.parse(biz_config_rpc_form__config) config = rpc } $('#biz_config_rpc_form__domain').val(config.domain) $('#biz_config_rpc_form__port').val(config.port) $('#biz_config_rpc_form__token').val(config.token) $('#biz_config_rpc_form__dir').val(config.dir) } setTimeout(function () { getConfig() }, 500) function setConfig () { let rpc_config = { domain: $('#biz_config_rpc_form__domain').val(), port: $('#biz_config_rpc_form__port').val(), token: $('#biz_config_rpc_form__token').val(), dir: $('#biz_config_rpc_form__dir').val(), } rpc = rpc_config localStorage.setItem('biz_config_rpc_form__config', JSON.stringify(rpc)) utils.MessageBox.alert('保存成功!') } })()