Greasy Fork

Greasy Fork is available in English.

豆瓣读书揭示北大馆藏

为豆瓣读书增加北京大学图书馆相关资源链接。图书页面右侧的“在哪儿借这本书”中将出现红色图标及“北京大学图书馆”链接,点击链接可以打开北大馆藏目录中该书的检索结果。如果该书有 ISBN(国际标准书号)但查无此书,或没有 ISBN,则改为提供一个按书名检索的链接。

当前为 2017-05-11 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @id           [email protected]
// @name         豆瓣读书揭示北大馆藏
// @namespace    lib.pku.edu.cn
// @version      1.01
// @description  为豆瓣读书增加北京大学图书馆相关资源链接。图书页面右侧的“在哪儿借这本书”中将出现红色图标及“北京大学图书馆”链接,点击链接可以打开北大馆藏目录中该书的检索结果。如果该书有 ISBN(国际标准书号)但查无此书,或没有 ISBN,则改为提供一个按书名检索的链接。
// @author       馆君
// @match        https://book.douban.com/subject/*
// @connect      162.105.138.200
// @grant        GM_xmlhttpRequest
// @grant         GM_setClipboard
// @grant         GM_addStyle
// @grant         GM_setValue
// @grant         GM_getValue
// ==/UserScript==

GM_addStyle("@charset utf-8; #borrowinfo ul img {height: 16px; vertical-align: text-bottom; padding-right: 2px;}");

function getDoc(url, meta, callback) { // XHR 回调函数模板
    GM_xmlhttpRequest({
        method: 'GET',
        url: url,
        headers: {
            'User-agent': window.navigator.userAgent,
            'Content-type': null
        },
        onload: function(responseDetail) {
            var doc = '';
            if (responseDetail.status == 200) {
                doc = new DOMParser().parseFromString(responseDetail.responseText, 'text/html');
                if (doc === undefined) {
                    doc = document.implementation.createHTMLDocument("");
                    doc.querySelector('html').innerHTML = responseText;
                }
            }
            callback(doc, responseDetail, meta);
        }
    });
}

(function() {
    'use strict';

    if($("#borrowinfo").length <= 0) // 如果借阅信息面板不存在,模仿常例创建之
		$("#buyinfo").after($("<div class='gray_ad' id='borrowinfo'><h2><span>在哪儿借这本书</span>&nbsp;&middot;&nbsp;&middot;&nbsp;&middot;&nbsp;&middot;&nbsp;&middot;&nbsp;&middot;</h2><ul class='bs more-after'></ul></div>"));

    $("#borrowinfo ul.more-after").prepend($("<li style='border: none;'><img src='http://lib.pku.edu.cn/portal/sites/default/files/favicon.ico' /><span id='PKULib'>北京大学图书馆</span><span id='searchingPKULib'>……检索中,请稍等</span></li>")); // 创建北大图书馆项目

    var fieldTI = $("h1 span").text(); // 获取豆瓣上的当前书名
	var searchTIurl = "http://162.105.138.200/uhtbin/cgisirsi/x/北大中心馆/0/5?searchdata1=" + fieldTI + "&library=ALL&srchfield1=TI%5ETITLE%5E%5ETitle%25";
    var fieldISBN = $("#info").text().match(/ISBN:.+\d+X?/, "i"); // 获取 ISBN 号(豆瓣的 ISBN 不包含任何连字符)

    if (fieldISBN) {
        fieldISBN = fieldISBN[0].match(/\d+X?/, "i")[0]; // 截取数字部分
        var searchISBNurl = "http://162.105.138.200/uhtbin/isbn/" + fieldISBN;
        getDoc(searchISBNurl, null, function(doc, resp, meta) {
			var searchSumHits = $("div.searchsum_hits .content p", doc).text(); // 单个命中结果
			if (!searchSumHits.match(/\d+\D+of\D+\d+/)) { // 无论中英文版 OPAC 都是这个格式
				var hitListSearchSummary = $("#hitlist .hit_list .hitstop .searchsummary", doc).text(); // 多个命中结果
				if (!/检索到\D+\d+\D+题名/.test(hitListSearchSummary) && !/search found\D+\d+\D+titles/.test(hitListSearchSummary)) {
    				$("#PKULib").append($("<a href='" + searchTIurl + "' target='_blank' title='尝试检索书名'>(ISBN 查无结果)</a>"));
    				$("#searchingPKULib").remove();
					return;
				}
			}
			$("#PKULib").wrap($("<a href='" + searchISBNurl + "' target='_blank' id='PKULibLink' title='馆藏目录检索'></a>")); // 生成按 ISBN 检索的链接
			$("#searchingPKULib").remove();
        });
    } else {
		$("#PKULib").append($("<a href='" + searchTIurl + "&sort_by=PBYR" + "' target='_blank' title='尝试检索书名'>(该书无 ISBN)</a>")); // 因为没有 ISBN 所以增加 sort_by 参数,按从旧到新排序搜索结果
		$("#searchingPKULib").remove();
	}
})();