学堂在线课程页面URL和JSON的简单分析
学堂在线课程URL分析
以清华大学的C++语言程序设计基础(2020春)和生活英语听说(2020春)为例
课程界面如下
目录中有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 | 页(直译有丶抽象) |
拿截图来对应一下
了解完这个层次之后,后面就好理解一些了
拿到Json后,拖到Bejson看一下
可以看到,所有数据都在名为 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用来干啥的..) |