// ==UserScript== // @name 文献互助小帮手:①从图书馆参考咨询联盟(ucdrs)或读秀(duxiu)获取ssid/dxid ②从中美百万(cadal)获取ssno ③提供ucdrs、duxiu、cadal到豆瓣图书的链接 // @namespace ucdrs.superlib.net // @version 1.6.0 // @author Theron // @match *://book.ucdrs.superlib.net/views/specific/* // @match *://book.ucdrs.superlib.net/search* // @match *://search.douban.com/book/subject_search* // @match *://book.douban.com/isbn/* // @match *://book.douban.com/subject_search* // @match *://book.douban.com/tag/* // @match *://book.douban.com/subject/* // @match *://book.douban.com/series/* // @match *://book.douban.com/works/* // @match *://book.douban.com/author/*/books* // @match *://book.douban.com/people/*/wish* // @match *://book.douban.com/people/*/do* // @match *://book.douban.com/people/*/collect* // @match *://www.douban.com/doulist/* // @match *://book.douban.com/cart* // @match *://cadal.edu.cn/cadalinfo/search* // @match *://cadal.edu.cn/cardpage/bookCardPage?*ssno=* // @match *://fx.ccelib.com/detail_* // @match *://fx.ccelib.com/s?* // @include */search* // @include */bookDetail.jsp* // @include */chapter.jsp* // @description 显示图书馆参考咨询联盟(ucdrs)或读秀及其镜像站(duxiu)上文献的ssid或dxid(ssid不存在时),用于群组找书、文献互助、图书互助等场景;显示大学数字图书馆国际合作计划(cadal)的书号-ssno,用于查询下载中美百万书册;另外在搜索、详情页等处添加ucdrs、duxiu、cadal和豆瓣的双向导航链接。To搜索[红太狼的平底锅]的朋友:提供红太狼的平底锅的部分功能,如显示ssid,下载请自行找百度网盘群组;显示dxid和双向链接为平底锅没有的新加功能。 // @grant none // @license Copyright Theron // @downloadURL none // ==/UserScript== /* jslint esversion: 6 */ /*globals jQuery */ (function () { 'use strict'; function slim(s) { return s.replaceAll(/ +/g, "").trim(); } function showbid(bookid, idtype) { return `

${idtype}${bookid}

`; } function sepit(s, sep) { if (sep === "|") { s = " | " + s; } else if (sep === "br") { s = s + "
"; } else if (sep === "p") { s = '

' + s + '

'; } return s; } function ucdrslink(bookname, sep = "|", text = '参考联盟') { return sepit(`${text}`, sep); } function dblink(bookname, isbn = "", sep = "|", style="color: blue") { return isbn === "" ? sepit(`豆瓣搜索`, sep) : sepit(`豆瓣直达`, sep); } function dxtoc(url) { url = url.replace("bookDetail.jsp", "chapter.jsp").replace(/sw=[^/&]*/, "sw=1 2 3 中 4 5 6 7 8 大 参考 9 是 人 上 附 不 小 从 之 下 有 用 以 多 后 表 什么 十 10 部分 前 到 图 我 如何 要 可 内 里 记 区 外 天 来 你 西 再 序 南 步骤 同 录 附 去 女 篇 开 文 都 题 东 就 节 他 也 公 北 结 右 又 少 百 那 这 关 没 千 表格 个 男 章 0 论 几 今 左 万"); return `目录`; } function iid2bookid(iid) { var bookid = ""; var part = ""; var tailhex = parseInt(iid.substring(iid.length - 2), 16); var encoded = iid.substring(0, iid.length - 16); var i; for (i = 0; i < encoded.length; i = i + 2) { part = encoded.substring(i, i + 2); bookid += String.fromCharCode(parseInt(part, 16) - tailhex); } return bookid.replace(/\//g, "").match(/^\d{8,}/)[0]; } var pageurl = window.location.href; var bookid; var bookname; var ssid; var dxid; var img; var snippet; var m_isbn; var m_ssn; var m_dxid; var m_iid; if (pageurl.includes("search.douban.com/book/subject_search") || pageurl.includes("book.douban.com/subject_search")) { jQuery("div.item-root > div.detail > div.title").each(function (i, el) { bookname = slim(jQuery(el).text()); jQuery(el).find("a").after(ucdrslink(bookname)); }); } else if (pageurl.includes("book.douban.com/works")) { jQuery("div.bkdesc > a.pl2").each(function (i, el) { bookname = slim(jQuery(el).text()); jQuery(el).after(ucdrslink(bookname)); }); } else if (pageurl.includes("book.douban.com/cart")) { jQuery("td.book_title > a").each(function (i, el) { bookname = slim(jQuery(el).text()); jQuery(el).after(ucdrslink(bookname, '|', '参')); }); } else if (pageurl.includes("www.douban.com/doulist")) { jQuery("div.title > a").each(function (i, el) { bookname = slim(jQuery(el).text()); var src = slim(jQuery(el).parent().prev().prev().text()); if (src === "来自:豆瓣读书") { jQuery(el).after(ucdrslink(bookname)); } }); } else if (pageurl.match("book.douban.com.*/(series|tag|do|wish|collect)")) { jQuery("div.info > h2 > a").each(function (i, el) { bookname = slim(jQuery(el).text()); jQuery(el).after(ucdrslink(bookname)); }); } else if (pageurl.includes("book.douban.com/author")) { jQuery("h6 > a").each(function (i, el) { bookname = slim(jQuery(el).text()); jQuery(el).after(ucdrslink(bookname)); }); } else if (pageurl.includes("book.douban.com/subject")) { var json = jQuery("script[type='application/ld+json']").text(); bookname = json.match(/"name" : "(.*?)",/)[1]; m_isbn = json.match(/"isbn" : "(.*?)",/); snippet = '
参考联盟'; jQuery("div#mainpic > a.nbg").after(snippet); } else if (pageurl.includes("book.douban.com/isbn")) { var error = jQuery('div#exception').text().trim(); if (error === "豆瓣评论暂时没有收录此书,请原谅。" || error === "您提供的ISBN号码不正确,请校正后再试。谢谢。") { var m_bookname = pageurl.match(/\?bookname=(.+)/); if (m_bookname) { bookname = m_bookname[1]; document.location = "https://search.douban.com/book/subject_search?search_text=" + bookname; } } } else if (pageurl.includes("book.ucdrs.superlib.net/search")) { jQuery('td[id="b_img"]').each(function (i, el) { bookid = jQuery(el).parent("tr").find('input[name*="ssid"]').val(); bookname = jQuery(el).parent("tr").find('input[name*="title"]').val().replaceAll(/<.*?>/g, ""); if (bookname) { jQuery(el).parent().children().last().find("a").after(dblink(bookname)); } if (bookid) { jQuery(el).after(showbid(bookid, "SS号")); } else { bookid = jQuery(el).find("a[href]").attr("href").match(/dxNumber=(\d+)/); if (bookid) { jQuery(el).after(showbid(bookid[1], "DX号")); } } }); } else if (pageurl.includes("//cadal.edu.cn/cadalinfo/search")) { jQuery('a.title').each(function (i, el) { bookid = jQuery(el).attr("onclick").match(/'\w+'/)[0].replace(/'/g, "").replace("hj", ""); jQuery(el).parent().parent().prev().find("a").after(showbid("CD" + bookid, "CADAL号
")); bookname = jQuery(el).text().trim(); jQuery(el).after(dblink(bookname)); }); } else if (pageurl.includes("/search") && jQuery('#dxid0').val()) { jQuery('div[class="divImg"]').each(function (i, el) { ssid = jQuery(el).prev().val(); dxid = jQuery(el).prev().prev().val(); bookname = jQuery(el).parent().find('input[name*="title"]').val().replaceAll(/<.*?>/g, ""); m_isbn = jQuery(el).next().text().match(/ISBN : ([\d-]+)\n/); var ele_title = jQuery(el).next().find("dt").find("a"); ele_title.after(dxtoc(ele_title.attr("href")) + (m_isbn ? dblink(bookname, m_isbn[1]) : dblink(bookname))); if (ssid) { jQuery(el).children().first().after(showbid(ssid, "SS号")); } else if (dxid) { jQuery(el).children().first().after(showbid(dxid, "DX号")); } }); } else if (pageurl.includes("fx.ccelib.com/s?")) { jQuery('div[class="savelist clearfix"]').each(function (i, el) { var ele_ul = jQuery(el).find('div.savelist_con > div.savelist_box > ul'); if (ele_ul.find('li.biaoti > a:first').text() === "[图书]") { var ele_title = ele_ul.find('li.biaoti > a:last'); bookname = ele_title.text().trim(); var ele_input = jQuery(el).find('div.save_img > input'); bookid = iid2bookid(ele_input.attr("img").match(/iid=(\w+)/)[1]); jQuery(el).find('div.save_img > a').after(showbid(bookid, bookid.length == 8 ? "SS号": "DX号")); var m_isbn = ele_ul.text().match(/ISBN:([\d-]+)\n/); ele_title.after(m_isbn ? dblink(bookname, m_isbn[1], "", "color: blue; float: none;") : dblink(bookname, "", "", "color: blue; float: none;")); } }); } else if (pageurl.includes("/views/specific/")) { m_ssn = jQuery("script:contains(send_requestajax)").text().match(/ssn=(\d{3,})/); m_dxid = pageurl.match(/dxNumber=(\d+)/); img = jQuery("div.tubookimg>img"); if (m_ssn) { img.after(showbid(m_ssn[1], "SS号")); } else if (m_dxid) { img.after(showbid(m_dxid[1], "DX号")); } bookname = jQuery("div.tutilte").text(); m_isbn = jQuery("div.tubox").find("dl").text().match(/【ISBN号】(.*?)\n/); snippet = m_isbn ? dblink(bookname, m_isbn[1], "") : dblink(bookname, ""); img.after(`

${snippet}

`); } else if (pageurl.includes("bookDetail.jsp?") && jQuery('input#dxid').val()) { m_iid = jQuery("div#bookphoto").html().match(/CoverNew.dll\?iid=(\w{40,56}\b)/); m_ssn = jQuery("script:contains(send_requestlib)").text().match(/ssn=(\d{3,})/); m_dxid = pageurl.match(/dxNumber=(\d+)/); img = jQuery("#grade1").prev(); if (m_iid) { bookid = iid2bookid(m_iid[1]); img.after(showbid(bookid, bookid.length == 8 ? "SS号": "DX号")); } else if (m_ssn) { img.after(showbid(m_ssn[1], "SS号")); } else if (m_dxid) { img.after(showbid(m_dxid[1], "DX号")); } bookname = jQuery("input#dxid").prev().text(); m_isbn = jQuery("div.card_text").find("dl").text().match(/ISBN号 :(.*?)\n/); snippet = m_isbn ? dblink(bookname, m_isbn[1], "") : dblink(bookname, ""); img.after(`

${dxtoc(pageurl)} | ${snippet}

`); } else if (pageurl.includes("://cadal.edu.cn/cardpage/bookCardPage?")) { bookid = pageurl.match(/ssno=(\w+)/)[1]; jQuery('div.title_img').each(function (i, el) { bookname = jQuery("span.title").text().trim(); m_isbn = jQuery(el).next().text().match(/ISBN:(.*?)\n/); jQuery("span.title").after(m_isbn ? dblink(bookname, m_isbn[1]) : dblink(bookname)); jQuery(el).find("a").after(showbid("CD" + bookid, "CADAL号
")); }); jQuery("#menu_area").show(); } else if (pageurl.includes("fx.ccelib.com/detail_")) { jQuery('div[class="savelist clearfix"]').each(function (i, el) { img = jQuery(el).find('div.save_img > img:first'); if (img.next().text() === "【图书】") { bookname = jQuery("h4.falv_tit").text().trim(); var ele_ul = jQuery(el).find('div.savelist_con > ul.infolist'); var ele_headline = ele_ul.find('li.biaoti').children().last(); bookid = iid2bookid(img.attr("src").match(/iid=(\w+)/)[1]); img.after(showbid(bookid, bookid.length == 8 ? "SS号": "DX号")); m_isbn = ele_ul.text().match(/【ISBN】([\d-]+)\n/); console.log(m_isbn); ele_headline.after(m_isbn ? dblink(bookname, m_isbn[1], "", "color: blue; float: none;") : dblink(bookname, "", "", "color: blue; float: none;")); } }); } else if (pageurl.includes("chapter.jsp?") && pageurl.includes("dxNumber=")) { var also = jQuery("#also"); also.after('

以下目录非完整版,由于读秀限制,仅展示匹配了 文献互助小帮手 脚本内置关键词的条目。

'); } })();