// ==UserScript==
// @name 杭州市方志馆 PDF快速下载,方便研究学习
// @namespace lincong1987
// @match http://www.hangzhouds.org.cn/cn/*/list.aspx*
// @match http://www.hangzhouds.org.cn/*/list.aspx*
// @match http://www.hangzhouds.org.cn/*/*/list.aspx*
// @grant GM_xmlhttpRequest
// @version 1.3
// @author lincong1987
// @require https://static.hdslb.com/js/jquery.min.js
// @description 杭州市方志馆 PDF快速下载,方便研究学习, 在线阅读费眼睛,下载本地再阅读棒棒棒!
// @license MIT
// @downloadURL https://update.greasyfork.icu/scripts/439868/%E6%9D%AD%E5%B7%9E%E5%B8%82%E6%96%B9%E5%BF%97%E9%A6%86%20PDF%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/439868/%E6%9D%AD%E5%B7%9E%E5%B8%82%E6%96%B9%E5%BF%97%E9%A6%86%20PDF%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 */
// http://www.hangzhouds.org.cn/HangzhouBook/list.aspx
// http://www.hangzhouds.org.cn/cn/BookLibrary/info.aspx?itemid=177
// http://www.hangzhouds.org.cn/cn/AncientBooks/list.aspx
/// asda dsas
//http://www.hangzhouds.org.cn/PartyBook/list.aspx
;
(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_rpc (url, filename) {
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),
[
url.indexOf(location.origin) !== -1
? url
: (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下载请求')
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) {
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
},
})
}
let pageTotal = $('#pagetotal').val()
function getBookPage (url, successCallback) {
// GM_xmlhttpRequest({
// header: {},
// onload:function (){}
//
// })
$.ajax({
type: 'get',
dataType: 'text',
url: url,
success (html) {
successCallback(html.replace(/src/g, 'data-src').
replace(/href/g, 'datahref').
replace(/script/g, 'textarea').
replace(/link/g, 'meta'))
},
error: function (e) {
utils.Message.danger(
'该地址内容获取失败 - ' + url)
},
})
}
function get () {
}
function startOneKeyTask () {
}
function renderDownloadLinkForEveryBook () {
$('.book-list-item-word').each(function () {
$(this).after('')
})
$('.book_journal li .name a').each(function () {
$(this).attr("title", $(this).attr("href").replace(/(.*)itemid=(\d+)(.*)/g, "$2")).after('')
})
}
setTimeout(function () {
renderDownloadLinkForEveryBook()
}, 500)
$('body').on('click', '.biz-rpc-download-pdf-every-book', function (e) {
let bookurl = $(this).data('bookurl')
download_book_by_url(bookurl)
})
$('body').on('click', '.biz-rpc-download-pdf-every-book-2', function (e) {
let bookurl = $(this).data('bookurl')
download_book_by_url(bookurl)
})
function download_book_by_url (url) {
getBookPage(url, function (html) {
let bookData = parseBookPageHtml(html, url)
console.log(bookData)
download_rpc(bookData.pdfurl, bookData.filename)
})
}
function parseBookPageHtml (html, url) {
url = url || "___"
let filename = ''
let pdfurl = ''
let $html = $(html)
let $link = $html.find('a[datahref*=\'.pdf\']')
if ($link.length) {
$link.attr('href', $link.attr('datahref'))
pdfurl = $link[0].href
utils.Message.info(
'获取下载链接成功 - ' + '' + pdfurl + '')
}
var $title = $html.find('.detail-h3')
filename = $title.text().replace(' 在线阅读', '').trim()
//
if (url.indexOf("www.hangzhouds.org.cn/PartyBook/info.aspx") !== -1){
var $title = $html.find('.journal_detail .info h2')
filename = $title.text().replace(' 在线阅读', '').trim()
}
utils.Message.info('获取文件名成功 - ' + filename)
return {
filename: filename,
pdfurl: pdfurl,
}
}
// http://www.hangzhouds.org.cn/PartyBook/list.aspx
$('.header').after(' ' +
// '' +
// '' +
'
' +
'' +
'' +
'')
// 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('保存成功!')
}
})()