学堂在线课程页面URL和JSON的简单分析

时间:2024-01-26 17:43:57

学堂在线课程页面URL和JSON的简单分析

学堂在线课程URL分析

清华大学C++语言程序设计基础(2020春)生活英语听说(2020春)为例

课程界面如下

image-20200409203156338

目录中有5种单元对象:

对象 例子
视频(video) https://next.xuetangx.com/learn/THU08091000247/THU08091000247/1515741/video/1358540
图文(article) https://next.xuetangx.com/learn/THU08091000247/THU08091000247/1515741/article/1358541
作业(exercise) https://next.xuetangx.com/learn/THU08091000247/THU08091000247/1515741/exercise/1358558
考试(quiz) https://next.xuetangx.com/learn/THU05021000376/THU05021000376/1515481/quiz/1340243 (清华大学-生活英语听说(2020春)
讨论(discussion) https://next.xuetangx.com/learn/THU05021000376/THU05021000376/1515481/discussion/3934275 (清华大学-生活英语听说(2020春)

可以看出,URL规则比较简单

首先是

next.xuetangx.com/learn/

紧接着是重复了两次的数字

THU 0809 1000 247 C++

THU 0502 1000 376 英语听说

THU就是清华咯,0809应该是课程提交日期,1000摸不透,247应该是该学校上传课程的顺序ID。

再接着是一个数字串,应该与课程ID相关

1515481

最后就是单元类型和这个单元的ID了

article/135854

quiz/1340243

注:只有这串数字ID在Json里有被返回

课程页面返回的Json分析

一个课程的目录信息列表可以通过GET请求下面这样的URL得到(需要带cookies)

https://next.xuetangx.com/api/v1/lms/learn/course/chapter?cid=1515481&sign=THU05021000376

返回形式: json

里面还有很多我没看懂的返回值,有兴趣可以自行研究

这里拿 生活英语听说 做例子

这里先提前把Json的结构理一下

从外到里,一个目录的结构应该为

顺序 名称 注解
1 course
2 chapter
3 section
4 leaf 页(直译有丶抽象)

拿截图来对应一下

image-20200409213614768

了解完这个层次之后,后面就好理解一些了

拿到Json后,拖到Bejson看一下

image-20200409212156455

可以看到,所有数据都在名为 data 的JsonObject里

course_id 课的id咯
course_name 课名
course_chapter 该课的所有章的集合

从0开始,course_chapter里每一个JsonObject代表一个章

这里的10个JsonObject恰好与目录的10个单元相对应

这里展开 0代表的第一章 后可以看到一些数据

order 章的绝对顺序,0开始
id 章的ID
name 章名
section_leaf_list 该章的所有节的集合

类似地,

从0开始,sectiopn_leaf_list里每一个JsonObject代表一个节

这里11个JsonObject恰好与第一章中的10个小节对应

这里展开 0 代表的第一节,可以看到以下数据

order 节的绝对顺序,0开始
chapter_id 章的id
id 节的id
name 节名
leaf_list 该节所有页的集合

类似地,

从0开始,leaf_list里地每一个JsonObject代表一个页

这里1个JsonObject恰好与第一章第一节中的1个页对应

这里展开 0代表的第一页(也是唯一一页),可以看到以下内容

name 页名
is_locked 锁定状态,这个可能会用于quiz类型的单元,用于限制学生对单元的访问,比如考完后该项直接改为true,禁止重考
start_time 毫秒制的unix时间戳,代表第一次观看时间
chapter_id 章id
section_id 节id
leaf_type 目前我还没看到其他的type
id 页的id (这个就是URL的最后一部分数字)
is_show 不清楚,该页是否可见?
end_time 第一次看完的时间?为什么我这里看过了但是值是0呢
score_deadline 观看截止日期
is_score 不清楚
is_assessed 不清楚
order 页的绝对顺序,0开始
leafinfo_id 页id (虽然不知道这id用来干啥的..)