豆瓣读书显示济南大学图书馆馆藏

在豆瓣读书侧栏中显示济南大学图书馆馆藏信息。同时支持校内外访问。由于学校限制,校外无法定位图书位置,因此本脚本默认为校内访问。若要默认校外请修改 outOfSchool 变量。

// ==UserScript==
// @name         豆瓣读书显示济南大学图书馆馆藏
// @name:      zh-CN
// @namespace    ujn_doubanbook
// @version      1.1
// @description  在豆瓣读书侧栏中显示济南大学图书馆馆藏信息。同时支持校内外访问。由于学校限制,校外无法定位图书位置,因此本脚本默认为校内访问。若要默认校外请修改 outOfSchool 变量。
// @author       Sun
// @license      MIT
// @match        https://book.douban.com/subject/*
// @grant        GM_xmlhttpRequest
// @connect  202.194.76.102
// @connect mlib.ujn.edu.cn
// ==/UserScript==

let outOfSchool = false; // 当前是否处于校外环境下,若是为true,否为false

// 校内根据 marc 和 isbn 获取图书余量
function getBook(marc, isbn, title) {
    GM_xmlhttpRequest({
        method: "GET",
        url: "http://202.194.76.102:8080/opac/ajax_isbn_marc_no.php?marc_no=" + marc + "&isbn=" + isbn,
        onload: function(res) {
            if (res.status == 200) {
                var text = res.responseText;
                var json = JSON.parse(text);
                insertBook(marc, title, json.lendAvl.match(/\d+/g));
                console.log(json);
            }
        }
    });
}

// 校外根据 isbn 获取图书余量
function getBookOutSchool(isbn) {
    GM_xmlhttpRequest({
        method: "GET",
        url: "http://mlib.ujn.edu.cn/search/searchList?kw=" + isbn + "&schoolid=614&xc=6&searchtype=isbn",
        onload: function(res) {
            if (res.status === 200) {
                const temp_element = (new DOMParser()).parseFromString(res.responseText, "text/html");
                // let temp_element = document.createElement('html')
                // temp_element.innerHTML = res.responseText;
                // console.log(temp_element.getElementsByClassName("list")[0].children);
                if (temp_element.getElementsByClassName("list")[0].children.length === 0) {
                    document.getElementById('ujn_lib_booklist').innerHTML = "<p>图书馆没有这本书(提示:可以试试同书的不同版本)</p>";
                }
                for (const li of temp_element.getElementsByClassName("list")[0].children) {
                    let info = JSON.parse(li.getElementsByTagName("input")[0].getAttribute("value"));
                    insertBook(info, info.title, li.innerText.match(/可借\/总藏:(\d+)\/(\d+)/).slice(1, 3).reverse());
                }
            }
        }
    });
}

// 将图书信息插入至侧栏 ujn_lib_booklist 中
function insertBook(marc, title, remains) {
    let ul = document.getElementById('ujn_lib_booklist'); // 侧栏
    let li = document.createElement("li"); // 条目
    li.setAttribute('class', 'mb8 pl');
    let div = document.createElement("div"); // 书名
    div.setAttribute('class', 'meta-wrapper');
    let div_remain = document.createElement("div"); // 余量
    div_remain.setAttribute('class', 'count');
    div_remain.innerText = "馆藏:" + remains[0] + "  可借:" + remains[1];
    let a = document.createElement("a"); // 链接
    if(!outOfSchool) {
        a.setAttribute('href', 'http://202.194.76.102:8080/opac/item.php?marc_no=' + marc);
    } else {
        a.setAttribute('href', 'javascript:void(0)');
        a.addEventListener("click", () => { openBookPage(marc); });
    }

    a.innerText = title;
    div.appendChild(a);
    div.appendChild(div_remain);
    li.appendChild(div);
    ul.appendChild(li);
}

// 校外打开图书页面
function openBookPage(info) {
    let form = document.createElement("form");
    form.setAttribute('id', 'postform');
    form.setAttribute('method', 'POST');
    form.setAttribute('action', 'https://mlib.ujn.edu.cn/search/bookDetail');
    form.setAttribute('target', 'new_window');

    let xc = document.createElement("input");
    xc.setAttribute("name", "xc");
    xc.setAttribute("value", 6);
    form.appendChild(xc);

    let sid = document.createElement("input");
    sid.setAttribute("name", "schoolid");
    sid.setAttribute("value", 614);
    form.appendChild(sid);

    let dp = document.createElement("input")
    dp.setAttribute("name", "detailParam");
    dp.setAttribute("value", JSON.stringify(info));
    form.appendChild(dp);

    document.head.appendChild(form);
    //window.open('', 'new_Window');
    form.submit();
}

(function() {
    'use strict';

    // 检查 URL 是否合规
    if( ! /https:\/\/book\.douban\.com\/subject\/\d+\/$/.test(location.href) ) {
        return;
    }

    // 侧栏创建显示区域
    let div = document.createElement("div");
    div.setAttribute('class', 'gray_ad');
    div.setAttribute('id', 'ujn_lib');

    let h2 = document.createElement("h2");
    h2.innerText = "济南大学图书馆馆藏";
    div.appendChild(h2);

    let ul = document.createElement("ul");
    ul.setAttribute('id', 'ujn_lib_booklist');
    ul.innerHTML = "<p>查询中</p>";
    div.appendChild(ul);

    document.getElementsByClassName('aside')[0].prepend(div);

    const isbn = document.head.querySelector("meta[property='book:isbn']").content;

    if(!outOfSchool) {
        GM_xmlhttpRequest({
            method: "POST",
            timeout: 2000,
            url: "http://202.194.76.102:8080/opac/ajax_search_adv.php" ,
            data: "{\"searchWords\":[{\"fieldList\":[{\"fieldCode\":\"05\",\"fieldValue\":" + isbn + "}]}],\"filters\":[],\"limiter\":[],\"sortField\":\"relevance\",\"sortType\":\"desc\",\"pageSize\":20,\"pageCount\":1,\"locale\":\"\",\"first\":true}",
            onload: function (res) {
                if (res.status === 200) {
                    document.getElementById('ujn_lib_booklist').innerHTML = "";
                    var json = JSON.parse(res.responseText);
                    console.log(json);
                    let books = json.content;
                    if (books.length === 0) {
                        document.getElementById('ujn_lib_booklist').innerHTML = "<p>图书馆没有这本书</p>";
                    } else {
                        for (const item of books) {
                            getBook(item.marcRecNo, item.isbn, item.title);
                        }
                    }
                }
            },
            ontimeout: function () {
                document.getElementById('ujn_lib_booklist').innerHTML = "<p>请求超时</p><p>不在学校?试试<a id='ujn_switchtoout' href='javascript:void(0);'>校外访问</a></p>";
                document.getElementById('ujn_lib_booklist').addEventListener("click", () => {
                    document.getElementById('ujn_lib_booklist').innerHTML = "";
                    outOfSchool = true;
                    getBookOutSchool(isbn);
                });
            }
        });
    } else {
        document.getElementById('ujn_lib_booklist').innerHTML = "";
        getBookOutSchool(isbn);
    }

})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址