// ==UserScript== // @name douban_shenzhenLib // @name:zh-CN 深圳图书馆图书信息豆瓣脚本 // @namespace http://www.douban.com/note/180166013/ // @description Show book available info in douban book page, adds "Search in Douban" in Shenzhen Libaray opac search page // @description:zh-cn 为豆瓣书籍页面(book.douban.com)添加书籍在深圳图书馆的信息,预借链接,为深圳图书馆查询页面添加“在豆瓣搜索” // @license MIT License // @supportURL http://www.douban.com/note/180166013/ // @version 1.24.14 // @require http://code.jquery.com/jquery-1.4.4.min.js // @match https://book.douban.com/* // @match https://search.douban.com/book/subject_search* // @match https://www.szlib.org.cn/opac/searchShow* // @grant GM_addStyle // @grant GM_xmlhttpRequest // @grant GM_registerMenuCommand // @grant GM_getValue // @grant GM_setValue // @author morningSky // refer books_recommend_THU, bean vine (49911) and others... // @downloadURL https://update.greasyfork.icu/scripts/5898/douban_shenzhenLib.user.js // @updateURL https://update.greasyfork.icu/scripts/5898/douban_shenzhenLib.meta.js // ==/UserScript== // updateDate 2023-11-09 /* reason 1. 更新罗湖、宝安图书馆链接 */ var fDebug = false; var title, isbn, isbn10; var SZLIB_HOST = 'https://www.szlib.org.cn/'; var LIBOPAC_URL = SZLIB_HOST + 'opac/searchShow?library=all&v_tablearray=bibliosm,serbibm,apabibibm,mmbibm,&sortfield=ptitle&sorttype=desc&pageNum=10'; var LIB_API_PARAM_URL = SZLIB_HOST + 'api/opacservice/getQueryResult?library=all&v_tablearray=bibliosm,serbibm,apabibibm,mmbibm,&sortfield=ptitle&sorttype=desc&pageNum=10&v_page=1&v_secondquery=&client_id=t1'; var LIB_API_RESERVABLE_URL = SZLIB_HOST + 'api/opacservice/canPreborrowlist?client_id=t1&'; // 查询索书号 var LIB_API_PREHOLDING_URL = SZLIB_HOST + 'api/opacservice/getpreholding?metaTable=bibliosm&library=all&client_id=t1&metaId='; var LIBBOOK_URL = SZLIB_HOST + 'opac/searchDetail?tablename=bibliosm&library=all&recordid='; var LIB_RESERVE_URL = SZLIB_HOST + 'MyLibrary/Reader-Access.jsp?destPage=' + SZLIB_HOST + 'MyLibrary/ReserveSubmit.jsp&v_tablearray=bibliosm&v_TableName=80000002&v_recno='; var LIB_EXPRESS_URL = SZLIB_HOST + 'MyLibrary/Reader-Access.jsp?destPage=' + SZLIB_HOST + 'opac/searchShow?library=all&v_tablearray=bibliosm,serbibm,apabibibm,mmbibm,&sortfield=ptitle&sorttype=desc&pageNum=10&v_index=isbn&v_value='; var HTML_LOADING = '正在查询图书馆馆藏情况 · · · · · · '; var LIBSEARCH_LINK_PRE = '  htmlStr += '
  • '; htmlStr += '成员馆'; htmlStr += '
  • '; htmlStr += '
  • 在深圳图书馆借阅 · · · · · ·

  • '; htmlStr += ''; return htmlStr; } function setLibMemberStyle() { GM_addStyle('\ #libInfo {\ overflow: visible;\ }\ .libMem {\ z-index: 97;\ position: relative;\ float: right;\ }\ .libMemMenu {\ position: absolute;\ top: -5px;\ left: 0px;\ visibility: hidden;\ }\ .libMem a {\ -moz-border-radius: 7px;\ -webkit-border-radius: 7px;\ border-radius: 7px;\ display: block;\ background: #f6f6f1;\ padding: 5px;\ width: 90px;\ line-height: 160%;\ border: 1px solid #fff;\ }\ .libMem a:hover {\ background: #FFF;\ border: 1px solid #aaa;\ color: #000;\ }\ .libMem:hover .libMemMenu {\ visibility: visible;\ }\ .libMem .libMemLink {\ border: 1px solid #aaa;\ line-height: 100%;\ width: 90px;\ }\ '); } // api/opacservice/canPreborrowlist?tablelist=bibliosm,bibliosm,bibliosm,&metaidlist=934991,1209378,698561, function getReservableQryUrl(bookRecNos) { var qryParam = 'tablelist='; for (var i = 0; i < bookRecNos.length; i++) { qryParam += 'bibliosm,'; } // array.toString: arr[0],arr[1],... qryParam += '&metaidlist=' + bookRecNos + ','; var url = LIB_API_RESERVABLE_URL + qryParam; if (fDebug) console.log('Reservable qryUrl: ' + url); return url; } /* * 图书馆图书查询页面获取图书是否与,是否可快递修改为返回json的形式 */ function appendLibBookInfo(bookRecNos) { if (bookRecNos == null || bookRecNos.length == 0) { return ; } var fMore = (bookRecNos.length > 1); var reservableQry_url = getReservableQryUrl(bookRecNos); GM_xmlhttpRequest({ method: 'GET', url: reservableQry_url, headers: { 'User-agent': 'Mozilla/5.0 (compatible) Greasemonkey' }, onload: function(res) { // the reservable query return is a xml document var fHasReservable = false; var fHasExpress = false; if (fDebug) console.log('preloan : ' + res.responseText); var jsonData = null; try { jsonData = JSON.parse(res.responseText); } catch(ex) { console.log('reservable json parse, ' + ex.message); return ; } var preloanExps = jsonData.data; for (var i = 0; i < preloanExps.length;i++) { if (fDebug) console.log('preloan : ' + i + ', ' + preloanExps[i]); if (preloanExps[i].preloan) { fHasReservable = true; } if (preloanExps[i].express) { fHasExpress = true; } if (fHasReservable && fHasExpress) { break; } } var bookRecNo = bookRecNos[0];// set the first book as default var cacheInfo = '{"bookRecNo":"' + bookRecNo + '", "hasMore":"'+ fMore + '", "reservable":"' + fHasReservable + '", "expressable":"' + fHasExpress + '"}'; GM_setValue(isbn, cacheInfo); appendLibBookHtml(bookRecNo, fMore, fHasReservable, fHasExpress); } // end function(res) } ); } // end appendLibBookInfo function getLibBizLink(linkUrl, linkTitle, linkStr) { return '' + linkStr + ''; } function appendLibBookHtml(bookRecNo, fMore, fHasReservable, fHasExpress) { if (fDebug) console.log('book recNo: ' + bookRecNo + ', fMore: ' + fMore + ', fHasReservable: ' + fHasReservable + ', fHasExpress:' + fHasExpress); var book_url = getLibBookUrl(bookRecNo); var hasMore = isTrue(fMore); var hasReservable = isTrue(fHasReservable); var hasExpress = isTrue(fHasExpress); var htmlStr = ''; htmlStr += '