Greasy Fork

Greasy Fork is available in English.

图书互助

可以直接显示文献的ss号或dxid进行互助,,可以秒传和生成pdf,PC、手机、MAC、苹果设备都可用,可查询全国图书馆参考咨询联盟、超星、读秀、龙岩、东莞图书馆,获取全文PDF。

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name	    图书互助
// @namespace       安装在图书馆参考咨询联盟可查看SS号
// @version	    1.0.5
// @include	    *book.dglib.superlib.net/*
// @include	    *book.ucdrs.superlib.net*
// @include	    *www.sslibrary.com/*
// @include         *book.duxiu.com*
// @description     可以直接显示文献的ss号或dxid进行互助,,可以秒传和生成pdf,PC、手机、MAC、苹果设备都可用,可查询全国图书馆参考咨询联盟、超星、读秀、龙岩、东莞图书馆,获取全文PDF。
// @copyright	    pdfshuwu
// @grant	    none
// @namespace pdfshuwu
// @license      MIT
// ==/UserScript==

function fetchSsidByDxid(dxid) {
    var myHeaders = new Headers();
    myHeaders.append("User-Agent", "Apifox/1.0.0 (https://apifox.com)");
    myHeaders.append("Content-Type", "application/json");

    var raw = JSON.stringify({ "dxDxid": dxid });

    var requestOptions = {
        method: 'POST',
        headers: myHeaders,
        body: raw,
        redirect: 'follow'
    };

    return fetch("https://apicf.pdfshuwu.com/api/front/duxiu/search", requestOptions)
        .then(response => response.json())
        .then(data => {
            if (data.code === "200" && data.data && data.data.lists && data.data.lists.length > 0) {
                return data.data.lists[0].dxSsid; // 返回SSID
            } else {
                return "查询不到书籍,数据库暂时只有2018年以内出版的";
            }
        });
}
function fetchSsidBySsid(ssid) {
    var myHeaders = new Headers();
    myHeaders.append("User-Agent", "Apifox/1.0.0 (https://apifox.com)");
    myHeaders.append("Content-Type", "application/json");

    var raw = JSON.stringify({ "dxSsid": ssid });

    var requestOptions = {
        method: 'POST',
        headers: myHeaders,
        body: raw,
        redirect: 'follow'
    };

    return fetch("https://apicf.pdfshuwu.com/api/front/duxiu/search", requestOptions)
        .then(response => response.json())
        .then(data => {
            if (data.code === "200" && data.data && data.data.lists && data.data.lists.length > 0) {
                return data.data.lists[0].dxSsid; // 返回SSID
            } else {
                return "查询不到书籍,数据库暂时只有2018年以内出版的";
            }
        });
}
// 跳转
function createBookLink(ssid) {
    var b = document.createElement("a");
    b.target = "_blank";
    b.innerText = "图书互助";
    b.style.color = 'green';
    b.style.fontSize = '14px';
    b.style.fontWeight = 'bold';
    b.href = "https://www.pdfshuwu.com/details/" + ssid;
    document.body.appendChild(b);
    return b;
}

function handleExample1() {
    var bookList = document.querySelectorAll("table.book1");
    console.log(bookList, 121);
    var btnInput = document.getElementsByClassName("btnInput")
    if (bookList.length == 0) {
        bookList = document.querySelectorAll("table.books");
    }
    if (bookList.length == 0) {
        // bookList = document.querySelectorAll("table");
        bookList = document.querySelectorAll(".books li");
    }
    if (btnInput.length == 1) {
        for (var j = 0; j < bookList.length; j++) {
            (function (index) {
                var dxid = document.getElementById("dxid" + index);
                var dxidVal = dxid.value;
                fetchSsidByDxid(dxidVal).then(ssid => {
                    var p = document.createElement("p");
                    p.innerText = "SSID: " + ssid;
                    p.style.color = 'red';
                    p.style.fontSize = '16px';
                    p.style.fontWeight = 'bold';
                    var blink = createBookLink(ssid);
                    if (blink) {
                        dxid.parentNode.appendChild(p)
                        dxid.parentNode.appendChild(blink)
                    }
                }).catch(error => {
                    console.error('Error fetching ssid:', error);
                });
            })(j);
        }
    } else {
        for (var i = 0; i < bookList.length; i++) {
            (function (index) {
                var dxid = document.getElementById("dxid" + index);
                var dxidVal = dxid.value;
                fetchSsidByDxid(dxidVal).then(ssid => {
                    var p = document.createElement("p");
                    p.innerText = "SSID: " + ssid;
                    p.style.color = 'red';
                    p.style.fontSize = '16px';
                    p.style.fontWeight = 'bold';
                    var blink = createBookLink(ssid);
                    if (blink) {
                        var tr = document.createElement('tr');
                        var td = document.createElement('td');
                        td.colSpan = '3';
                        td.style.paddingLeft = '3%';
                        td.appendChild(p);
                        td.appendChild(blink);
                        tr.appendChild(td);
                        dxid.parentNode.parentNode.parentNode.appendChild(tr);
                    }
                }).catch(error => {
                    console.error('Error fetching ssid:', error);
                });
            })(i);
        }
    }
}

function getSsidFromUrl(queryString) {
    // 创建一个 URL 对象
    const params = new URLSearchParams(queryString)

    // 获取 ssid 参数的值
    var ssidValue = params.get("ssid");
    return ssidValue
}

function handleExample2() {
    var observer = new MutationObserver(function (mutationsList, observer) {
        // 当页面中的 DOM 发生变化时,检查是否加载了目标元素
        var liElements = document.querySelectorAll("li.fl.zli_info");

        if (liElements.length > 0) {
            console.log("li.fl.zli_info 元素已经加载");
            liElements.forEach(function (li) {
                var aTag = li.querySelector("a");
                // 如果 a 标签存在,则获取 href 属性值
                if (aTag) {
                    var hrefValue = aTag.getAttribute("href");

                    fetchSsidBySsid(getSsidFromUrl(hrefValue)).then(ssid => {

                        var p = document.createElement("p");
                        p.innerText = "SSID: " + ssid;
                        p.style.color = 'red';
                        p.style.fontSize = '15px';
                        p.style.fontWeight = 'bold';
                        var blink = createBookLink(ssid);
                        if (blink) {
                            var tr = document.createElement('tr');
                            var td = document.createElement('td');
                            td.colSpan = '3';
                            td.style.paddingLeft = '3%';
                            td.appendChild(p);
                            td.appendChild(blink);
                            tr.appendChild(td);
                            console.log(liElements);
                            aTag.parentNode.parentNode.appendChild(tr);
                        }
                    }).catch(error => {
                        console.error('Error fetching ssid:', error);
                    });

                }
            });


            // 停止监听
            observer.disconnect();
        }
    });

    // 配置 MutationObserver,监听子节点的变化
    observer.observe(document.body, { childList: true, subtree: true });
}
function main() {
    const currentUrl = window.location.href;
    // 根据不同的网站 URL 来执行对应的函数
    if (currentUrl.includes("book.ucdrs.superlib.net/")) {
        handleExample1();
    } else if (currentUrl.includes("www.sslibrary.com")) {
        handleExample2();
    } else {
        console.log("该网站没有特定操作");
    }
}

function detailMain() {
    var string = location.href.match(/(Number).*?(?=&)/);
    var value = string ? string[0].replace('Number=', '') : '';
    const currentUrl = window.location.href;
    // 根据不同的网站 URL 来执行对应的函数
    if (currentUrl.includes("book.ucdrs.superlib.net/")) {
        fetchSsidByDxid(value).then(ssid => {
            var p = document.createElement("p");
            p.innerText = 'SSID:' + ssid;
            p.style.color = 'red';
            p.style.fontSize = '16px';
            p.style.fontWeight = 'bold';

            var blink = createBookLink(ssid);
            var bookImg = document.getElementsByClassName('tubookimg')[0];
            if (bookImg && blink) { // 检查bookImg是否存在
                bookImg.appendChild(p);
                bookImg.appendChild(blink);
            } else {
                console.error('Element not found: .tubookimg');
            }
        }).catch(error => {
            console.error('Error fetching ssid:', error);
        });
    } else {
        console.log("该网站没有特定操作");
    }

}

(function () {
    /// entry
    try {
        main();
        detailMain();
    } catch (e) {
        console.error(e);
    }
})();