图书搜索联盟

查询读秀、超星、龙岩、长春图书馆是否有书互助,读秀ss号,查询下架的ss号,方便用户查询试读图书是否可以获取全文PDF;协助解决很多用户无法安装问题,让用户2分钟内学会操作,增加用户自由下载功能,免费72小时内可以获取PDF,改进在学校网站使用自建域名不能访问的问题 读秀超星龙岩全国图书馆参考联盟。

// ==UserScript==
// @name			图书搜索联盟
// @namespace		lianmeng.duxiu
// @version			2.1.5
// @include			*search*
// @include			*bookDetail.jsp?*
// @include			*book.do?go=guide*
// @include			*book.do?go=showmorelib*
// @include			*searchEBook*
// @include			*www.duxiu.com*
// @include			*n/jpgfs/book/base*
// @include         *n/slib/book/slib*
// @description		查询读秀、超星、龙岩、长春图书馆是否有书互助,读秀ss号,查询下架的ss号,方便用户查询试读图书是否可以获取全文PDF;协助解决很多用户无法安装问题,让用户2分钟内学会操作,增加用户自由下载功能,免费72小时内可以获取PDF,改进在学校网站使用自建域名不能访问的问题 读秀超星龙岩全国图书馆参考联盟。
// @copyright		tususearchlianmeng
// @author           tususearchlianmeng
// @grant			none
// @license
// ==/UserScript==



//获取当前页面完整地址
var lianmengduxiuurl = window.location.href;
//定义统一文字的样式
var duxiustyle = "font-family:Arial, Helvetica, sans-serif,Verdana,SimSun;color:red;font-size:15px;font-weight:bold;display:inline-block;";
duxiustyle += "margin-top:8px;margin-bottom:6px;text-align:center;";
var payurl = "https://help.dushupdf.com/ebook=";
var dispalytex = "图书咨询";
var ssname = "myssnumber";
//定义定时器对象
var temptime = null;
var deltemptime = null;
var bookquestiontextidclass = 'mysstext';
var buttonstyle="color:green;font-size:15px;font-weight:bold;text-decoration:none;";
//定义基本公用函数

//全局对象
var mybook = {
    DeCode: function (LmEnCodeStr) {
        var decodeStr = '';
        var baseNumStr = LmEnCodeStr.substring(LmEnCodeStr.length - 2);
        var baseNum = parseInt(baseNumStr, 16);
        var myCodeStr = LmEnCodeStr.substring(0, LmEnCodeStr.length - 16);
        for (var i = 0; i < myCodeStr.length; i = i + 2) {
            decodeStr += mybook['GetSubString'](myCodeStr, baseNum, i);
        }
        return decodeStr;
    },
    GetEncode: function (strImgSrc) {
        var iidStr = strImgSrc.match(/iid\=\w+/g)[0];
        return iidStr.replace('iid=', '');
    },
    GetSSID: function (strImgSrc) {
        try{
            var ssidStr = mybook['DeCode'](mybook['GetEncode'](strImgSrc));
            return mybook['TrimString'](ssidStr);
        }catch(err){
            var  bodycontent =document.body.innerHTML;
            var  num= /(?<=ssn=)(\d{8,40})/g;
            var  cnums=bodycontent.match(num);
            var  ssid =cnums[0] ||'';
            return  ssid;
        }
    },
    TrimString: function (str) {
        var PutStr = "";
		str =str.replace(/\//g,'');
        if(str){
              PutStr = str.match(/\d{8,}/);
             return PutStr.toString();
           }
      return '';
    },
    GetSubString: function (LmEnCodeStr, BaseNum, startIndex) {
        var ts = "";
        ts = LmEnCodeStr.substring(startIndex, startIndex + 2);
        var i = parseInt(ts, 16) - BaseNum;
        ts = String.fromCharCode(i);
        return ts;
    },
    getValueFromUrl: function (myfield) {
        var str = myfield + "=";
        if (lianmengduxiuurl.indexOf(str) != -1) {
            var reg = new RegExp(myfield + "\\=\\w+");
            var fieldStr = lianmengduxiuurl.match(reg)[0];
            myfield = myfield.toString();
           return fieldStr.replace(myfield + "=", "");

        }
    },
    getValueFromUrl2: function (URL, myfield) {
        var str = myfield + "=";
        if (URL.indexOf(str) != -1) {
            var reg = new RegExp(myfield + "\\=\\w+");
            var fieldStr = URL.match(reg)[0];
            return fieldStr.replace(myfield + "=", "");
        }
    },
    GetSSIDDXID: function (sid, did) {
        //获取ssid
        var ssid = mybook['GetSSIDByID'](sid, "value");
        //获取dxid
        var dxid = mybook['GetSSIDByID'](did, "value");
        return ssid==''?dxid:ssid;
    },
    GetSSIDByID: function (a, b) {
        var ssidNode = document.getElementById(a);
        return ssidNode.getAttribute(b);
    },
    CreateSSIDNodet: function (ssid, strID) {
        //创建临时变量
        var tempNode = document.createElement("p");
        tempNode.className = strID;
        tempNode.style = duxiustyle;
        tempNode.innerHTML = "SS号  " + ssid;
        return tempNode;
    },
    CreateSSIDNode: function (ssid) {
        var myid = ssname;
        return mybook['CreateSSIDNodet'](ssid, myid);
    },
    CreateNodetwo:function (ssid,strID)
    {
        var ssNode = document.createElement("p");
		if(ssNode){
			ssNode.className=strID;
			ssNode.style=duxiustyle;
			ssNode.innerHTML="SS 号"+ssid;
		}
        return ssNode;
    }
};


//图书对象 删除多余P
function itembook(bookphoto) {
    if (bookphoto != null) {
        var phtml = bookphoto.getElementsByTagName("p");
        if (phtml.length == 0) {
            return false;
        } else if (phtml.length > 0) {
            //判断是否 执行到指定位置
            var myself = document.getElementsByClassName("bookquestion");
            if (myself != null) {
                if (deltemptime != null) {
                    window.clearInterval(deltemptime);
                    deltemptime = null;
                }
            }
            var fatherttemp = null;
            for (var i = 0; i < phtml.length; i++) {
                fatherttemp = phtml[0].parentNode;
                if (phtml[i].className.indexOf('bookquestion') != -1 && (i !== 0 || i !== 1)) {
                    fatherttemp.insertBefore(phtml[i], phtml[1]);
                }
                if (phtml[i].className.indexOf('myssnumber') != -1 && (i !== 0 || i !== 1)) {
                    fatherttemp.insertBefore(phtml[i], phtml[0]);
                }
            }
        }
    }
}

//获取参数
function getQueryString(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
    var r = window.location.search.substr(1).match(reg);
    if (r != null) return unescape(r[2]); return null;
}




//定义统一对象
var duxiuapp = {
    run: function () {
        //封面页展示图书显示ssid
        var isDuxiuflag = lianmengduxiuurl.indexOf("www.duxiu.com") != -1;
        if (isDuxiuflag) {
            var myul = document.querySelector("ul.zpicImg");
            var mybooks = myul.querySelectorAll("li");
            for (var i = 0; i < mybooks.length; i++) {
                var myCov = mybooks[i].querySelector("img").src.toString();
                var ssid = mybook['GetSSID'](myCov);
                var ssNode = mybook['CreateNodetwo'](ssid, ssname + i);
                mybooks[i].appendChild(ssNode);
            }
        }

        //搜索页显示ssid
        var isSearch = lianmengduxiuurl.indexOf("search?") != -1;
        var isnotpagkage = lianmengduxiuurl.indexOf("book/search?") == -1;
        var notAdvsearch = lianmengduxiuurl.indexOf("advsearch") == -1;
        if (isSearch && notAdvsearch && isnotpagkage) {
            var subdomain = document.getElementsByName("sp.subdomain")[0];
            var isDuxiu = lianmengduxiuurl.indexOf("book.duxiu.com/search?") != -1 || (document.body.innerHTML.indexOf("读秀") != -1 && lianmengduxiuurl.indexOf("search?Field=all&channel=search") != -1) ||  (document.body.innerHTML.indexOf("读秀") != -1 && lianmengduxiuurl.indexOf("channel=search&Field=all") != -1);


       var isDuxiu=lianmengduxiuurl .indexOf("book.duxiu.com/search?") != -1 ||  (document.body.innerHTML.indexOf("读秀")!=-1 && lianmengduxiuurl .indexOf("search") != -1);
           var channel =  getQueryString('channel');
            var isCcelib=lianmengduxiuurl .indexOf("book.ccelib.com/search?") != -1;
            if ( isDuxiu||isCcelib) {
                var mybooks = document.getElementsByClassName("books");
                for (var i = 0; i < mybooks.length; i++) {
                    var listDL = mybooks[i].querySelector("dl");
                    listDL.style.minHeight = "210px";
                    var ssid = mybook['GetSSIDDXID']("ssid" + i, "dxid" + i);
                    var ssNode = mybook['CreateNodetwo'](ssid, ssname + i);
                    var divImg = mybooks[i].querySelector(".divImg");
                    var infoAnchor = divImg.querySelector("a").href;
                    var oldstr = "bookDetail.jsp?dxNumber=";
                    var newstr = "book.do?go=showmorelib&type=1&dxid=";
                    var scgAnchor = payurl + ssid;
                    var cyuiosooogbutton = document.createElement("a");
                    cyuiosooogbutton.href = scgAnchor;
                    cyuiosooogbutton.target = "_blank";
                    cyuiosooogbutton.style = "color:green;font-size:15px;font-weight:bold;text-decoration:none;";
                    cyuiosooogbutton.innerHTML = dispalytex;
                    var csgP = document.createElement("p");
                    csgP.style = "text-align:center;";
                    csgP.className = "bookquestion";
                    csgP.appendChild(cyuiosooogbutton);
                    divImg.appendChild(ssNode);
                    divImg.appendChild(csgP);
                }
            }
            else {
                var duxiubooks = document.getElementsByClassName("book1");
                for (var i = 0; i < duxiubooks.length; i++) {
                    var ssid = mybook['GetSSIDDXID']("ssid" + i, "dxid" + i);
                    var ssNode = mybook['CreateNodetwo'](ssid, ssname + i);
                    var infoUrl = document.getElementById("url" + i).value;
                    var dxid = mybook['getValueFromUrl2'](infoUrl, "dxNumber");
                    var dValue = mybook['getValueFromUrl2'](infoUrl, "&d");
                    var myhref = payurl + ssid;
                    var buttonopop = document.createElement("a");
                    buttonopop.href = myhref;
                    buttonopop.target = "_blank";
                    buttonopop.style = "color:green;font-size:15px;font-weight:bold;text-decoration:none;";
                    buttonopop.innerHTML = dispalytex;
                    var csgP = document.createElement("p");
                    csgP.className = "bookquestion";
                    csgP.style = "text-align:center;display:inline-block;";
                    csgP.appendChild(buttonopop);
                    var tdelems = duxiubooks[i].getElementsByTagName("td");
                    for (var j = 0; j < tdelems.length; j++) {
                        if (tdelems[j].id === "b_img") {
                            var imgNode = tdelems[j];
							if(imgNode){
							  var insertPoint = imgNode.nextSibling;
								var pNode = insertPoint.parentNode;
								pNode.insertBefore(ssNode, insertPoint);
								pNode.insertBefore(csgP, insertPoint);
							}
                        }
                    }
                }
            }
        }
        if (lianmengduxiuurl.indexOf("bookDetail.jsp?") != -1) {
            if (lianmengduxiuurl.indexOf("/views/specific/") == -1) {
                var bookphoto = document.getElementById("bookphoto");
                var imgsrc = bookphoto.querySelector("img").src;
                var ssid = mybook['GetSSID'](imgsrc);
                var ssNode = mybook['CreateSSIDNode'](ssid);
                var grade1 = document.getElementById("grade1");
                bookphoto.insertBefore(ssNode, grade1);
                var bnt_content = document.querySelector(".bnt_content");
                if (!bnt_content) {
                    bnt_content = document.createElement("dd");
                    bnt_content.className = "bnt_content";
                    var card_text = document.querySelector(".card_text");
                    var card_dl = card_text.querySelector("dl");
                    card_dl.appendChild(bnt_content);
                }
                var bnt_innerHtml = bnt_content.innerHTML;
                var d = mybook['getValueFromUrl']("&d");
                var dxid = mybook['getValueFromUrl']("dxNumber");
                var gyoutabutton = document.createElement("a");
                var oldstr = "bookDetail.jsp?dxNumber=";
                var newstr = "book.do?go=showmorelib&type=1&dxid=";
                var newAnchor = payurl + ssid;
                gyoutabutton.href = newAnchor;
                gyoutabutton.id = "bookquestion";
                gyoutabutton.className = "bnt_book leftfloat";
                gyoutabutton.style = buttonstyle;
                gyoutabutton.target = "_blank"
                gyoutabutton.innerHTML = '图书PDF下载';
                bnt_content.appendChild(gyoutabutton);
            }
            else {

            
                try{
                    var tubookimg = document.querySelector(".tubookimg"),imgsrc = tubookimg.querySelector("img").src,ssid = mybook.GetSSID(imgsrc), ssNode = mybook['CreateSSIDNode'](ssid);
                    tubookimg.appendChild(ssNode);
                    var gyoutabutton = document.createElement("a");
                    var dxid = mybook['getValueFromUrl']("dxNumber");
                    var dvalue = mybook['getValueFromUrl']("&d");
                    var myhref = payurl + ssid;
                    gyoutabutton.href = myhref;
                    gyoutabutton.target = "_blank";
                    gyoutabutton.style = buttonstyle;
                    gyoutabutton.innerHTML = dispalytex;
                    var pTemp = document.createElement("p");
                    pTemp.style = "text-align:center;";
                    pTemp.className = bookquestiontextidclass;
                    pTemp.appendChild(gyoutabutton);
                    tubookimg.appendChild(pTemp);
                }catch(err){
                    //处理错误
                         var gyoutabutton = document.createElement("a");
                         var  bodycontent =document.body.innerHTML;
                         var  num= /(?<=ssn=)(\d{8,40})/g
                         var  cnums=bodycontent.match(num);
                         if(cnums){
                              ssid =cnums[0] ||'';
                         }else{
                             var inputElements = document.getElementsByName('dxid');
                             if(inputElements.length>0){
                                 ssid = inputElements[0].value;
                             }
                         }
                     var myhref = payurl + ssid;
                    gyoutabutton.href = myhref;
                    gyoutabutton.target = "_blank";
                    gyoutabutton.style = buttonstyle;
                    gyoutabutton.innerHTML = dispalytex;
                    var pTemp = document.createElement("p");
                    pTemp.style = "text-align:center;";
                    pTemp.className = bookquestiontextidclass;
                    pTemp.appendChild(gyoutabutton);

                    // 创建新的 <p> 元素
                    var newParagraph = document.createElement('p');

                    // 设置该 <p> 元素的 id、样式和文本内容
                    newParagraph.id = 'booklianmeng';
                    newParagraph.style.fontFamily = 'Verdana';
                    newParagraph.style.color = '#bb0101';
                    newParagraph.style.fontSize = '15px';
                    newParagraph.style.fontWeight = 'bold';
                    newParagraph.style.textAlign = 'center';
                    newParagraph.style.marginTop = '5px';
                    newParagraph.style.marginBottom = '5px';
                    newParagraph.textContent = ssid;
                    tubookimg.appendChild(newParagraph);
                    tubookimg.appendChild(pTemp);


                }
            }
        }
    },
     //纠正错误定位
    clearerrcontent: function () {
        //删除其他元素 清理页面
        //插入直查询是否有其他结点,有则删除
        //信息页面显示ssid
        if (lianmengduxiuurl.indexOf("bookDetail.jsp?") != -1) {
            //读秀信息页面
            if (lianmengduxiuurl.indexOf("/views/specific/") == -1) {
                //获取ssid
                var bookphoto = document.getElementById("bookphoto");
                if (bookphoto != null) {
                    var phtml = bookphoto.getElementsByTagName("p");
                    if (phtml.length == 0) {
                        return false;
                    } else if (phtml.length > 0) {
                        //判断是否 执行到指定位置
                        var myself = document.getElementsByClassName("myssnumber");
                        if (myself != null) {
                            window.clearInterval(temptime);
                            temptime = null;
                        }

                    }
                }
                //删除读秀详情页面的 错位
                var bnt_content = document.getElementsByClassName("bnt_content");
                if (bnt_content != null) {
                    var phtmls = bnt_content[0].getElementsByTagName("a");
                    var myself = document.getElementById("bookquestion");
                    if (myself != null) {
                        window.clearInterval(temptime);
                        temptime = null;
                    }
                    if (phtmls.length > 0) {
                        var parenttempss = null;
                        for (i = 2; i < phtmls.length; i++) {
                            parenttempss = phtmls[0].parentNode;
                            if ('bookquestion' == phtmls[i].id && i !== 0) {
                                parenttempss.insertBefore(phtmls[i], phtmls[0]);
                            }
                        }
                    }
                }
            }
            //深圳文献港,全国图书馆参考咨询联盟图书信息页
            else {
                //获取ssid
                //图书馆联盟
                var tubookimg = document.querySelector(".tubookimg");
                if (tubookimg != null) {
                    var phtml = tubookimg.getElementsByTagName("p");
                    if (phtml.length == 0) {
                        return false;
                    } else if (phtml.length > 0) {
                        //判断是否 执行到指定位置
                        var myself = document.getElementsByClassName("myssnumber");
                        if (myself != null) {
                            window.clearInterval(temptime);
                            temptime = null;
                        }

                        var parenttemp = null;
                        for (var i = 0; i < phtml.length; i++) {
                            parenttemp = phtml[0].parentNode;
                            if (phtml[i].className.indexOf('myssnumber') != -1 && (i !== 0 || i !== 1)) {
                                parenttemp.insertBefore(phtml[i], phtml[1]);
                            }
                            if (phtml[i].className.indexOf('bookquestiontextidclass') != -1 && (i !== 0 || i !== 1)) {
                                parenttemp.insertBefore(phtml[i], phtml[0]);
                            }
                        }
                    }
                }
            }
        } else {
            window.clearInterval(temptime);
            temptime = null;
        }
    },

    delsearchhtml: function () {
        //搜索页显示ssid
        var isSearch = lianmengduxiuurl.indexOf("search?") != -1;
        var nggggghotBaoku = lianmengduxiuurl.indexOf("book/search?") == -1;
        var notAdvhjksearch = lianmengduxiuurl.indexOf("advsearch") == -1;
        if (isSearch && notAdvhjksearch && nggggghotBaoku) {
            var subdomain = document.getElementsByName("sp.subdomain")[0];
            //读秀和长春图书馆的情况
            //var isDuxiu=subdomain.value == "book.duxiu.com";
            //var isCcelib=subdomain.value == "book.ly.superlib.net";
            var isfpagDuxiu = lianmengduxiuurl.indexOf("book.duxiu.com/search?") != -1;
            var isCcelib = lianmengduxiuurl.indexOf("book.ly.superlib.net/search?") != -1;
            if (isfpagDuxiu || isCcelib) {
                //获取书本列表节点
                var jjjjjjj = document.getElementsByClassName("books");
                for (var i = 0; i < jjjjjjj.length; i++) {
                    itembook(jjjjjjj[i]);
                }
            } else {
                //深圳文献港,全国图书馆联盟搜索页
                var jjjjjjj = document.getElementsByClassName("book1");
                for (var i = 0; i < jjjjjjj.length; i++) {
                    itembook(jjjjjjj[i]);
                }
            }
        } else {
            window.clearInterval(deltemptime);
            deltemptime = null;
        }
    }
};

try {
    duxiuapp.run();
    temptime = setInterval(function () {
         duxiuapp.clearerrcontent();
    }, 50);
    deltemptime = setInterval(function () {
         duxiuapp.delsearchhtml();
    }, 50);
} catch (e) {
    //打印错误日志
    console.log(e);
}