一、介面 科學文庫作為高校閱讀的電子書庫,但是由於線上文檔打開的速度太慢,獲取裡面的電子書成了首要問題,而且它提供下載的電子書,又需要CAJViewer閱讀器才能打開,並不利於正常的閱讀以及分享傳播。 以前獲取電子書靠的是圖片拼接,這樣太麻煩,正巧有網友分享了一個新的方法,通過調用線上閱讀器的離線下 ...
一、介面
科學文庫作為高校閱讀的電子書庫,但是由於線上文檔打開的速度太慢,獲取裡面的電子書成了首要問題,而且它提供下載的電子書,又需要CAJViewer閱讀器才能打開,並不利於正常的閱讀以及分享傳播。
以前獲取電子書靠的是圖片拼接,這樣太麻煩,正巧有網友分享了一個新的方法,通過調用線上閱讀器的離線下載地址,讓科學文庫的電子書能夠快捷下載。
簡單來說,福昕的線上閱讀器提供了一個離線下載地址
http://159.226.241.32:8093/api/file/***/getDocumentbuffer
其中***處需要我們通過一本電子書的文件ID(fileID)
二、原理
通過對網站進行抓包分析,發現其向網址為https://wkobwp.sciencereading.cn/api/file/add的網頁發送post請求,返回的正是所需文件的ID。
通過對POST請求的分析,發現需要傳入參數,其中file這個參數是最主要的,它就是科學文庫給電子書命名的ID,通過上述所說的地址,獲取了福昕閱讀器的對該電子書命名的ID,實現了ID轉換。
在JavaScript中,一般使用ajax進行跨域請求,獲取返回的數據。
將ajax拿到的數據替換***,再訪問就能夠下載了。
三、代碼
/* * @name: 科學文庫下載工具 * @Author: Harl02 * @version: 1.0 * @description: 幫助下載電子書 * @include: book.sciencereading.cn * @createTime: 2022-08-09-21:30 * @updateTime: 2022-08-09-21:30 */ /* 判斷該網站是否執行腳本*/ var host = 'book.sciencereading.cn'; if (host == window.location.hostname){ //下載地址的首碼和尾碼 var pre_url = 'http://159.226.241.32:8093/api/file/'; var suf_url = '/getDocumentbuffer'; //獲取地址欄上的圖書編號 var url = window.location.href; var id = url.match('(?<=id=).*'); //ajax獲取id var ajax = null; if(window.XMLHttpRequest){ ajax = new XMLHttpRequest(); }else{ ajax = new ActiveXObject("Mincrosoft.XMLHTTP"); } ; ajax.open("POST","https://wkobwp.sciencereading.cn/api/file/add"); ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded"); //構造參數 ajax.send('params=%7B%22params%22%3A%7B%22file%22%3A%22http%3A%2F%2F159.226.241.32%3A81%2F' + id + '.pdf%22%7D%7D'); ajax.onreadystatechange = function(){ if(ajax.readyState == 4&& ajax.status ==200){ //通過正則獲取返回的id var fileid = (ajax.responseText).match('(?<=\"result\"\:\").*(?=\")'); var target_url = pre_url + fileid + suf_url; //創建懸浮按鈕及其監聽事件 const d=document.createElement('div'); d.innerHTML='<div id="download">下載</div>'; d.style='position:fixed;right:15px;bottom:20%;color:#000000;background:#FFFFFF'; document.body.append(d); document.getElementById('download').onclick=()=>{ window.location.replace(target_url); }; }; }; };
四、總結
原理就是通過線上閱讀器的下載地址獲取電子書,因為需要用post請求和配置參數,所以需要ajax跨域請求,完成ID的轉換,實現了知道科學文庫的電子書網址,可以知道電子書的下載地址。