获得“国家中小学智慧教育平台”上的电子课本
如果你不在乎原理,可以直接前往最后一节。
原理
首先,所有学科的电子课本数据全部都是可以从“国家中小学智慧教育平台”上登陆后免费获取的,这意味着以下所述的行为完全是吃饱了撑着。但是这个平台是前后端分离的,是用 react写的,而且还发了一大堆log(https://wkbrs1.tingyun.com/action?<Request Info>),严重拖慢了加载速度和浏览体验。
不仅如此,我们还没有办法一键获得所有教科书的PDF地址,页面上也没有提供下载按钮,而且,他的PDF阅读功能是用PDF.js写的(虽然说这确实是一个非常好用的库,而且是Mozilla开源的),但是我既然都用Firefox(内置了PDF.js viewer)打开它了,我为什么要再下载一遍PDF.js,即使他是minify过的?
所以我们要一键获取全部的电子课本地址,并将它展示出来,以下是分析过程和操作过程。
分析过程
我一开始以为,在进入教材页面之后,他会先发一个query POST,获得教材的书名、缩略图、点赞数等元数据,在单击一个教材名称之后,会进入教材详情页,再发第二个POST,获取包括PDF地址在内的详细信息。上述过程应该全是用API进行。
事实证明,我是想少了。
他的教材元数据是放在 s-file-*.ykt.cbern.com.cn(其中的星号是一个数字,标志的应该是负载平衡的服务器序号(我猜的))上的,那个s指的应该是static。不仅如此,它还给我缓存了,给我 cache-control: max-age=600了,而且看这个名字,还带了个.json,怎么看都像是直接静态存的。
仔细想想,确实没什么问题,毕竟这玩意儿也不是经常更新的,我存静态还加600秒的缓存,应该没问题吧。
总之,既然知道这个,后面就好办了。
这里有点偷懒,因为PDF的地址就是 https://r1-ndr.ykt.cbern.com.cn/edu_product/esp/assets_document/<Recourse ID>.pkg/pdf.pdf,但不保证全部都是。
Files
完整的课本元数据:Data
提纯后的(只含有标题,ID,tags,也是下面Component里面用到的数据):Data
以及一个可爱的加载动画(雾)
数据
请注意,由于cbern.com.cn的Referrer策略,从本页面出去的链接会403 Forbidden,你可以直接下载(浏览器处理下载任务时会设置Referrer字段为none),或者复制链接在新标签页打开。
为高中牲专门把高中课本单列出来
| 科目 | - | - | - | - | - | - | - |
|---|---|---|---|---|---|---|---|
| 语文 | 必修上册 | 必修下册 | 选择性必修 上册 | 选择性必修 中册 | 选择性必修 下册 | ||
| 数学 | 必修 第一册 | 必修 第二册 | 选择性必修 第一册 | 选择性必修 第二册 | |||
| 英语 | 必修 第一册 | 必修 第二册 | 必修 第三册 | 选择性必修 第一册 | 选择性必修 第二册 | 选择性必修 第三册 | 选择性必修 第四册 |
| 物理 | 必修 第一册 | 必修 第二册 | 必修 第三册 | 选择性必修 第一册 | 选择性必修 第二册 | 选择性必修 第三册 | |
| 化学 | 必修 第一册 | 必修 第二册 | 选择性必修1 | 选择性必修2 | 选择性必修3 | ||
| 生物学 | 必修1 | 必修2 | 选择性必修1 | 选择性必修2 | 选择性必修3 |