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