获得“国家中小学智慧教育平台”上的电子课本

如果你不在乎原理,可以直接前往最后一节

原理

首先,所有学科的电子课本数据全部都是可以从“国家中小学智慧教育平台”登陆后免费获取的,这意味着以下所述的行为完全是吃饱了撑着。但是这个平台是前后端分离的,是用 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.cnReferrer策略,从本页面出去的链接会403 Forbidden,你可以直接下载(浏览器处理下载任务时会设置Referrer字段为none),或者复制链接在新标签页打开。

为高中牲专门把高中课本单列出来

科目 - - - - - - -
语文 必修上册 必修下册 选择性必修 上册 选择性必修 中册 选择性必修 下册
数学 必修 第一册 必修 第二册 选择性必修 第一册 选择性必修 第二册
英语 必修 第一册 必修 第二册 必修 第三册 选择性必修 第一册 选择性必修 第二册 选择性必修 第三册 选择性必修 第四册
物理 必修 第一册 必修 第二册 必修 第三册 选择性必修 第一册 选择性必修 第二册 选择性必修 第三册
化学 必修 第一册 必修 第二册 选择性必修1 选择性必修2 选择性必修3
生物学 必修1 必修2 选择性必修1 选择性必修2 选择性必修3