上回聊到咱拿到了某DN付费电子书的接口后还解了密。得知所有电子书目录。今天咱继续在聊是如何拿到书籍内容并且解密的。
当我开始阅读某DN的电子书,发现这个页面居然F12按下去没有效果。看来是被禁了。嘻嘻不怕,这个只能防范不懂技术的人。Google浏览器的更多工具里面有个开发者工具选项。就是F12的调试模式。某DN限制了键唤起,阻止不了google的工具。
很快就找到了文章内容的接口,我直接看接口的返回值。不过当然是加密的这是基本操作了。先说说接口的入参如下:
version: 1.0
time: 1607587837
param: {“bookid”:“书籍id”,“showid”:章节id}
guid: 1
signature: 签名
获取文章内容接口也是加密,加密方式和上一篇的书籍列表接口一样,这里就不再重述。聊聊这个文章内容怎么解密。
先贴上文章接口返回的JSON对象。
code: 200
data: {
content: “加密后的内容”
istrial: 0
secretkey: “秘钥”
title: “第1章 神经网络发展史”
}
message: “”
从这个JSON对面可以看出有私钥。难道只要用这个私钥就能拿到解密后的文章内容?咱先找找JS文件看看这个加密的方式还是不是MD5。
一番查找发现一家不是MD5加解密,是AES加解密。还发现这个解密没那么简单,这个私钥不能直接用。先说说我们作为某DN的用户,在某DN有一个唯一标识也是ID。我们分两步聊聊这个解密。
第一步它是用这个ID进行MD5加密,加密后的值是32位。截取前16位作为AES 的key ,后面的16位作为iv 从接口返回的secretkey 作为解密体。这样得到一个新的私钥。
第二步用这个新的32位私钥截取。前16位作为key,后16位做为iv 接口返回的content文章内容体就是这次的解密体。最终得出一个html页面。
不过并不是一个接口返回整篇文章,是有章节段落的。得先调用章节接口拿到整本书所有的章节信息,最重要的是章节id。拿到章节id也就是showid,作为参数才能去调用文章信息接口。贴上接口入参
version: 1.0
time: 1607603273
param: {“bookid”:“书籍id”}
guid: 1
signature: 486d5008c551072fd63e29832120c342
在贴上接口返回参数JSON
code:200
data:{
chapterList:[
id: 1
islock: 0
pid: 1
rate: 47
secretkey: null
showid: 1
title: “第1章 神经网络发展史”
url: “”
]
}
message:""
由此咱们可以得出整个逻辑,咱先建三张表
book_all 存所有数据名称目录
book_chapter 章节信息表 关联book_all 的主键book_id
book_detail 书籍内容 show_id 关联book_chapter的 chapter_id, book_id 关联book_all 的book_id
一顿噼里啪啦 敲完代码
先把所有的数据捞回来存到数据库。这样随时用随时取。
1.通过accessAllBooks接口 拿到所有的书籍目录及id
2.通过chapter接口 拿到所有书籍的章节
3.通过show接口 拿到书籍的内容
再一顿噼里啪啦
取出所有的书籍内容解密生成HTML文件
至于PDF我尝试过,生成的效果不理想我最终还是没有用。
这九百多本书籍我还在想用什么方式呈现给大家。
不过我有一个有趣的想法就是也搞一个网站免费提供搜索 阅读 下载。但是只能利用下班时间搞,要实现需要时日。
注:另有其他技术文摘和千本电子书资源免费拿【乐购鲸选】公众号