🏠 Home 

国开自动刷课

国家开放大学自动刷课,登陆后进入学习空间“我的课程”自动开始学习


ติดตั้งสคริปต์นี้?
  1. // ==UserScript==
  2. // @name 国开自动刷课
  3. // @namespace ry版
  4. // @version 202310081507
  5. // @description 国家开放大学自动刷课,登陆后进入学习空间“我的课程”自动开始学习
  6. // @author 流浪的蛊惑
  7. // @match *://lms.ouchn.cn/*
  8. // @license MIT
  9. // @grant none
  10. // ==/UserScript==
  11. var ginfo=document.getElementsByClassName("teaching-class-header card")[0],gpro=0,st=0;
  12. function GetSemesters(){//获取学期列表
  13. $.ajax({
  14. method:"GET",
  15. url:"/api/my-semesters",
  16. success:function(j){
  17. GetCourses(j.semesters[0].id);
  18. }
  19. });
  20. }
  21. function GetCourses(semester_id){//获取课程列表
  22. $.ajax({
  23. method:"GET",
  24. url:"/api/my-courses?conditions=%7B%22semester_id%22:%5B%22"+semester_id+"%22%5D,\"status\":%5B\"ongoing\"%5D,\"keyword\":\"\"%7D&fields=id,name,course_code,department(id,name),grade(id,name),klass(id,name),course_type,cover,small_cover,start_date,end_date,is_started,is_closed,academic_year_id,semester_id,credit,compulsory,second_name,display_name,created_user(id,name),org(is_enterprise_or_organization),org_id,public_scope,course_attributes(teaching_class_name,copy_status,tip,data),audit_status,audit_remark,can_withdraw_course,imported_from,allow_clone,is_instructor,is_team_teaching,academic_year(id,name),semester(id,name),instructors(id,name,email,avatar_small_url),is_master,is_child,has_synchronized,master_course(name)&page=1&page_size=50",
  25. success:function(j){
  26. for(let i=0;i<j.courses.length;i++){
  27. st += 500 + Math.floor(Math.random() * 1000);
  28. setTimeout(()=>{GetCompleteness(j.courses[i].id)},st);
  29. }
  30. }
  31. });
  32. }
  33. function GetCompleteness(id){//获取已完成列表
  34. $.ajax({
  35. method:"GET",
  36. url:"/api/course/"+id+"/my-completeness",
  37. success:function(j){
  38. GetModules(id,j.completed_r###lt.completed.learning_activity);
  39. }
  40. });
  41. }
  42. function GetModules(id,ywc){//获取模块列表
  43. $.ajax({
  44. method:"GET",
  45. url:"/api/courses/"+id+"/modules",
  46. success:function(j){
  47. for(let i=0;i<j.modules.length;i++){
  48. GetActivities(id,j.modules[i].id,ywc);
  49. }
  50. }
  51. });
  52. }
  53. function GetActivities(kid,id,ywc){//获取模块列表
  54. $.ajax({
  55. method:"GET",
  56. url:"/api/course/"+kid+"/all-activities?module_ids=["+id+"]&activity_types=learning_activities,exams,classrooms,live_records,rollcalls&no-loading-animation=true",
  57. success:function(j){
  58. for(let i=0;i<j.learning_activities.length;i++){
  59. if(ywc.join(",").indexOf(j.learning_activities[i].id)==-1){
  60. st += 3000 + Math.floor(Math.random() * 2000);
  61. gpro++;
  62. setTimeout(()=>{PostActivities(j.learning_activities[i].uploads,j.learning_activities[i].id)},st);
  63. }
  64. }
  65. }
  66. });
  67. }
  68. function PostActivities(uploads,id){//获取模块列表
  69. let str="{}";
  70. if(uploads.length>0){
  71. if(uploads[0].videos.length>0){
  72. str="{\"start\":0,\"end\":"+uploads[0].videos[0].duration+"}"
  73. }
  74. }
  75. $.ajax({
  76. method:"POST",
  77. url:"/api/course/activities-read/"+id,
  78. data:str,
  79. contentType:"application/json",
  80. dataType:"json",
  81. success:function(j){
  82. gpro--;
  83. ginfo.innerHTML="<span style=\"color:blue;\"> 学习剩余数:"+gpro+"</span>";
  84. console.log(str+"="+j.completeness);
  85. }
  86. });
  87. }
  88. (function() {
  89. 'use strict';
  90. if(location.href.indexOf("/user/courses")>-1){
  91. ginfo.innerHTML="<span style=\"color:red;\">学习初始化中(请等待2分钟左右)……</span>";
  92. GetSemesters();
  93. }
  94. })();