-
-
[原创] 安卓考蟲APP視頻鏈接獲取及批量下載(下) By_kwaiching
-
发表于: 2020-6-24 12:43 5782
-
0x3. 進入教室
獲取到課程詳情, 課程列表 關鍵參數是上一步獲取的 "goodsIds": "14400"
課程詳情
https://teaching.kaochong.com/teaching-course/app/mycourse/get/coursedetail ?courseId=14400 &androidId=xxx &apiVer=2 &appId=1001 &ca=%E6%9C%AA%E7%9F%A5%E8%BF%90%E8%90%A5%E5%95%86 &channel=baidu &cl=baidu &duid=xxx &dv=ONEPLUS%20A5010 &imei= &nt=wifi &ov=9 &rosType=android &sh=2046 &sw=1080 &token=xxx &ver=3.7.1 { "errorCode": 0, "errorMsg": "ok", "stime": 1592401068975, "results": { "courseBegin": 1582455600000, "courseFinish": 1583668800000, "lessonBegin": 1581930000000, "lessonFinish": 1583668800000, "orderId": "1001602521944", "courseId": 14400, "goodsId": 14400, "ctime": 1582872436000, "expirationDate": 1609430399000, "lessonCount": 24, "learnedCount": 0, "courseText": "", "nextLesson": null, "pic": "https://kc-base.oss-cn-beijing.aliyuncs.com/course/item%3Fid%3D14400/4kwERRTaC28f8JW.png", "qqGroup": "", "archives": 0, "archivesUrl": null, "questions": 0, "questionsUrl": null, "upgradePlus": 0, "upgradePlusUrl": null, "refundable": 0, "teachers": [ { "id": 72, "logo": "https://cdn.bos.kaochong.com/web/59--3593732873201158632.png", "name": "李良" }, { "id": 73, "logo": "https://cdn.bos.kaochong.com/web/48--4758587070974160592.png", "name": "陈晓燕" }, { "id": 97, "logo": "https://cdn.bos.kaochong.com/web/52--4596018699663745174.png", "name": "曾芸芸" } ], "title": "21考研数学新手3周刷题营01期", "type": 2, "subjectTypes": "3", "wsType": 1, "wsTypeText": "考研", "courseProp": 2, "communityInfo": null, "needAddress": 0, "haveServiceCode": 1, "needTask": 0, "courseArrangement": 0, "needPersonTrainer": 0, "displayType": 0, "report": { "taughtRate": 100, "learnedRate": 0, "classAvgRate": 77.76 }, "sortDisplay": ... "hasExam": 0 } }
直播課程列表:
https://teaching.kaochong.com/teaching-course/app/mycourse/timetable/live ?courseId=14400 &androidId=xxx &apiVer=2 &appId=1001 &ca=%E6%9C%AA%E7%9F%A5%E8%BF%90%E8%90%A5%E5%95%86 &channel=baidu &cl=baidu &duid=xxx &dv=ONEPLUS%20A5010 &imei= &nt=wifi &ov=9 &rosType=android &sh=2046 &sw=1080 &token=xxx &ver=3.7.1
回放課程列表:
https://teaching.kaochong.com/teaching-course/app/mycourse/timetable/playback ?sortType=1 &courseId=14400 &androidId=xxx &apiVer=2 &appId=1001 &ca=%E6%9C%AA%E7%9F%A5%E8%BF%90%E8%90%A5%E5%95%86 &channel=baidu &cl=baidu &duid=xxx &dv=ONEPLUS%20A5010 &imei= &nt=wifi &ov=9 &rosType=android &sh=2046 &sw=1080 &token=xxx &ver=3.7.1 { "errorCode": 0, "errorMsg": "ok", "stime": 1592401374547, "results": [ { "name": "默认", "groupId": -1, "lessons": [ { "serviceType": null, "courseId": 14400, "lessonId": 248844, // 關鍵 "index": 1, "lessonType": 1, "classify": 0, "title": "2月23日直播答疑&总结", "teacherName": "李良", "teacherLogo": "https://cdn.bos.kaochong.com/web/59--3593732873201158632.png", "begin": 1582455600000, "finish": 1582459200000, "remindLabel": "2020.02.23 19:00-20:00", "playStatus": 5, "playTime": 1582455060000, "learnedStatus": 2, "togglePoint": 1, "allowComment": 1, "commentCount": 17, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 248845, "index": 2, "lessonType": 1, "classify": 0, "title": "3月1日直播答疑&总结", "teacherName": "陈晓燕", "teacherLogo": "https://cdn.bos.kaochong.com/web/48--4758587070974160592.png", "begin": 1583060400000, "finish": 1583064000000, "remindLabel": "2020.03.01 19:00-20:00", "playStatus": 5, "playTime": 1583059860000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 10, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 248846, "index": 3, "lessonType": 1, "classify": 0, "title": "3月8日直播答疑&总结", "teacherName": "曾芸芸", "teacherLogo": "https://cdn.bos.kaochong.com/web/52--4596018699663745174.png", "begin": 1583665200000, "finish": 1583668800000, "remindLabel": "2020.03.08 19:00-20:00", "playStatus": 5, "playTime": 1583664660000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 3, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 250217, "index": 4, "lessonType": 2, "classify": 0, "title": "2月17日每日一题", "teacherName": "李良", "teacherLogo": "https://cdn.bos.kaochong.com/web/59--3593732873201158632.png", "begin": 1581930000000, "finish": 1581933600000, "remindLabel": "建议在 2020.02.17 前完成", "playStatus": 6, "playTime": 1581868800000, "learnedStatus": 2, "togglePoint": 0, "allowComment": 1, "commentCount": 79, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 250218, "index": 5, "lessonType": 2, "classify": 0, "title": "2月18日每日一题", "teacherName": "李良", "teacherLogo": "https://cdn.bos.kaochong.com/web/59--3593732873201158632.png", "begin": 1582016400000, "finish": 1582020000000, "remindLabel": "建议在 2020.02.18 前完成", "playStatus": 6, "playTime": 1581955200000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 55, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 250219, "index": 6, "lessonType": 2, "classify": 0, "title": "2月19日每日一题", "teacherName": "李良", "teacherLogo": "https://cdn.bos.kaochong.com/web/59--3593732873201158632.png", "begin": 1582102800000, "finish": 1582106400000, "remindLabel": "建议在 2020.02.19 前完成", "playStatus": 6, "playTime": 1582041600000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 41, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 250220, "index": 7, "lessonType": 2, "classify": 0, "title": "2月20日每日一题", "teacherName": "李良", "teacherLogo": "https://cdn.bos.kaochong.com/web/59--3593732873201158632.png", "begin": 1582189200000, "finish": 1582192800000, "remindLabel": "建议在 2020.02.20 前完成", "playStatus": 6, "playTime": 1582128000000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 43, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 250221, "index": 8, "lessonType": 2, "classify": 0, "title": "2月21日每日一题", "teacherName": "李良", "teacherLogo": "https://cdn.bos.kaochong.com/web/59--3593732873201158632.png", "begin": 1582275600000, "finish": 1582279200000, "remindLabel": "建议在 2020.02.21 前完成", "playStatus": 6, "playTime": 1582214400000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 32, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 250222, "index": 9, "lessonType": 2, "classify": 0, "title": "2月22日每日一题", "teacherName": "李良", "teacherLogo": "https://cdn.bos.kaochong.com/web/59--3593732873201158632.png", "begin": 1582275600000, "finish": 1582279200000, "remindLabel": "建议在 2020.02.21 前完成", "playStatus": 6, "playTime": 1582214400000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 30, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 250223, "index": 10, "lessonType": 2, "classify": 0, "title": "2月23日每日一题", "teacherName": "李良", "teacherLogo": "https://cdn.bos.kaochong.com/web/59--3593732873201158632.png", "begin": 1582448400000, "finish": 1582452000000, "remindLabel": "建议在 2020.02.23 前完成", "playStatus": 6, "playTime": 1582387200000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 26, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 250456, "index": 11, "lessonType": 2, "classify": 0, "title": "2月24日每日一题", "teacherName": "陈晓燕", "teacherLogo": "https://cdn.bos.kaochong.com/web/48--4758587070974160592.png", "begin": 1582509600000, "finish": 1582511400000, "remindLabel": "建议在 2020.02.24 前完成", "playStatus": 6, "playTime": 1582473600000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 34, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 250457, "index": 12, "lessonType": 2, "classify": 0, "title": "2月25日每日一题", "teacherName": "陈晓燕", "teacherLogo": "https://cdn.bos.kaochong.com/web/48--4758587070974160592.png", "begin": 1582596000000, "finish": 1582597800000, "remindLabel": "建议在 2020.02.25 前完成", "playStatus": 6, "playTime": 1582560000000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 23, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 250458, "index": 13, "lessonType": 2, "classify": 0, "title": "2月26日每日一题", "teacherName": "陈晓燕", "teacherLogo": "https://cdn.bos.kaochong.com/web/48--4758587070974160592.png", "begin": 1582693200000, "finish": 1582695000000, "remindLabel": "建议在 2020.02.26 前完成", "playStatus": 6, "playTime": 1582646400000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 34, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 253332, "index": 14, "lessonType": 2, "classify": 0, "title": "2月28日每日一题", "teacherName": "陈晓燕", "teacherLogo": "https://cdn.bos.kaochong.com/web/48--4758587070974160592.png", "begin": 1582864200000, "finish": 1582866000000, "remindLabel": "建议在 2020.02.28 前完成", "playStatus": 6, "playTime": 1582819200000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 20, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 250459, "index": 15, "lessonType": 2, "classify": 0, "title": "2月27日每日一题", "teacherName": "陈晓燕", "teacherLogo": "https://cdn.bos.kaochong.com/web/48--4758587070974160592.png", "begin": 1582768800000, "finish": 1582770600000, "remindLabel": "建议在 2020.02.27 前完成", "playStatus": 6, "playTime": 1582732800000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 22, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 250461, "index": 16, "lessonType": 2, "classify": 0, "title": "2月29日每日一题", "teacherName": "陈晓燕", "teacherLogo": "https://cdn.bos.kaochong.com/web/48--4758587070974160592.png", "begin": 1582941600000, "finish": 1582943400000, "remindLabel": "建议在 2020.02.29 前完成", "playStatus": 6, "playTime": 1582905600000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 22, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 250462, "index": 17, "lessonType": 2, "classify": 0, "title": "3月1日每日一题", "teacherName": "陈晓燕", "teacherLogo": "https://cdn.bos.kaochong.com/web/48--4758587070974160592.png", "begin": 1583028000000, "finish": 1583029800000, "remindLabel": "建议在 2020.03.01 前完成", "playStatus": 6, "playTime": 1582992000000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 25, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 253630, "index": 18, "lessonType": 2, "classify": 0, "title": "3月2日每日一题", "teacherName": "曾芸芸", "teacherLogo": "https://cdn.bos.kaochong.com/web/52--4596018699663745174.png", "begin": 1583139600000, "finish": 1583141400000, "remindLabel": "建议在 2020.03.02 前完成", "playStatus": 6, "playTime": 1583078400000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 18, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 253631, "index": 19, "lessonType": 2, "classify": 0, "title": "3月3日每日一题", "teacherName": "曾芸芸", "teacherLogo": "https://cdn.bos.kaochong.com/web/52--4596018699663745174.png", "begin": 1583226000000, "finish": 1583227800000, "remindLabel": "建议在 2020.03.03 前完成", "playStatus": 6, "playTime": 1583164800000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 14, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 253632, "index": 20, "lessonType": 2, "classify": 0, "title": "3月4日每日一题", "teacherName": "曾芸芸", "teacherLogo": "https://cdn.bos.kaochong.com/web/52--4596018699663745174.png", "begin": 1583312400000, "finish": 1583314200000, "remindLabel": "建议在 2020.03.04 前完成", "playStatus": 6, "playTime": 1583251200000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 22, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 253633, "index": 21, "lessonType": 2, "classify": 0, "title": "3月5日每日一题", "teacherName": "曾芸芸", "teacherLogo": "https://cdn.bos.kaochong.com/web/52--4596018699663745174.png", "begin": 1583398800000, "finish": 1583400600000, "remindLabel": "建议在 2020.03.05 前完成", "playStatus": 6, "playTime": 1583337600000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 16, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 253634, "index": 22, "lessonType": 2, "classify": 0, "title": "3月6日每日一题", "teacherName": "曾芸芸", "teacherLogo": "https://cdn.bos.kaochong.com/web/52--4596018699663745174.png", "begin": 1583485200000, "finish": 1583487000000, "remindLabel": "建议在 2020.03.06 前完成", "playStatus": 6, "playTime": 1583424000000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 13, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 253635, "index": 23, "lessonType": 2, "classify": 0, "title": "3月7日每日一题", "teacherName": "曾芸芸", "teacherLogo": "https://cdn.bos.kaochong.com/web/52--4596018699663745174.png", "begin": 1583571600000, "finish": 1583573400000, "remindLabel": "建议在 2020.03.07 前完成", "playStatus": 6, "playTime": 1583510400000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 14, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null }, { "serviceType": null, "courseId": 14400, "lessonId": 253636, "index": 24, "lessonType": 2, "classify": 0, "title": "3月8日每日一题", "teacherName": "曾芸芸", "teacherLogo": "https://cdn.bos.kaochong.com/web/52--4596018699663745174.png", "begin": 1583658000000, "finish": 1583659800000, "remindLabel": "建议在 2020.03.08 前完成", "playStatus": 6, "playTime": 1583596800000, "learnedStatus": 0, "togglePoint": 0, "allowComment": 1, "commentCount": 12, "haveExercise": 0, "exercise": null, "stageTest": null, "report": null, "miniProgram": null } ] } ] }
定位代碼
/* renamed from: com.xuanke.kaochong.lesson.purchased.b.a */ public final class PurchasedRepository { @NotNull /* renamed from: b */ public final LiveData<DataWrap<List<QMUISection<PlayBackEntity, PurchasedEntity>>>> mo48832b(@NotNull Map<String, String> map) { C10434e0.m48756f(map, "params"); C3047z<BaseApi<ArrayList<PlayBackEntity>>> e = KcNet.m16394d().mo43024e(map); KCSuperRetrofit.C6862a aVar = KCSuperRetrofit.f25847b; C10434e0.m48731a((Object) e, "observable"); aVar.mo42930a(e, new C8239f(this)); // 回放列表 // C8239f 回調 return this.f29712e; } /* renamed from: com.xuanke.kaochong.lesson.purchased.b.a$f */ /* compiled from: PurchasedRepository.kt */ public static final class C8239f implements C6893p<ArrayList<PlayBackEntity>> { /* renamed from: a */ final /* synthetic */ PurchasedRepository f29718a; C8239f(PurchasedRepository aVar) { this.f29718a = aVar; } /* renamed from: a */ public void onSuccess(@Nullable ArrayList<PlayBackEntity> arrayList) { DataWrap bVar; if (arrayList != null) { MutableLiveData d = this.f29718a.f29712e; if (!arrayList.isEmpty()) { bVar = DataWrap.f15077d.mo28227c(this.f29718a.m39447a(arrayList)); } else { bVar = DataWrap.f15077d.mo28226b(this.f29718a.m39447a(arrayList)); } d.mo6430b(bVar); return; } m39474a(); } public void onFail(int i, @Nullable String str) { m39474a(); } /* renamed from: a */ private final void m39474a() { this.f29718a.f29712e.mo6430b(DataWrap.C3777a.m20279a(DataWrap.f15077d, (Object) null, (Throwable) null, 3, (Object) null)); } } @NotNull /* renamed from: a */ public final LiveData<DataWrap<LessonInfoEntity>> mo48827a(@NotNull String str) { C10434e0.m48756f(str, "courseId"); C3047z<BaseApi<LessonInfoEntity>> z = KcNet.m16394d().mo43083z(str); KCSuperRetrofit.C6862a aVar = KCSuperRetrofit.f25847b; C10434e0.m48731a((Object) z, "observable"); aVar.mo42930a(z, new C8235b(this)); // 課程詳情 //C8235b 回調 return this.f29708a; } /* renamed from: com.xuanke.kaochong.lesson.purchased.b.a$b */ /* compiled from: PurchasedRepository.kt */ public static final class C8235b implements C6893p<LessonInfoEntity> { /* renamed from: a */ final /* synthetic */ PurchasedRepository f29714a; C8235b(PurchasedRepository aVar) { this.f29714a = aVar; } /* renamed from: a */ public void onSuccess(@Nullable LessonInfoEntity lessonInfoEntity) { if (lessonInfoEntity != null) { this.f29714a.f29708a.mo6430b(DataWrap.f15077d.mo28227c(lessonInfoEntity)); } else { m39467a(); } } public void onFail(int i, @Nullable String str) { m39467a(); } /* renamed from: a */ private final void m39467a() { this.f29714a.f29708a.mo6430b(DataWrap.C3777a.m20279a(DataWrap.f15077d, (Object) null, (Throwable) null, 3, (Object) null)); } } }
0x04. 開始聽課
Room ID 請求, 關鍵參數是上一步獲取的 "lessonId": 248844
直播類型檢查:
https://mobile.kaochong.com/api/mycourse/checkLiveType ?lessonId=248844 &androidId=xxx &apiVer=3 &appId=1001 &ca=%E6%9C%AA%E7%9F%A5%E8%BF%90%E8%90%A5%E5%95%86 &channel=baidu &cl=baidu &duid=xxx &dv=ONEPLUS%20A5010 &imei= &nt=wifi &ov=9 &rosType=android &sh=2046 &sw=1080 &token=xxx &ver=3.7.1 { "errorCode": 0, "errorMsg": "ok", "stime": 1592401927509, "results": { "liveType": 1, // 類型 "roomId": "NB158107182433609316935330322386", // 關鍵 "klive": { "ver": 1, "ts": 1592401927, "sign": "96d1c088c0a0cc3204b8e18f5df6c6a7677c266c3b862595640efceef5ccd207" }, "videoRecordInfo": null, "needShowShareButton": 0, "backgroundPlay": true, "allowDownLoad": true } }
課程詳情
https://teaching.kaochong.com/teaching-live/app/lesson/detail ?lessonId=248844 &androidId=xxx &apiVer=2 &appId=1001 &ca=%E6%9C%AA%E7%9F%A5%E8%BF%90%E8%90%A5%E5%95%86 &channel=baidu &cl=baidu &duid=xxx &dv=ONEPLUS%20A5010 &imei= &nt=wifi &ov=9 &rosType=android &sh=2046 &sw=1080 &token=xxx &ver=3.7.1 { "errorCode": 0, "errorMsg": "ok", "stime": 1592402148710, "results": { "courseId": 14400, "title": "21考研数学新手3周刷题营01期", "questions": 0, "coursePlus": 0, "lessonVO": { "courseId": 14400, "id": 248844, "begin": 1582455600000, "finish": 1582459200000, "title": "2月23日直播答疑&总结", "lessonTypeId": 1, "subClassId": 0, "subClassName": "" }, "lessonRecordPop": 0, "hasNps": 0 } }
0x05. 至此, 除了關鍵課程id, 其餘請求參數都是一樣的
搜尋相關信息可定位生成參數:
/* renamed from: com.xuanke.kaochong.common.constant.b */ /* compiled from: Constants */ public class C6821b { /* renamed from: t */ public static final String f25286t = "rosType"; /* renamed from: u */ public static final String f25287u = "nt"; /* renamed from: p */ public static final String f25282p = "appId"; /* renamed from: s */ public static final String f25285s = "duid"; // GetConfigModel.m16372b() }
請求參數:
/* renamed from: com.xuanke.common.g.c */ /* compiled from: Env */ public class C6418c { /* renamed from: a */ public static Map<String, String> m32600a() { // 請求參數Map生成 HashMap hashMap; synchronized (f24212a) { if (f24212a.isEmpty()) { m32603c(KcApplicationDelegate.f13327e); } if (!f24212a.containsKey(C6821b.f25285s)) { String b = GetConfigModel.m16372b(); if (!TextUtils.isEmpty(b)) { f24212a.put(C6821b.f25285s, b); } } hashMap = new HashMap(f24212a); } String h = Global.m16299h(); if (!TextUtils.isEmpty(h)) { hashMap.put("token", h); } return hashMap; } /* renamed from: c */ private static void m32603c(Context context) { f24212a.put("ver", C6713c.f24980f.replace("release", "")); f24212a.put("dv", Build.MODEL); f24212a.put("ov", Build.VERSION.RELEASE); f24212a.put("imei", m32601b(context)); f24212a.put("androidId", m32599a(context)); f24212a.put(C6821b.f25286t, "android"); f24212a.put(C6821b.f25287u, C6421f.m32633a(context)); f24212a.put(C6821b.f25282p, C6713c.f24983i); m32602b(); m32605e(context); m32604d(context); } }
通過hook得到請求參數:
XposedHelpers.findAndHookMethod(mEnvClass, "a", object : XC_MethodHook() { @Throws(Throwable::class) override fun afterHookedMethod(methodHookParam: MethodHookParam?) { val mapObj = methodHookParam!!.result //XposedBridge.log("Map_普通: $mapObj") if (mapObj != null) { val map = mapObj as Map<String, String> if (map.size > 0) { map.forEach { XposedBridge.log("MaP: ${it.key} => ${it.value}") reqMap[it.key] = it.value } } } } })
0x06. 播放鏈接請求
關鍵參數是上一步獲取的 "roomId": "NB158107182433609316935330322386"
https://live.kaochong.com/api/room/playback ?role=2 &device=3 &roomId=NB158107182433609316935330322386 &apiVer=2 { "requestId": 1251971396, "stime": 1592402393028, "results": { "metaPrefix": [ "https://klcs11.kaochong.com/media/NB158107182433609316935330322386_pb", "https://klcs01.kaochong.com/media/NB158107182433609316935330322386_pb" ], "metaMd5": "c2c00254753db6c748bd6d3d904ecfe2", "dataSize": 145565390, "m3u8": "hls/NB158107182433609316935330322386_playback_1582461830972970908.m3u8", "metaFile": "NB158107182433609316935330322386_c2c00254753db6c748bd6d3d904ecfe2.kpm" } }
得到鏈接: "m3u8": "hls/NB158107182433609316935330322386_playback_1582461830972970908.m3u8"
0x7. 總結:
1. 獲取個人訂單列表, 得到: orderId 2. 通過orderId, 得到訂單詳情, 課程ID: goodsIds 3. 通過課程ID, 得到課程詳情, 課程列表ID: lessonId 4. 通過lessonId, 得到RoomID 5. 通過RoomId, 得到播放鏈接 實現批量下載, 關鍵在於lessonId列表獲取->RoomID->鏈接
0x08. Hook lessonId列表:
// 課程信息 XposedHelpers.findAndHookMethod( mLessonInfoClass, "onSuccess", Object::class.java, object : XC_MethodHook() { @Throws(Throwable::class) override fun afterHookedMethod(methodHookParam: MethodHookParam?) { val mLessonInfoEntity = methodHookParam!!.args[0] if (mLessonInfoEntity != null) { // goodsId courseId courseId = XposedHelpers.callMethod(mLessonInfoEntity, "component5").toString() courseName = XposedHelpers.callMethod(mLessonInfoEntity, "getTitle").toString() } } }) // 課程列表 XposedHelpers.findAndHookMethod( mPlayBackClass, "onSuccess", Object::class.java, object : XC_MethodHook() { @Throws(Throwable::class) override fun afterHookedMethod(methodHookParam: MethodHookParam?) { val pbeObj = methodHookParam!!.args[0] if (pbeObj != null) { val pbeList = pbeObj as ArrayList<*> if (pbeList.size > 0) { courseInfo.courseName = courseName courseInfo.lessons.clear() pbeList.forEach { mPlayBackEntity -> val lessonsObj = XposedHelpers.callMethod(mPlayBackEntity, "component3") if (lessonsObj != null) { val lessonsList = lessonsObj as List<*> if (lessonsList.isNotEmpty()) { XposedBridge.log("|課程列表:| Index -> 列表ID -> 教師 -> 文件名") lessonsList.forEach { mPurchasedEntity -> val index = XposedHelpers.callMethod(mPurchasedEntity, "component9") val lessonId = XposedHelpers.callMethod(mPurchasedEntity, "getLessonId").toString() val teacherName = XposedHelpers.callMethod(mPurchasedEntity, "getTeacherName") val lessonName = XposedHelpers.callMethod(mPurchasedEntity, "getTitle").toString().replace("&", "and") XposedBridge.log("|$courseName|$index|$lessonName|$teacherName|$lessonId") // 信息保存 val lesson: CourseInfo.Lesson = CourseInfo.Lesson() lesson.lessonName = lessonName lesson.lessonId = lessonId lesson.index = index.toString() courseInfo.lessons.add(lesson) } } } } } } } })
打印結果:
2020-06-18 22:21:50.064 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|1|2月23日直播答疑and总结|李良|248844 2020-06-18 22:21:50.065 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|2|3月1日直播答疑and总结|陈晓燕|248845 2020-06-18 22:21:50.066 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|3|3月8日直播答疑and总结|曾芸芸|248846 2020-06-18 22:21:50.066 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|4|2月17日每日一题|李良|250217 2020-06-18 22:21:50.066 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|5|2月18日每日一题|李良|250218 2020-06-18 22:21:50.067 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|6|2月19日每日一题|李良|250219 2020-06-18 22:21:50.068 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|7|2月20日每日一题|李良|250220 2020-06-18 22:21:50.068 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|8|2月21日每日一题|李良|250221 2020-06-18 22:21:50.068 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|9|2月22日每日一题|李良|250222 2020-06-18 22:21:50.069 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|10|2月23日每日一题|李良|250223 2020-06-18 22:21:50.069 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|11|2月24日每日一题|陈晓燕|250456 2020-06-18 22:21:50.070 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|12|2月25日每日一题|陈晓燕|250457 2020-06-18 22:21:50.070 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|13|2月26日每日一题|陈晓燕|250458 2020-06-18 22:21:50.071 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|14|2月28日每日一题|陈晓燕|253332 2020-06-18 22:21:50.071 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|15|2月27日每日一题|陈晓燕|250459 2020-06-18 22:21:50.072 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|16|2月29日每日一题|陈晓燕|250461 2020-06-18 22:21:50.072 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|17|3月1日每日一题|陈晓燕|250462 2020-06-18 22:21:50.073 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|18|3月2日每日一题|曾芸芸|253630 2020-06-18 22:21:50.073 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|19|3月3日每日一题|曾芸芸|253631 2020-06-18 22:21:50.074 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|20|3月4日每日一题|曾芸芸|253632 2020-06-18 22:21:50.075 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|21|3月5日每日一题|曾芸芸|253633 2020-06-18 22:21:50.075 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|22|3月6日每日一题|曾芸芸|253634 2020-06-18 22:21:50.075 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|23|3月7日每日一题|曾芸芸|253635 2020-06-18 22:21:50.076 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|24|3月8日每日一题|曾芸芸|253636
0x09. 測試RoomID獲取:
package kc.kwaiching.hook import okhttp3.OkHttpClient import okhttp3.Request import kc.kwaiching.kaochong.CourseInfo import kc.kwaiching.utils.StringUtils import java.net.URLEncoder fun main() { val courseInfo = CourseInfo() val combi = """2020-06-18 22:21:50.064 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|1|2月23日直播答疑and总结|李良|248844 2020-06-18 22:21:50.065 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|2|3月1日直播答疑and总结|陈晓燕|248845 2020-06-18 22:21:50.066 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|3|3月8日直播答疑and总结|曾芸芸|248846 2020-06-18 22:21:50.066 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|4|2月17日每日一题|李良|250217 2020-06-18 22:21:50.066 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|5|2月18日每日一题|李良|250218 2020-06-18 22:21:50.067 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|6|2月19日每日一题|李良|250219 2020-06-18 22:21:50.068 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|7|2月20日每日一题|李良|250220 2020-06-18 22:21:50.068 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|8|2月21日每日一题|李良|250221 2020-06-18 22:21:50.068 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|9|2月22日每日一题|李良|250222 2020-06-18 22:21:50.069 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|10|2月23日每日一题|李良|250223 2020-06-18 22:21:50.069 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|11|2月24日每日一题|陈晓燕|250456 2020-06-18 22:21:50.070 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|12|2月25日每日一题|陈晓燕|250457 2020-06-18 22:21:50.070 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|13|2月26日每日一题|陈晓燕|250458 2020-06-18 22:21:50.071 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|14|2月28日每日一题|陈晓燕|253332 2020-06-18 22:21:50.071 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|15|2月27日每日一题|陈晓燕|250459 2020-06-18 22:21:50.072 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|16|2月29日每日一题|陈晓燕|250461 2020-06-18 22:21:50.072 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|17|3月1日每日一题|陈晓燕|250462 2020-06-18 22:21:50.073 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|18|3月2日每日一题|曾芸芸|253630 2020-06-18 22:21:50.073 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|19|3月3日每日一题|曾芸芸|253631 2020-06-18 22:21:50.074 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|20|3月4日每日一题|曾芸芸|253632 2020-06-18 22:21:50.075 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|21|3月5日每日一题|曾芸芸|253633 2020-06-18 22:21:50.075 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|22|3月6日每日一题|曾芸芸|253634 2020-06-18 22:21:50.075 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|23|3月7日每日一题|曾芸芸|253635 2020-06-18 22:21:50.076 4606-4606/com.xuanke.kaochong I/EdXposed-Bridge: |21考研数学新手3周刷题营01期|24|3月8日每日一题|曾芸芸|253636""" val arr = combi.split("\n") arr.forEach { //|$courseName|$index|$lessonName|$teacherName|$lessonId" val split2 = it.split("|") val lesson: CourseInfo.Lesson = CourseInfo.Lesson() courseInfo.courseName = split2[1] lesson.index = split2[2] lesson.lessonName = split2[3] lesson.teacherName = split2[4] lesson.lessonId = split2[5] // 網絡請求 var url = "https://mobile.kaochong.com/api/mycourse/checkLiveType" + "?lessonId=${lesson.lessonId}" val map: MutableMap<String, String?> = HashMap() map["androidId"] = "xxx" map["apiVer"] = "2" map["appId"] = "1001" map["ca"] = URLEncoder.encode("未知运营商") map["channel"] = "baidu" map["cl"] = "baidu" map["duid"] = "xxx" map["dv"] = URLEncoder.encode("GM1910") //一加7Pro map["imei"] = "" map["nt"] = "wifi" map["ov"] = "10" map["rosType"] = "android" map["sh"] = "2948" map["sw"] = "1440" map["token"] = "xxx" map["ver"] = "3.7.1" map.forEach { url = url + "&" + it.key + "=" + it.value } //println("網址: $url") val mHttpClient = OkHttpClient() val request: Request = Request.Builder().url(url).build() val json = mHttpClient.newCall(request).execute().body()!!.string() //println(json) val roomId = StringUtils.getTextCenter(json, "roomId\":\"", "\"") println("|${courseInfo.courseName}|${lesson.index}|${lesson.lessonName}|${lesson.teacherName}|$roomId") } }
打印結果:
|21考研数学新手3周刷题营01期|1|2月23日直播答疑and总结|李良|NB158107182433609316935330322386 |21考研数学新手3周刷题营01期|2|3月1日直播答疑and总结|陈晓燕|NB158107184894020532326730322387 |21考研数学新手3周刷题营01期|3|3月8日直播答疑and总结|曾芸芸|NB158107188249817326059820322388 |21考研数学新手3周刷题营01期|4|2月17日每日一题|李良|NB158053799881212540635490322201 |21考研数学新手3周刷题营01期|5|2月18日每日一题|李良|NB158053802682704037675120217379 |21考研数学新手3周刷题营01期|6|2月19日每日一题|李良|NB158053805515521446560550217380 |21考研数学新手3周刷题营01期|7|2月20日每日一题|李良|NB158053808341204730615580217381 |21考研数学新手3周刷题营01期|8|2月21日每日一题|李良|NB158053811201105424828820322202 |21考研数学新手3周刷题营01期|9|2月22日每日一题|李良|NB158053814150507642610880322203 |21考研数学新手3周刷题营01期|10|2月23日每日一题|李良|NB158053846881210853689790217382 |21考研数学新手3周刷题营01期|11|2月24日每日一题|陈晓燕|NB158080153991312977299810217424 |21考研数学新手3周刷题营01期|12|2月25日每日一题|陈晓燕|NB158080157320807755680420322240 |21考研数学新手3周刷题营01期|13|2月26日每日一题|陈晓燕|NB158080160873609865633870217425 |21考研数学新手3周刷题营01期|14|2月28日每日一题|陈晓燕|NB158286260235009503001650591747 |21考研数学新手3周刷题营01期|15|2月27日每日一题|陈晓燕|NB158080167019005788157050322241 |21考研数学新手3周刷题营01期|16|2月29日每日一题|陈晓燕|NB158080172415100646307320322242 |21考研数学新手3周刷题营01期|17|3月1日每日一题|陈晓燕|NB158080175071507149293500322243 |21考研数学新手3周刷题营01期|18|3月2日每日一题|曾芸芸|NB158190993722408852135280354749 |21考研数学新手3周刷题营01期|19|3月3日每日一题|曾芸芸|NB158190996781911481390390354750 |21考研数学新手3周刷题营01期|20|3月4日每日一题|曾芸芸|NB158191000225604672797370022739 |21考研数学新手3周刷题营01期|21|3月5日每日一题|曾芸芸|NB158191005860701731736820354751 |21考研数学新手3周刷题营01期|22|3月6日每日一题|曾芸芸|NB158191009035808291512270022740 |21考研数学新手3周刷题营01期|23|3月7日每日一题|曾芸芸|NB158191012337102577107230354752 |21考研数学新手3周刷题营01期|24|3月8日每日一题|曾芸芸|NB158191015381108732245240354753
0x0A. 測試視頻鏈接獲取:
package kc.kwaiching.hook import okhttp3.OkHttpClient import okhttp3.Request import kc.kwaiching.kaochong.CourseInfo import kc.kwaiching.utils.StringUtils fun main() { val courseInfo = CourseInfo() val combi = """|21考研数学新手3周刷题营01期|1|2月23日直播答疑and总结|李良|NB158107182433609316935330322386 |21考研数学新手3周刷题营01期|2|3月1日直播答疑and总结|陈晓燕|NB158107184894020532326730322387 |21考研数学新手3周刷题营01期|3|3月8日直播答疑and总结|曾芸芸|NB158107188249817326059820322388 |21考研数学新手3周刷题营01期|4|2月17日每日一题|李良|NB158053799881212540635490322201 |21考研数学新手3周刷题营01期|5|2月18日每日一题|李良|NB158053802682704037675120217379 |21考研数学新手3周刷题营01期|6|2月19日每日一题|李良|NB158053805515521446560550217380 |21考研数学新手3周刷题营01期|7|2月20日每日一题|李良|NB158053808341204730615580217381 |21考研数学新手3周刷题营01期|8|2月21日每日一题|李良|NB158053811201105424828820322202 |21考研数学新手3周刷题营01期|9|2月22日每日一题|李良|NB158053814150507642610880322203 |21考研数学新手3周刷题营01期|10|2月23日每日一题|李良|NB158053846881210853689790217382 |21考研数学新手3周刷题营01期|11|2月24日每日一题|陈晓燕|NB158080153991312977299810217424 |21考研数学新手3周刷题营01期|12|2月25日每日一题|陈晓燕|NB158080157320807755680420322240 |21考研数学新手3周刷题营01期|13|2月26日每日一题|陈晓燕|NB158080160873609865633870217425 |21考研数学新手3周刷题营01期|14|2月28日每日一题|陈晓燕|NB158286260235009503001650591747 |21考研数学新手3周刷题营01期|15|2月27日每日一题|陈晓燕|NB158080167019005788157050322241 |21考研数学新手3周刷题营01期|16|2月29日每日一题|陈晓燕|NB158080172415100646307320322242 |21考研数学新手3周刷题营01期|17|3月1日每日一题|陈晓燕|NB158080175071507149293500322243 |21考研数学新手3周刷题营01期|18|3月2日每日一题|曾芸芸|NB158190993722408852135280354749 |21考研数学新手3周刷题营01期|19|3月3日每日一题|曾芸芸|NB158190996781911481390390354750 |21考研数学新手3周刷题营01期|20|3月4日每日一题|曾芸芸|NB158191000225604672797370022739 |21考研数学新手3周刷题营01期|21|3月5日每日一题|曾芸芸|NB158191005860701731736820354751 |21考研数学新手3周刷题营01期|22|3月6日每日一题|曾芸芸|NB158191009035808291512270022740 |21考研数学新手3周刷题营01期|23|3月7日每日一题|曾芸芸|NB158191012337102577107230354752 |21考研数学新手3周刷题营01期|24|3月8日每日一题|曾芸芸|NB158191015381108732245240354753""" val arr = combi.split("\n") arr.forEach { //|$courseName|$index|$lessonName|$teacherName|$lessonId" val split2 = it.split("|") val lesson: CourseInfo.Lesson = CourseInfo.Lesson() courseInfo.courseName = split2[1] lesson.index = split2[2] lesson.lessonName = split2[3] lesson.teacherName = split2[4] lesson.roomId = split2[5] // 網絡請求 val url = "https://live.kaochong.com/api/room/playback" + "?role=2" + "&device=3" + "&roomId=${lesson.roomId}" + "&apiVer=2" //println("網址: $url") val mHttpClient = OkHttpClient() val request: Request = Request.Builder().url(url).build() val json = mHttpClient.newCall(request).execute().body()!!.string() //println(json) val domain = arrayOf( "http://static-bos.live.kaochong.com/", "http://static-ali.live.kaochong.com/", "http://static-oss.live.kaochong.com/" ) val m3u8 = StringUtils.getTextCenter(json, "m3u8\":\"", "\"").replace("\\", "") var info: String = "" domain.forEach { info = "$info$it$m3u8#" } println("|${courseInfo.courseName}|${lesson.index}|${lesson.lessonName}|${lesson.teacherName}|$info") } }
打印結果:
|21考研数学新手3周刷题营01期|1|2月23日直播答疑and总结|李良|http://static-bos.live.kaochong.com/hls/NB158107182433609316935330322386_playback_1582461830972970908.m3u8#http://static-ali.live.kaochong.com/hls/NB158107182433609316935330322386_playback_1582461830972970908.m3u8#http://static-oss.live.kaochong.com/hls/NB158107182433609316935330322386_playback_1582461830972970908.m3u8# |21考研数学新手3周刷题营01期|2|3月1日直播答疑and总结|陈晓燕|http://static-bos.live.kaochong.com/hls/NB158107184894020532326730322387_playback_1583064369951851514.m3u8#http://static-ali.live.kaochong.com/hls/NB158107184894020532326730322387_playback_1583064369951851514.m3u8#http://static-oss.live.kaochong.com/hls/NB158107184894020532326730322387_playback_1583064369951851514.m3u8# |21考研数学新手3周刷题营01期|3|3月8日直播答疑and总结|曾芸芸|http://static-bos.live.kaochong.com/hls/NB158107188249817326059820322388_playback_1583668858421427962.m3u8#http://static-ali.live.kaochong.com/hls/NB158107188249817326059820322388_playback_1583668858421427962.m3u8#http://static-oss.live.kaochong.com/hls/NB158107188249817326059820322388_playback_1583668858421427962.m3u8# |21考研数学新手3周刷题营01期|4|2月17日每日一题|李良|http://static-bos.live.kaochong.com/hls/NB158053799881212540635490322201_playback_1581062826565138459.m3u8#http://static-ali.live.kaochong.com/hls/NB158053799881212540635490322201_playback_1581062826565138459.m3u8#http://static-oss.live.kaochong.com/hls/NB158053799881212540635490322201_playback_1581062826565138459.m3u8# |21考研数学新手3周刷题营01期|5|2月18日每日一题|李良|http://static-bos.live.kaochong.com/hls/NB158053802682704037675120217379_playback_1581062929826664025.m3u8#http://static-ali.live.kaochong.com/hls/NB158053802682704037675120217379_playback_1581062929826664025.m3u8#http://static-oss.live.kaochong.com/hls/NB158053802682704037675120217379_playback_1581062929826664025.m3u8# |21考研数学新手3周刷题营01期|6|2月19日每日一题|李良|http://static-bos.live.kaochong.com/hls/NB158053805515521446560550217380_playback_1580983356343305817.m3u8#http://static-ali.live.kaochong.com/hls/NB158053805515521446560550217380_playback_1580983356343305817.m3u8#http://static-oss.live.kaochong.com/hls/NB158053805515521446560550217380_playback_1580983356343305817.m3u8# |21考研数学新手3周刷题营01期|7|2月20日每日一题|李良|http://static-bos.live.kaochong.com/hls/NB158053808341204730615580217381_playback_1581062839582578107.m3u8#http://static-ali.live.kaochong.com/hls/NB158053808341204730615580217381_playback_1581062839582578107.m3u8#http://static-oss.live.kaochong.com/hls/NB158053808341204730615580217381_playback_1581062839582578107.m3u8# |21考研数学新手3周刷题营01期|8|2月21日每日一题|李良|http://static-bos.live.kaochong.com/hls/NB158053811201105424828820322202_playback_1581062921372927773.m3u8#http://static-ali.live.kaochong.com/hls/NB158053811201105424828820322202_playback_1581062921372927773.m3u8#http://static-oss.live.kaochong.com/hls/NB158053811201105424828820322202_playback_1581062921372927773.m3u8# |21考研数学新手3周刷题营01期|9|2月22日每日一题|李良|http://static-bos.live.kaochong.com/hls/NB158053814150507642610880322203_playback_1581063005053803307.m3u8#http://static-ali.live.kaochong.com/hls/NB158053814150507642610880322203_playback_1581063005053803307.m3u8#http://static-oss.live.kaochong.com/hls/NB158053814150507642610880322203_playback_1581063005053803307.m3u8# |21考研数学新手3周刷题营01期|10|2月23日每日一题|李良|http://static-bos.live.kaochong.com/hls/NB158053846881210853689790217382_playback_1581064800807806849.m3u8#http://static-ali.live.kaochong.com/hls/NB158053846881210853689790217382_playback_1581064800807806849.m3u8#http://static-oss.live.kaochong.com/hls/NB158053846881210853689790217382_playback_1581064800807806849.m3u8# |21考研数学新手3周刷题营01期|11|2月24日每日一题|陈晓燕|http://static-bos.live.kaochong.com/hls/NB158080153991312977299810217424_playback_1581242790942508924.m3u8#http://static-ali.live.kaochong.com/hls/NB158080153991312977299810217424_playback_1581242790942508924.m3u8#http://static-oss.live.kaochong.com/hls/NB158080153991312977299810217424_playback_1581242790942508924.m3u8# |21考研数学新手3周刷题营01期|12|2月25日每日一题|陈晓燕|http://static-bos.live.kaochong.com/hls/NB158080157320807755680420322240_playback_1581242956560332677.m3u8#http://static-ali.live.kaochong.com/hls/NB158080157320807755680420322240_playback_1581242956560332677.m3u8#http://static-oss.live.kaochong.com/hls/NB158080157320807755680420322240_playback_1581242956560332677.m3u8# |21考研数学新手3周刷题营01期|13|2月26日每日一题|陈晓燕|http://static-bos.live.kaochong.com/hls/NB158080160873609865633870217425_playback_1581321964505029638.m3u8#http://static-ali.live.kaochong.com/hls/NB158080160873609865633870217425_playback_1581321964505029638.m3u8#http://static-oss.live.kaochong.com/hls/NB158080160873609865633870217425_playback_1581321964505029638.m3u8# |21考研数学新手3周刷题营01期|14|2月28日每日一题|陈晓燕|http://static-bos.live.kaochong.com/hls/NB158286260235009503001650591747_playback_1582864512994364953.m3u8#http://static-ali.live.kaochong.com/hls/NB158286260235009503001650591747_playback_1582864512994364953.m3u8#http://static-oss.live.kaochong.com/hls/NB158286260235009503001650591747_playback_1582864512994364953.m3u8# |21考研数学新手3周刷题营01期|15|2月27日每日一题|陈晓燕|http://static-bos.live.kaochong.com/hls/NB158080167019005788157050322241_playback_1581318225879293176.m3u8#http://static-ali.live.kaochong.com/hls/NB158080167019005788157050322241_playback_1581318225879293176.m3u8#http://static-oss.live.kaochong.com/hls/NB158080167019005788157050322241_playback_1581318225879293176.m3u8# |21考研数学新手3周刷题营01期|16|2月29日每日一题|陈晓燕|http://static-bos.live.kaochong.com/hls/NB158080172415100646307320322242_playback_1581252062434045689.m3u8#http://static-ali.live.kaochong.com/hls/NB158080172415100646307320322242_playback_1581252062434045689.m3u8#http://static-oss.live.kaochong.com/hls/NB158080172415100646307320322242_playback_1581252062434045689.m3u8# |21考研数学新手3周刷题营01期|17|3月1日每日一题|陈晓燕|http://static-bos.live.kaochong.com/hls/NB158080175071507149293500322243_playback_1581318494088412251.m3u8#http://static-ali.live.kaochong.com/hls/NB158080175071507149293500322243_playback_1581318494088412251.m3u8#http://static-oss.live.kaochong.com/hls/NB158080175071507149293500322243_playback_1581318494088412251.m3u8# |21考研数学新手3周刷题营01期|18|3月2日每日一题|曾芸芸|http://static-bos.live.kaochong.com/hls/NB158190993722408852135280354749_playback_1582276182743591393.m3u8#http://static-ali.live.kaochong.com/hls/NB158190993722408852135280354749_playback_1582276182743591393.m3u8#http://static-oss.live.kaochong.com/hls/NB158190993722408852135280354749_playback_1582276182743591393.m3u8# |21考研数学新手3周刷题营01期|19|3月3日每日一题|曾芸芸|http://static-bos.live.kaochong.com/hls/NB158190996781911481390390354750_playback_1582276363336458675.m3u8#http://static-ali.live.kaochong.com/hls/NB158190996781911481390390354750_playback_1582276363336458675.m3u8#http://static-oss.live.kaochong.com/hls/NB158190996781911481390390354750_playback_1582276363336458675.m3u8# |21考研数学新手3周刷题营01期|20|3月4日每日一题|曾芸芸|http://static-bos.live.kaochong.com/hls/NB158191000225604672797370022739_playback_1582276484245750038.m3u8#http://static-ali.live.kaochong.com/hls/NB158191000225604672797370022739_playback_1582276484245750038.m3u8#http://static-oss.live.kaochong.com/hls/NB158191000225604672797370022739_playback_1582276484245750038.m3u8# |21考研数学新手3周刷题营01期|21|3月5日每日一题|曾芸芸|http://static-bos.live.kaochong.com/hls/NB158191005860701731736820354751_playback_1582276567810168469.m3u8#http://static-ali.live.kaochong.com/hls/NB158191005860701731736820354751_playback_1582276567810168469.m3u8#http://static-oss.live.kaochong.com/hls/NB158191005860701731736820354751_playback_1582276567810168469.m3u8# |21考研数学新手3周刷题营01期|22|3月6日每日一题|曾芸芸|http://static-bos.live.kaochong.com/hls/NB158191009035808291512270022740_playback_1582276761558436107.m3u8#http://static-ali.live.kaochong.com/hls/NB158191009035808291512270022740_playback_1582276761558436107.m3u8#http://static-oss.live.kaochong.com/hls/NB158191009035808291512270022740_playback_1582276761558436107.m3u8# |21考研数学新手3周刷题营01期|23|3月7日每日一题|曾芸芸|http://static-bos.live.kaochong.com/hls/NB158191012337102577107230354752_playback_1582276870762068803.m3u8#http://static-ali.live.kaochong.com/hls/NB158191012337102577107230354752_playback_1582276870762068803.m3u8#http://static-oss.live.kaochong.com/hls/NB158191012337102577107230354752_playback_1582276870762068803.m3u8# |21考研数学新手3周刷题营01期|24|3月8日每日一题|曾芸芸|http://static-bos.live.kaochong.com/hls/NB158191015381108732245240354753_playback_1582277023483125350.m3u8#http://static-ali.live.kaochong.com/hls/NB158191015381108732245240354753_playback_1582277023483125350.m3u8#http://static-oss.live.kaochong.com/hls/NB158191015381108732245240354753_playback_1582277023483125350.m3u8#
0xB. 最終獲取到的鏈接: http://static-bos.live.kaochong.com/hls/NB158107184894020532326730322387_playback_1583064369951851514.m3u8
可以直接在播放器播放
0xC. 安卓批量下載測試:
rg_bottom.setOnCheckedChangeListener { group, checkedId -> categoryInfo.categoryList.clear() when (checkedId) { R.id.test -> { val combi ="""|21考研数学新手3周刷题营01期|1|2月23日直播答疑and总结|李良|http://static-bos.live.kaochong.com/hls/NB158107182433609316935330322386_playback_1582461830972970908.m3u8#http://static-ali.live.kaochong.com/hls/NB158107182433609316935330322386_playback_1582461830972970908.m3u8#http://static-oss.live.kaochong.com/hls/NB158107182433609316935330322386_playback_1582461830972970908.m3u8# |21考研数学新手3周刷题营01期|2|3月1日直播答疑and总结|陈晓燕|http://static-bos.live.kaochong.com/hls/NB158107184894020532326730322387_playback_1583064369951851514.m3u8#http://static-ali.live.kaochong.com/hls/NB158107184894020532326730322387_playback_1583064369951851514.m3u8#http://static-oss.live.kaochong.com/hls/NB158107184894020532326730322387_playback_1583064369951851514.m3u8# |21考研数学新手3周刷题营01期|3|3月8日直播答疑and总结|曾芸芸|http://static-bos.live.kaochong.com/hls/NB158107188249817326059820322388_playback_1583668858421427962.m3u8#http://static-ali.live.kaochong.com/hls/NB158107188249817326059820322388_playback_1583668858421427962.m3u8#http://static-oss.live.kaochong.com/hls/NB158107188249817326059820322388_playback_1583668858421427962.m3u8# |21考研数学新手3周刷题营01期|4|2月17日每日一题|李良|http://static-bos.live.kaochong.com/hls/NB158053799881212540635490322201_playback_1581062826565138459.m3u8#http://static-ali.live.kaochong.com/hls/NB158053799881212540635490322201_playback_1581062826565138459.m3u8#http://static-oss.live.kaochong.com/hls/NB158053799881212540635490322201_playback_1581062826565138459.m3u8# |21考研数学新手3周刷题营01期|5|2月18日每日一题|李良|http://static-bos.live.kaochong.com/hls/NB158053802682704037675120217379_playback_1581062929826664025.m3u8#http://static-ali.live.kaochong.com/hls/NB158053802682704037675120217379_playback_1581062929826664025.m3u8#http://static-oss.live.kaochong.com/hls/NB158053802682704037675120217379_playback_1581062929826664025.m3u8# |21考研数学新手3周刷题营01期|6|2月19日每日一题|李良|http://static-bos.live.kaochong.com/hls/NB158053805515521446560550217380_playback_1580983356343305817.m3u8#http://static-ali.live.kaochong.com/hls/NB158053805515521446560550217380_playback_1580983356343305817.m3u8#http://static-oss.live.kaochong.com/hls/NB158053805515521446560550217380_playback_1580983356343305817.m3u8# |21考研数学新手3周刷题营01期|7|2月20日每日一题|李良|http://static-bos.live.kaochong.com/hls/NB158053808341204730615580217381_playback_1581062839582578107.m3u8#http://static-ali.live.kaochong.com/hls/NB158053808341204730615580217381_playback_1581062839582578107.m3u8#http://static-oss.live.kaochong.com/hls/NB158053808341204730615580217381_playback_1581062839582578107.m3u8# |21考研数学新手3周刷题营01期|8|2月21日每日一题|李良|http://static-bos.live.kaochong.com/hls/NB158053811201105424828820322202_playback_1581062921372927773.m3u8#http://static-ali.live.kaochong.com/hls/NB158053811201105424828820322202_playback_1581062921372927773.m3u8#http://static-oss.live.kaochong.com/hls/NB158053811201105424828820322202_playback_1581062921372927773.m3u8# |21考研数学新手3周刷题营01期|9|2月22日每日一题|李良|http://static-bos.live.kaochong.com/hls/NB158053814150507642610880322203_playback_1581063005053803307.m3u8#http://static-ali.live.kaochong.com/hls/NB158053814150507642610880322203_playback_1581063005053803307.m3u8#http://static-oss.live.kaochong.com/hls/NB158053814150507642610880322203_playback_1581063005053803307.m3u8# |21考研数学新手3周刷题营01期|10|2月23日每日一题|李良|http://static-bos.live.kaochong.com/hls/NB158053846881210853689790217382_playback_1581064800807806849.m3u8#http://static-ali.live.kaochong.com/hls/NB158053846881210853689790217382_playback_1581064800807806849.m3u8#http://static-oss.live.kaochong.com/hls/NB158053846881210853689790217382_playback_1581064800807806849.m3u8# |21考研数学新手3周刷题营01期|11|2月24日每日一题|陈晓燕|http://static-bos.live.kaochong.com/hls/NB158080153991312977299810217424_playback_1581242790942508924.m3u8#http://static-ali.live.kaochong.com/hls/NB158080153991312977299810217424_playback_1581242790942508924.m3u8#http://static-oss.live.kaochong.com/hls/NB158080153991312977299810217424_playback_1581242790942508924.m3u8# |21考研数学新手3周刷题营01期|12|2月25日每日一题|陈晓燕|http://static-bos.live.kaochong.com/hls/NB158080157320807755680420322240_playback_1581242956560332677.m3u8#http://static-ali.live.kaochong.com/hls/NB158080157320807755680420322240_playback_1581242956560332677.m3u8#http://static-oss.live.kaochong.com/hls/NB158080157320807755680420322240_playback_1581242956560332677.m3u8# |21考研数学新手3周刷题营01期|13|2月26日每日一题|陈晓燕|http://static-bos.live.kaochong.com/hls/NB158080160873609865633870217425_playback_1581321964505029638.m3u8#http://static-ali.live.kaochong.com/hls/NB158080160873609865633870217425_playback_1581321964505029638.m3u8#http://static-oss.live.kaochong.com/hls/NB158080160873609865633870217425_playback_1581321964505029638.m3u8# |21考研数学新手3周刷题营01期|14|2月28日每日一题|陈晓燕|http://static-bos.live.kaochong.com/hls/NB158286260235009503001650591747_playback_1582864512994364953.m3u8#http://static-ali.live.kaochong.com/hls/NB158286260235009503001650591747_playback_1582864512994364953.m3u8#http://static-oss.live.kaochong.com/hls/NB158286260235009503001650591747_playback_1582864512994364953.m3u8# |21考研数学新手3周刷题营01期|15|2月27日每日一题|陈晓燕|http://static-bos.live.kaochong.com/hls/NB158080167019005788157050322241_playback_1581318225879293176.m3u8#http://static-ali.live.kaochong.com/hls/NB158080167019005788157050322241_playback_1581318225879293176.m3u8#http://static-oss.live.kaochong.com/hls/NB158080167019005788157050322241_playback_1581318225879293176.m3u8# |21考研数学新手3周刷题营01期|16|2月29日每日一题|陈晓燕|http://static-bos.live.kaochong.com/hls/NB158080172415100646307320322242_playback_1581252062434045689.m3u8#http://static-ali.live.kaochong.com/hls/NB158080172415100646307320322242_playback_1581252062434045689.m3u8#http://static-oss.live.kaochong.com/hls/NB158080172415100646307320322242_playback_1581252062434045689.m3u8# |21考研数学新手3周刷题营01期|17|3月1日每日一题|陈晓燕|http://static-bos.live.kaochong.com/hls/NB158080175071507149293500322243_playback_1581318494088412251.m3u8#http://static-ali.live.kaochong.com/hls/NB158080175071507149293500322243_playback_1581318494088412251.m3u8#http://static-oss.live.kaochong.com/hls/NB158080175071507149293500322243_playback_1581318494088412251.m3u8# |21考研数学新手3周刷题营01期|18|3月2日每日一题|曾芸芸|http://static-bos.live.kaochong.com/hls/NB158190993722408852135280354749_playback_1582276182743591393.m3u8#http://static-ali.live.kaochong.com/hls/NB158190993722408852135280354749_playback_1582276182743591393.m3u8#http://static-oss.live.kaochong.com/hls/NB158190993722408852135280354749_playback_1582276182743591393.m3u8# |21考研数学新手3周刷题营01期|19|3月3日每日一题|曾芸芸|http://static-bos.live.kaochong.com/hls/NB158190996781911481390390354750_playback_1582276363336458675.m3u8#http://static-ali.live.kaochong.com/hls/NB158190996781911481390390354750_playback_1582276363336458675.m3u8#http://static-oss.live.kaochong.com/hls/NB158190996781911481390390354750_playback_1582276363336458675.m3u8# |21考研数学新手3周刷题营01期|20|3月4日每日一题|曾芸芸|http://static-bos.live.kaochong.com/hls/NB158191000225604672797370022739_playback_1582276484245750038.m3u8#http://static-ali.live.kaochong.com/hls/NB158191000225604672797370022739_playback_1582276484245750038.m3u8#http://static-oss.live.kaochong.com/hls/NB158191000225604672797370022739_playback_1582276484245750038.m3u8# |21考研数学新手3周刷题营01期|21|3月5日每日一题|曾芸芸|http://static-bos.live.kaochong.com/hls/NB158191005860701731736820354751_playback_1582276567810168469.m3u8#http://static-ali.live.kaochong.com/hls/NB158191005860701731736820354751_playback_1582276567810168469.m3u8#http://static-oss.live.kaochong.com/hls/NB158191005860701731736820354751_playback_1582276567810168469.m3u8# |21考研数学新手3周刷题营01期|22|3月6日每日一题|曾芸芸|http://static-bos.live.kaochong.com/hls/NB158191009035808291512270022740_playback_1582276761558436107.m3u8#http://static-ali.live.kaochong.com/hls/NB158191009035808291512270022740_playback_1582276761558436107.m3u8#http://static-oss.live.kaochong.com/hls/NB158191009035808291512270022740_playback_1582276761558436107.m3u8# |21考研数学新手3周刷题营01期|23|3月7日每日一题|曾芸芸|http://static-bos.live.kaochong.com/hls/NB158191012337102577107230354752_playback_1582276870762068803.m3u8#http://static-ali.live.kaochong.com/hls/NB158191012337102577107230354752_playback_1582276870762068803.m3u8#http://static-oss.live.kaochong.com/hls/NB158191012337102577107230354752_playback_1582276870762068803.m3u8# |21考研数学新手3周刷题营01期|24|3月8日每日一题|曾芸芸|http://static-bos.live.kaochong.com/hls/NB158191015381108732245240354753_playback_1582277023483125350.m3u8#http://static-ali.live.kaochong.com/hls/NB158191015381108732245240354753_playback_1582277023483125350.m3u8#http://static-oss.live.kaochong.com/hls/NB158191015381108732245240354753_playback_1582277023483125350.m3u8#""" val courseInfo = CourseInfo() categoryInfo.categoryList.clear() val arr = combi.split("\n") arr.forEach { //|$courseName|$index|$lessonName|$teacherName|$lessonId" val split2 = it.split("|") val lesson: CourseInfo.Lesson = CourseInfo.Lesson() courseInfo.courseName = split2[1] lesson.index = split2[2] lesson.lessonName = split2[3] lesson.teacherName = split2[4] lesson.roomId = split2[5] val fileName = lesson.index + "_" + lesson.lessonName + "_" + lesson.teacherName val categoryListInfo = CategoryListInfo() categoryListInfo.categoryName = fileName categoryListInfo.categoryUrl = lesson.roomId categoryListInfo.categoryVideoCount = "3" categoryInfo.categoryList.add(categoryListInfo) } option.clear() categoryInfo.categoryList.forEach { if (it.categoryVideoCount != "") { option.add(it.categoryName + "[" + it.categoryVideoCount + "]") } else { option.add(it.categoryName) } val list: MutableList<String> = ArrayList() val splitUrl = it.categoryUrl.split("#") splitUrl.forEach { url -> if (url != null) { if (url != "") { list.add(url) } } } ///////// 調用第三方下載器下載 // Intent val intent = Intent() intent.component = ComponentName( "ru.yourok.m3u8loader", "ru.yourok.m3u8loader.activitys.AddListActivity" ) intent.data = Uri.parse(list[0]) // Bundle val bundle = Bundle() bundle.putString("name", it.categoryName) bundle.putString("download", "true") intent.putExtras(bundle) //将bundle传入intent中。 launcherUiActivity.startActivityForResult(intent, 0) //////// } } else -> { } } }
0xD. 效果
Xposed模塊交流群: 621751638 244370614
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2020-6-24 12:53
被KwaiChing编辑
,原因:
赞赏
他的文章
看原图
赞赏
雪币:
留言: