Greasy Fork

Greasy Fork is available in English.

文献互助小帮手:①从图书馆参考咨询联盟(ucdrs)或读秀(duxiu)获取ssid/dxid ②从中美百万(cadal)获取ssno ③提供ucdrs、duxiu、cadal到豆瓣图书的链接

显示图书馆参考咨询联盟(ucdrs)或读秀及其镜像站(duxiu)上文献的ssid或dxid(ssid不存在时),用于群组找书、文献互助、图书互助等场景;显示大学数字图书馆国际合作计划(cadal)的书号-ssno,用于查询下载中美百万书册;另外在搜索、详情页等处添加ucdrs、duxiu、cadal和豆瓣的双向导航链接。To搜索[红太狼的平底锅]的朋友:提供红太狼的平底锅的部分功能,如显示ssid,下载请自行找百度网盘群组;显示dxid和双向链接为平底锅没有的新加功能。

当前为 2022-02-24 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         文献互助小帮手:①从图书馆参考咨询联盟(ucdrs)或读秀(duxiu)获取ssid/dxid ②从中美百万(cadal)获取ssno ③提供ucdrs、duxiu、cadal到豆瓣图书的链接
// @namespace    ucdrs.superlib.net
// @version      1.4.2
// @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/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=*
// @include      */search*
// @include      */bookDetail.jsp*
// @description  显示图书馆参考咨询联盟(ucdrs)或读秀及其镜像站(duxiu)上文献的ssid或dxid(ssid不存在时),用于群组找书、文献互助、图书互助等场景;显示大学数字图书馆国际合作计划(cadal)的书号-ssno,用于查询下载中美百万书册;另外在搜索、详情页等处添加ucdrs、duxiu、cadal和豆瓣的双向导航链接。To搜索[红太狼的平底锅]的朋友:提供红太狼的平底锅的部分功能,如显示ssid,下载请自行找百度网盘群组;显示dxid和双向链接为平底锅没有的新加功能。
// @grant        none
// @license      Copyright Theron
// ==/UserScript==

(function () {
    'use strict';
    function slim(s) {
        return s.replaceAll(/  +/g, "").trim();
    }
    function showbid(bookid, idtype) {
        return `<p style="text-align: center; margin-top: 5px; margin-bottom: 5px; clear:both;"><span style="color: red; font-size: 13px; padding-right: 3px;">${idtype}</span><span style="color: blue; font-size: 13px; font-weight: bold;">${bookid}</span></p>`;
    }
    function iid2ssid(iid) {
        var ssid = "";
        var part = "";
        var tailhex = parseInt(iid.substring(iid.length - 2), 16);
        var encoded = iid.substring(0, iid.length - 16);
        for (var i = 0; i < encoded.length; i = i + 2) {
            part = encoded.substring(i, i + 2);
            ssid += String.fromCharCode(parseInt(part, 16) - tailhex);
        }
        return ssid.replace(/\//g, "").match(/\d{8}/)[0];
    }

    var pageurl = window.location.href;
    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((i, el) => {
            let bookname = slim(jQuery(el).text());
            jQuery(el).find("a").after(' | <a style="font-size: 80%; color: orange;" href="http://book.ucdrs.superlib.net/search?sw=' + bookname + '&bCon=&ecode=utf-8&channel=search&Field=1" target="_blank">参考联盟</a>');
        });
    } else if (pageurl.includes("book.douban.com/works")) {
        jQuery("div.bkdesc > a.pl2").each((i, el) => {
            let bookname = slim(jQuery(el).text());
            jQuery(el).after(' | <a style="font-size: 80%; color: orange;" href="http://book.ucdrs.superlib.net/search?sw=' + bookname + '&bCon=&ecode=utf-8&channel=search&Field=1" target="_blank">参考联盟</a>');
        });
    } else if (pageurl.includes("book.douban.com/cart")) {
        jQuery("td.book_title > a").each((i, el) => {
            let bookname = slim(jQuery(el).text());
            jQuery(el).after(' | <a style="font-size: 80%; color: orange;" href="http://book.ucdrs.superlib.net/search?sw=' + bookname + '&bCon=&ecode=utf-8&channel=search&Field=1" target="_blank">参</a>');
        });
    } else if (pageurl.includes("www.douban.com/doulist")) {
        jQuery("div.title > a").each((i, el) => {
            let bookname = slim(jQuery(el).text());
            let $src = slim(jQuery(el).parent().prev().prev().text());
            if ($src == "来自:豆瓣读书") {
                jQuery(el).after(' | <a style="font-size: 80%; color: orange;" href="http://book.ucdrs.superlib.net/search?sw=' + bookname + '&bCon=&ecode=utf-8&channel=search&Field=1" target="_blank">参考联盟</a>');
            }
        });
    } else if (pageurl.match("book.douban.com.*/(series|tag|do|wish|collect)")) {
        jQuery("div.info > h2 > a").each((i, el) => {
            let bookname = slim(jQuery(el).text());
            jQuery(el).after(' | <a style="font-size: 80%; color: orange;" href="http://book.ucdrs.superlib.net/search?sw=' + bookname + '&bCon=&ecode=utf-8&channel=search&Field=1" target="_blank">参考联盟</a>');
        });
    } else if (pageurl.includes("book.douban.com/author")) {
        jQuery("h6 > a").each((i, el) => {
            let bookname = slim(jQuery(el).text());
            jQuery(el).after(' | <a style="font-size: 80%; color: orange;" href="http://book.ucdrs.superlib.net/search?sw=' + bookname + '&bCon=&ecode=utf-8&channel=search&Field=1" target="_blank">参考联盟</a>');
        });
    } else if (pageurl.includes("book.douban.com/subject")) {
        let json = jQuery("script[type='application/ld+json']").text();
        let st = json.match(/"name" : "(.*?)",/)[1];
        let m = json.match(/"isbn" : "(.*?)",/);
        if (m) {
            st = m[1];
            jQuery("div#mainpic > a.nbg").after('<br><a href="http://book.ucdrs.superlib.net/search?sw=' + st + '&bCon=&ecode=utf-8&channel=search&Field=All" target="_blank">参考联盟</a>');
        }
        else {
            jQuery("div#mainpic > a.nbg").after('<br><a href="http://book.ucdrs.superlib.net/search?sw=' + st + '&bCon=&ecode=utf-8&channel=search&Field=1" target="_blank">参考联盟</a>');
        }
    } else if (pageurl.includes("book.ucdrs.superlib.net/search")) {
        jQuery('td[id="b_img"]').each((i, el) => {
            let bookid = jQuery(el).parent("tr").find('input[name*="ssid"]').val();
            let bookname = jQuery(el).parent("tr").find('input[name*="title"]').val().replaceAll(/<.*?>/g, "");
            if (bookname) {
                jQuery(el).parent().children().last().find("a").after(' | <a href="https://search.douban.com/book/subject_search?search_text=' + bookname + '" target="_blank">豆瓣</a>');
            }
            if (bookid) {
                jQuery(el).after(showbid(bookid, "SS号"));
            } else if ((bookid = jQuery(el).find("a[href]").attr("href").match(/dxNumber=(\d+)/))) {
                jQuery(el).after(showbid(bookid[1], "DX号"));
            }
        });
    } else if (pageurl.includes("//cadal.edu.cn/cadalinfo/search")) {
        jQuery('a.title').each((i, el) => {
            let bookid = jQuery(el).attr("onclick").match(/'\w+'/)[0].replace(/'/g, "").replace("hj", "");
            jQuery(el).parent().parent().prev().find("a").after(showbid("CD" + bookid, "CADAL号<br>"));
            let bookname = jQuery(el).text().trim();
            jQuery(el).after(' | <a href="https://search.douban.com/book/subject_search?search_text=' + bookname + '" target="_blank">豆瓣</a>');
        });
    } else if (pageurl.includes("://cadal.edu.cn/cardpage/bookCardPage?")) {
        let bookid = pageurl.match(/ssno=(\w+)/)[1];
        jQuery('div.title_img').each((i, el) => {
            let st = jQuery("span.title").text().trim();
            let m = jQuery(el).next().text().match(/ISBN:(.*?)\n/);
            if (m) {
                st = m[1];
            }
            jQuery(el).find("a").after(showbid("CD" + bookid, "CADAL号<br>"));
            jQuery("span.title").after(' | <a href="https://search.douban.com/book/subject_search?search_text=' + st + '" target="_blank">豆瓣</a>');
        });
        jQuery("#menu_area").show();
    } else if (pageurl.includes("/search") && jQuery('#dxid0').val()) {
        jQuery('div[class="divImg"]').each((i, el) => {
            let ssid = jQuery(el).prev().val();
            let dxid = jQuery(el).prev().prev().val();
            let bookname = jQuery(el).parent().find('input[name*="title"]').val().replaceAll(/<.*?>/g, "");
            if (bookname) {
                jQuery(el).next().find("dt").find("a").after(' | <a href="https://search.douban.com/book/subject_search?search_text=' + bookname + '" target="_blank" style="color: blue">豆瓣</a>');
            }
            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("/views/specific/")) {
        let m = jQuery("script:contains(send_requestajax)").text().match(/ssn=(\d{3,})/);
        let img = jQuery("div.tubookimg>img");
        if (m) {
            img.after(showbid(m[1], "SS号"));
        } else if ((m = pageurl.match(/dxNumber=(\d+)/))) {
            img.after(showbid(m[1], "DX号"));
        }
        let st = jQuery("div.tutilte").text();
        let m2 = jQuery("div.tubox").find("dl").text().match(/【ISBN号】(.*?)\n/);
        if (m2) {
            st = m2[1];
        }
        img.after('<p style="text-align: center"><a href="https://search.douban.com/book/subject_search?search_text=' + st + '" target="_blank">豆瓣</a></p>');
    } else if (pageurl.includes("bookDetail.jsp?") && jQuery('input#dxid').val()) {
        let m = jQuery("div#bookphoto").html().match(/CoverNew.dll\?iid=(\w{40,56}\b)/);
        let m1 = jQuery("script:contains(send_requestlib)").text().match(/ssn=(\d{3,})/);
        let img = jQuery("#grade1").prev();
        if (m) {
            img.after(showbid(iid2ssid(m[1]), "SS号"));
        } else if (m1) {
            img.after(showbid(m[1], "SS号"));
        } else if ((m = pageurl.match(/dxNumber=(\d+)/))) {
            img.after(showbid(m[1], "DX号"));
        }
        let st = jQuery("input#dxid").prev().text();
        let m2 = jQuery("div.card_text").find("dl").text().match(/ISBN号 :(.*?)\n/);
        if (m2) {
            st = m2[1];
        }
        img.after('<p style="text-align: center"><a href="https://search.douban.com/book/subject_search?search_text=' + st + '" target="_blank">豆瓣</a></p>');
    }
})();