您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Using https://library.jccc.edu/home/?newlibrary this script interacts with http://jccc.summon.serialssolutions.com/api/search to get all results as quickly as possible for a particular query. It can handle 1000 results total, because that is where the api cuts it off.
// ==UserScript== // @name JCCC Library JSON // @namespace JCCC Library JSON // @description Using https://library.jccc.edu/home/?newlibrary this script interacts with http://jccc.summon.serialssolutions.com/api/search to get all results as quickly as possible for a particular query. It can handle 1000 results total, because that is where the api cuts it off. // @include about:blank?jccclibrary // @include chrome://blank/?library // @include https://library.jccc.edu/home/?newlibrary // @match http://jccc.summon.serialssolutions.com/api/* // @version 0.2 // @grant GM_xmlhttpRequest // ==/UserScript== /////////////////////////////////////////////////////////////// // In order for this script to work in google chrome you must // have tampermonkey or another script manager that emulates // the greasemonkey api. // Reduce default 'referer' header granularity must be enabled // in chrome://flags ////////////////////////////////////////////////////////////// var q = ''; var requestTimeout = 100; var resultsPerPage = 10; var startFuncVar = function () { start(); }; var stopFuncVar = function () {stop();}; //disable all existing stylesheets for (i=0;i<document.styleSheets.length;i++) { document.styleSheets[i].disabled=true; } // start with a fresh body document.body.innerHTML=''; // create de deciplineSelectElem = document.createElement('select') deciplineSelectElem.multiple=true deciplineSelectElem.style.resize="both"; deciplineSelectElem.style.width="28em"; deciplineSelectElem.style.height="10em"; //deciplineSelectElem.style.fontFamily="monospace"; deciplineOptionArray = ["agriculture","anatomy & physiology","anthropology","applied sciences","architecture","astronomy & astrophysics","biology","botany","business","chemistry","computer science","dance","dentistry","diet & clinical nutrition","drama","ecology","economics","education","engineering","environmental sciences","film","forestry","geography","geology","government","history & archaeology","international relations","journalism & communications","languages & literatures","law","library & information science","mathematics","medicine","meteorology & climatology","military & naval science","music","nursing","occupational therapy & rehabilitation","oceanography","parapsychology & occult sciences","pharmacy, therapeutics, & pharmacology","philosophy","physical therapy","physics","political science","psychology","public health","recreation & sports","religion","sciences","social sciences","social welfare & social work","sociology & social history","statistics","veterinary medicine","visual arts","women's studies","zoology"]; newOption=document.createElement("option"); // Create 'any' option newOption.value=''; newOption.innerHTML='Any'; newOption.selected=true; deciplineSelectElem.appendChild(newOption); // loop to populate the decipline select for (i in deciplineOptionArray) { newOption=document.createElement("option"); newOption.value=deciplineOptionArray[i]; newOption.innerHTML=deciplineOptionArray[i]; deciplineSelectElem.appendChild(newOption); } // start, information, results, and query elements containerElem = document.createElement("div"); startElem = document.createElement("input"); startElem.setAttribute("value","Start"); startElem.setAttribute("type","button"); startElem.addEventListener("click",startFuncVar,false); stopElem = document.createElement("input"); stopElem.setAttribute("value","STOP"); stopElem.setAttribute("type","button"); stopElem.addEventListener("click",stopFuncVar,false); /* stopElem = document.createElement("input"); stopElem.setAttribute("value","STOP"); stopElem.setAttribute("type","button"); stopElem.addEventListener("click",function () { for (j=0;j<timeoutarray.length;j++) { clearTimeout(timeoutarray[j]); } }); */ infoElem = document.createElement("div"); infoElem.style.display="inline"; queryElem = document.createElement("input"); queryElem.setAttribute("type","text"); stopping=true; stillrequesting=false; deciplinechange=false; var queryNumber = 0; //queryNumberLast = 0; //onpage = '<span id="onpage"></span>'; //options = '<select id="categories"><option value="">Any</option><option value="agriculture">agriculture</option><option value="anatomy & physiology">anatomy & physiology</option><option value="anthropology">anthropology</option><option value="applied sciences">applied sciences</option><option value="architecture">architecture</option><option value="astronomy & astrophysics">astronomy & astrophysics</option><option value="biology">biology</option><option value="botany">botany</option><option value="business">business</option><option value="chemistry">chemistry</option><option value="computer science">computer science</option><option value="dance">dance</option><option value="dentistry">dentistry</option><option value="diet & clinical nutrition">diet & clinical nutrition</option><option value="drama">drama</option><option value="ecology">ecology</option><option value="economics">economics</option><option value="education">education</option><option value="engineering">engineering</option><option value="environmental sciences">environmental sciences</option><option value="film">film</option><option value="forestry">forestry</option><option value="geography">geography</option><option value="geology">geology</option><option value="government">government</option><option value="history & archaeology">history & archaeology</option><option value="international relations">international relations</option><option value="journalism & communications">journalism & communications</option><option value="languages & literatures">languages & literatures</option><option value="law">law</option><option value="library & information science">library & information science</option><option value="mathematics">mathematics</option><option value="medicine">medicine</option><option value="meteorology & climatology">meteorology & climatology</option><option value="military & naval science">military & naval science</option><option value="music">music</option><option value="nursing">nursing</option><option value="occupational therapy & rehabilitation">occupational therapy & rehabilitation</option><option value="oceanography">oceanography</option><option value="parapsychology & occult sciences">parapsychology & occult sciences</option><option value="pharmacy, therapeutics, & pharmacology">pharmacy, therapeutics, & pharmacology</option><option value="philosophy">philosophy</option><option value="physical therapy">physical therapy</option><option value="physics">physics</option><option value="political science">political science</option><option value="psychology">psychology</option><option value="public health">public health</option><option value="recreation & sports">recreation & sports</option><option value="religion">religion</option><option value="sciences">sciences</option><option value="social sciences">social sciences</option><option value="social welfare & social work">social welfare & social work</option><option value="sociology & social history">sociology & social history</option><option value="statistics">statistics</option><option value="veterinary medicine">veterinary medicine</option><option value="visual arts">visual arts</option><option value="women\'s studies">women\'s studies</option><option value="zoology">zoology</option></select>'; /*document.body.innerHTML='<input type="text" id="query">'; //<input type="button" value="start" id="start">'+onpage+'<br>'+options+'<br><input type="button" value=" . stop . " id="stop"><span id="total"></span><br>'; q = document.getElementById('query').value; //document.getElementById('start').addEventListener("click",function () {start();}); */ checkKeyFuncVarisStopped = function (event) {checkkey(event,false);} checkKeyFuncVarisStarted = function (event) {checkkey(event,true);} checkMouseFuncVarisStopped = function (event) {checkmouse(false);} checkMouseFuncVarisStarted = function (event) {checkmouse(true);} queryElem.addEventListener("keyup",checkKeyFuncVarisStopped); queryElem.addEventListener("keyup",checkKeyFuncVarisStopped); startElem.addEventListener("click",checkMouseFuncVarisStopped); queryElem.addEventListener("keyup",function () {changeButtonText(); }); queryElem.addEventListener("keydown",function () {changeButtonText(); }); queryElem.addEventListener("keypress",function () {changeButtonText(); }); deciplineSelectElem.addEventListener("change",function () { changeButtonText("Start"); deciplinechange=true; changeButtonText(); }); queryElem.accessKey="s"; /* document.getElementById("stop").addEventListener("click",function () { for (j=0;j<timeoutarray.length;j++) { clearTimeout(timeoutarray[j]); } }); */ timeoutarray = []; while (timeoutarray.length>0) { clearTimeout(timeoutarray.pop()); } //append all elements containerElem.appendChild(stopElem); containerElem.appendChild(queryElem); containerElem.appendChild(startElem); containerElem.appendChild(infoElem); document.body.appendChild(containerElem); //document.body.appendChild(stopElem); document.body.appendChild(deciplineSelectElem); queryElem.focus(); function changeButtonText(setText) { if (setText!=undefined && setText!=null && setText!=NaN) { startElem.setAttribute("value",setText); } else { if (deciplinechange==true) { startElem.setAttribute("value","Start"); makeStartEvent(); } else { if (((otherii<(500/resultsPerPage)+1) && q!=queryElem.value) || q=='') { makeStartEvent(); startElem.setAttribute("value","Start"); } else if ((otherii<(500/resultsPerPage)+1) && q==queryElem.value && stopping==true) { startElem.setAttribute("value","Resume"); } else if ((otherii<(500/resultsPerPage)+1) && q==queryElem.value && stopping==false) { startElem.setAttribute("value","Stop"); } else if (q==queryElem.value && requestingdone==true) { startElem.setAttribute("value","Done"); } else if (stopping=false) { startElem.setAttribute("value","Stop"); } } } } //setInterval(changeButtonText(),250); function makeStartEvent() { startElem.removeEventListener("click",checkMouseFuncVarisStarted); queryElem.removeEventListener("keyup",checkKeyFuncVarisStarted); deciplineSelectElem.addEventListener("keyup",checkKeyFuncVarisStarted); startElem.addEventListener("click",checkMouseFuncVarisStopped); queryElem.addEventListener("keyup",checkKeyFuncVarisStopped); deciplineSelectElem.addEventListener("keyup",checkKeyFuncVarisStopped); } function makeStopEvent() { queryElem.removeEventListener("keyup",checkKeyFuncVarisStopped); startElem.removeEventListener("click",checkMouseFuncVarisStopped); deciplineSelectElem.removeEventListener("keyup",checkKeyFuncVarisStopped); queryElem.addEventListener("keyup",checkKeyFuncVarisStarted); startElem.addEventListener("click",checkMouseFuncVarisStarted); deciplineSelectElem.addEventListener("keyup",checkKeyFuncVarisStarted); } function stop() { stopping=true; while (timeoutarray.length>0) { clearTimeout(timeoutarray.pop()); } startElem.setAttribute("value","Start"); if ((otherii<(500/resultsPerPage)+1) && q==queryElem.value) { startElem.setAttribute("value","Resume"); } else { startElem.setAttribute("value","Start"); } startElem.removeEventListener("click",checkMouseFuncVarisStarted); queryElem.removeEventListener("keyup",checkKeyFuncVarisStarted); startElem.addEventListener("click",checkMouseFuncVarisStopped); queryElem.addEventListener("keyup",checkKeyFuncVarisStopped); //queryElem.addEventListener("keyup",checkKeyFuncVarisStopped); changeButtonText(); } function makeDiciplineQuery() { diciplineQuery=""; //console.log("makediciplinequery"); for (i=0; i<deciplineSelectElem.options.length; i++) { if (deciplineSelectElem.options[i].selected===true && deciplineSelectElem.options[i].value==='') { //console.log("break"); break; } if (deciplineSelectElem.options[i].selected===true) { //console.log("selected"); //console.log(typeof(diciplineQuery)+"//q"); //console.log(deciplineSelectElem.options[i]); diciplineQuery+='&fvf[]=Discipline,'+deciplineSelectElem.options[i].value.replace(/\s/g,'+').replace(/&/g,'%26')+',f'; //console.log(typeof(diciplineQuery)+"//q"); } } return diciplineQuery; } function start() { while (timeoutarray.length>0) { //alert(timeoutarray.length); clearTimeout(timeoutarray.pop()); } stopping=false; if ((otherii<(500/resultsPerPage)+1) && q==queryElem.value && deciplinechange==false) { timeoutarray[timeoutarray.length]=setTimeout(apireq(otherii,queryNumber),0); changeButtonText("Stop"); makeStopEvent(); } if (q==queryElem.value && deciplinechange==false) { return false; } //queryElem.removeEventListener("keyup",checkKeyFuncVarisStopped); //sstartElem.removeEventListener("click",checkMouseFuncVarisStopped); //queryElem.removeEventListener("keyup",checkKeyFuncVarisStopped); //queryElem.addEventListener("keyup",checkKeyFuncVarisStarted); //startElem.addEventListener("click",checkMouseFuncVarisStarted) //queryElem.addEventListener("keyup",checkKeyFuncVarisStarted); makeStopEvent(); deciplinechange=false; allResults = document.getElementsByClassName("resultdiv"); while (allResults.length>0) { document.body.removeChild(allResults[0]); } startElem.setAttribute("value","STOP"); //startElem.removeEventListener("click",startFuncVar,false); //startElem.addEventListener("click",stopFuncVar,false); //deciplineQuery=""; stopping=true; //q = document.getElementById('query').value; q = queryElem.value; /* for (i=0; i<deciplineSelectElem.options.length; i++) { if (deciplineSelectElem.options[i].selected===true && deciplineSelectElem.options[i].value==='') { break; } if (deciplineSelectElem.options[i].selected===true) { //console.log(deciplineSelectElem.options[i]); deciplineQuery+='&fvf[]=Discipline,'+deciplineSelectElem.options[i].value.replace(/\s/g,'+').replace(/&/g,'%26')+',f' } } */ deciplineQuery=makeDiciplineQuery(); console.log(deciplineQuery); //decipline = '&fvf[]=Discipline,'+decipline.replace(/\s/g,'+').replace(/&/g,'%26')+',f'; //document.body.innerHTML+='<input type="text" id="query">' //document.body.innerHTML='<input type="text" id="query" value="'+q.replace(/"/g,'"')+'"><input type="button" value="start" id="start">'+onpage+'<br>'+options+'<br><input type="button" value=" . stop . " id="stop"><span id="total"></span><br>'; //document.getElementById('start').addEventListener("click",function () {start();}); //document.getElementById('query').addEventListener("keydown",function (event) {checkkey(event);}); //document.getElementById('query').addEventListener("keyup",function (event) {checkkey(event);}); //document.getElementById("stop").addEventListener("click",function () { //for (j=0;j<timeoutarray.length;j++) { // clearTimeout(timeoutarray[j]); //} //stopping=true; //}); /* alloptions = document.getElementsByTagName("option"); for (o in alloptions) { if (alloptions[o].value==decipline) { alloptions[o].selected=true; } } */ ii=1; otherii=1; totalpages = 51; linksarray = []; function linksa(link) { linksarray.push(link); } arrayi = []; for (i=0;i<totalpages;i++) { arrayi[i]=i; } i=0; for (j=0;j<timeoutarray.length;j++) { clearTimeout(timeoutarray[j]); } //for (i=0;i<totalpages;i++) { //timeoutarray[i]=setTimeout(function (i) { stopping=false; requestingdone=false; resultnumber = 0; //document.getElementById("onpage").innerHTML="Requesting Page 1"; queryNumber++; timeoutarray[timeoutarray.length]=setTimeout(apireq(ii,queryNumber),0); //apireqsingle(1); //},(timeoutForEachRequest*arrayi.shift())); //} } var otherii; var otherii2; var resultnumber = 0; function apireq(ii,queryNumberF) { infoElem.innerHTML=" Requesting Page "+ii; GM_xmlhttpRequest({ method: "GET", url: 'http://jccc.summon.serialssolutions.com/api/search?pn='+(ii)+'&ho=t'+deciplineQuery+'&fvf[]=IsFullText,true,f&l=en&ps='+resultsPerPage+'&q='+q, data: "", headers: { "Host": "jccc.summon.serialssolutions.com", "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:37.0) Gecko/20100101 Firefox/37.0", "Accept": "application/json, text/plain, */*", "Accept-Language": "en-US,en;q=0.5", "Accept-Encoding": "gzip, deflate", "SUMMON_SID": "", "Referer": "http://jccc.summon.serialssolutions.com/search", "Cookie": "Summon-Two=true; hasSavedItems=1", "Connection": "keep-alive" }, onload: function(response) { if (queryNumberF==queryNumber) { console.log('onload'); //document.body.innerHTML="<pre>"+response.responseText+"</pre>" pages = JSON.parse(response.responseText); //document.body.innerHTML="<pre>"+pages.full_text_link+"</pre>"; //document.body.innerHTML=""; /* findobj = pages; for (key in findobj) { document.body.innerHTML+="<br>"+key+":\n"+findobj[key]+"<br>"; } */ if (pages.documents=='') { requestingdone=true; } //document.getElementById("total").innerHTML=" Total Records "+pages.record_count; for (key in pages.documents) { resultnumber++; //console.log(resultnumber); newh3 = document.createElement("h3"); newh3.setAttribute("class","result"); newh3.innerHTML=pages.documents[key]["full_title"]; newh3.style.display="inline"; newh4 = document.createElement("h4"); newh4.setAttribute("class","result"); if (resultnumber<10) { zeros="00"; } else if (resultnumber<100) { zeros="0"; } else { zeros=""; } newh4.innerHTML=zeros+resultnumber+" "; newh4.style.display="inline-block"; //newh4.style.height="100%"; //newh4.style.width="3em"; newh4.style.margin="0"; newh4.style.paddingRight="1em"; newdiv2 = newdiv = document.createElement("div"); newa = document.createElement("a"); newa.setAttribute("class","result"); newa.setAttribute("href",pages.documents[key]["fulltext_link"]); newa.appendChild(newh3); newspan2 = document.createElement("span"); if (pages.documents[key]["publication_title"]!=undefined) { newspan2.innerHTML = ' → '+pages.documents[key]["publication_title"]; } if (pages.documents[key]["publisher"]!=undefined) { newspan2.innerHTML += ' → '+pages.documents[key]["publisher"]; } newspan2.style.fontStyle="italic"; newdiv2.appendChild(newh4); newdiv2.appendChild(newa); newdiv2.appendChild(newspan2); newa.style.display="inline"; newdiv = document.createElement("div"); newdiv.setAttribute("class",ii); //newdiv.innerHTML=pages.documents[key]["snippet"]; newdiv.style.padding="2px"; newdiv2.style.padding="2px"; newdiv2.style.borderTop="1px solid #000000"; newdiv.setAttribute("class","result"); newdiv2.setAttribute("class","resultdiv"); if ((resultnumber%2)==0) { newdiv2.style.backgroundColor="#e9e9e9"; newdiv.style.backgroundColor="#e9e9e9"; } document.body.appendChild(newdiv2); newspan = document.createElement("span"); newspan.setAttribute("class","result"); if (pages.documents[key]["snippet"]==undefined) { newspan.innerHTML='' } else { newspan.innerHTML=pages.documents[key]["snippet"]; } newspan.style.paddingLeft="1em"; newdiv.appendChild(newspan); newdiv2.appendChild(newdiv); //document.body.innerHTML+='<h3>'+pages.documents[key]["full_title"]+'</h3><br><a href="'+pages.documents[key]["fulltext_link"]+'">'+pages.documents[key]["fulltext_link"]+'</a><br>'+pages.documents[key]["snippet"]+"<br><br>"; } /* console.log(ii+","+q+","+decipline.replace(/\s/g,'+')); if (ii<20) { document.getElementById("onpage").innerHTML="Last Requested Page "+ii; } else { document.getElementById("onpage").innerHTML="Requesting Done Page "+ii; //alert("'"+pages.documents+"'"); } if (requestingdone==true) { document.getElementById("onpage").innerHTML="Requesting Done Page "+ii; } */ otherii = (ii+1); if (otherii<(500/resultsPerPage)+1 && stopping==false && requestingdone==false) { if (requestingdone==false) { //////////////////////// timeout recursive download //////////////////////// console.log("queryNumberF "+queryNumberF); timeoutarray[timeoutarray.length]=setTimeout(apireq(otherii,queryNumberF),requestTimeout); } } else { stop(); infoElem.innerHTML=" Stopped Requesting on Page "+ii; } if (requestingdone==true) { stop(); infoElem.innerHTML=" Done Requesting on Page "+ii; } } } }); } function checkkey(event,isStarted) { thekey = event.which || event.keyCode; if (thekey==13 && isStarted==false) { console.log("1"); start(); return true; } if (thekey==13 && isStarted==true) { console.log("2"); stop(); return true; } } function checkmouse(isStarted) { if (isStarted==true) { console.log("3"); stop(); return true; } if (isStarted==false) { console.log("4"); start(); return true; } }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址