學堂在線課程頁面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用來干啥的..) |