【已失效】科学文库电子书下载脚本-JavaScript

-----

2022.12.29

由于接口失效,不再维护此脚本

-----

一、接口

科学文库作为高校阅读的电子书库,但是由于在线文档打开的速度太慢,获取里面的电子书成了首要问题,而且它提供下载的电子书,又需要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的转换,实现了知道科学文库的电子书网址,可以知道电子书的下载地址。

热门相关:首席的独宠新娘