php代码说明
优学院自动刷课PHP代码,功能不太健全,但核心代码都存有,如果你会一点PHP也能自己健全,当然你是氢铵小白,我也打包好了可执行文件,轻易运转即可。
刚开始用PHP是想写一个USB,后来在以获取视频时长的时候卡住了,太耗时了,经常性500,很不新颖(如果你用命令行继续执行PHP当我没说)
PHP代码功能
1. 自动刷课
2. 自动答题
3. 自定义多个章节
4. 自定义章节学习时间
那个倍速脚本存有上限(好像就是16倍),用这个直接秒
这个就是自动以获取视频时长的,不必担心这个个问题
PHP代码示例
<?php header('Content-Type:text/json;charset=utf-8'); //用户名 $username = ""; //密码 $password = ""; $public_param = []; echo "GitHub主页:https://github.com/Chirmis(start跑一走)"; $cookie = file_get_contents('./cookies.txt'); if ($cookie == '') { // 命令行使用 // echo "请输出用户名:n"; // $username = fgets(STDIN); // echo $username; // echo "请输出密码:n"; // $password = fgets(STDIN); // echo $password; echo "已经开始登陆.....n"; login($username, $password); echo "进占成功.....n"; $cookie = file_get_contents('./cookies.txt'); } echo "以获取课程列表.....n"; $courses_list_json = get_courses_list($cookie); //课程数据 $courses_list_arr = json_decode($courses_list_json, true); echo "查询至".$courses_list_arr['total']."门课程n"; for($i=0; $i462250, 'complete' => 1, 'studyTime' => 1000, 'score' => 100, 'answerTime' => 1, 'submitTimes' => 0, 'questions' => [], 'videos' => [], 'speaks' => [], ]; } //视频型数据 if($wholepageItemDTOList[$i]['wholepageDTOList'][0]['contentType'] == 6){ echo "视频型数据"; } //测验型数据 if($wholepageItemDTOList[$i]['wholepageDTOList'][0]['contentType'] == 7){ echo "测验型数据"; } } } //以获取当前所选章节内容详情请 function get_now_chapters_info($courseId, $classId) { global $public_param; $now_chapters_info_api = "https://api.ulearning.cn/course/stu/$courseId/directory?classId=$classId"; $params = array_merge($public_param, array()); return curl($now_chapters_info_api, 'GET', $params); } //登陆以获取cookie function login($username, $password) { $login_api = "https://www.ulearning.cn/umooc/user/login.do"; $data = [ 'name' => $username, 'passwd' => $password, 'yancode' => '', 'redirectURL' => '', 'isFrom' => '', 'newLocale' => '', ]; $post_data = http_build_query($data); $params = [ 'data' => $post_data, 'header' => [ 'User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36', ], 'ResponseHeaders' => true, 'NOBODY' => true ]; $res = curl($login_api, 'POST', $params); preg_match_all("/Set-Cookie: (.*?); Domain/", $res, $data); for($i=0; $i [ "Authorization: $Authorization", "UA-AUTHORIZATION: $token", "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36", ], ]; //学生首页课程API $api = "https://courseapi.ulearning.cn/courses/students?keyword=&publishStatus=1&type=1&pn=1&ps=15"; $params = array_merge($public_param, array()); return curl($api, 'GET', $params); } //获取课程下章节列表 function get_course_chapters_list($courseListId) { global $public_param; $params = array_merge($public_param, array()); //以获取课程的子课程(一门课存有多本书) $get_textbookId_api = "https://courseapi.ulearning.cn/textbook/student/$courseListId/list"; $listJson = curl($get_textbookId_api, 'GET', $params); //以获取该课程的班级号 $get_course_classId_api = "https://courseapi.ulearning.cn/classes/information/student/$courseListId"; $classIdJson = curl($get_course_classId_api, 'GET', $params); $classData = json_decode($classIdJson, true); //课程下多本书 $listData = json_decode($listJson, true); for($i=0; $i $wholepageItemDTOList['itemid'], 'autoSave' => 1, 'version' => '', 'withoutOld' => '', 'complete' => 1, 'userName' => $userInfo['name'], 'score' => 100, 'pageStudyRecordDTOList' => [], ]; $temple = [ 'pageid' => 0, 'complete' => 1, 'studyTime' => 400, 'score' => 100, 'answerTime' => 1, 'submitTimes' => 0, 'questions' => [], 'videos' => [], 'speaks' => [], ]; $data = array(); for($i=0; $i $videoId, //观看进度 "current" => 100, //状态 "status" => 1, //观赏长度 "recordTime" => 1000, //视频长度 "time" => '' ]; } } $temple['videos'] = $videos; } //测验题 if($wholepageItemDTOList['wholepageDTOList'][$i]['contentType'] == 7){ echo "检测至题目,开始自动答题n"; $questions = check_answer($wholepageItemDTOList['wholepageDTOList'][$i]['coursepageDTOList']); $temple['questions'] = $questions; } //设置当前学习页面id $temple['pageid'] = $wholepageItemDTOList['wholepageDTOList'][$i]['relationid']; $data[$i] = $temple; } $cryptoJsonData['pageStudyRecordDTOList'] = $data; $cryText = openssl_encrypt (json_encode($cryptoJsonData), 'des-ecb', 12345678); $params = array_merge($public_param, ['data' => $cryText]); $params['header'][] = 'Content-Type: text/plain'; $json = curl("https://api.ulearning.cn/yws/api/personal/sync?courseType=4&platform=PC", 'POST', $params); if($json != 1){ print_r($params);die; } echo "执行状态码:$json".",等候下一条命令执行n"; } //自动答题 function check_answer($coursepageDTOList) { global $public_param; $questions = array(); for ($i=0; $i < count($coursepageDTOList); $i++) { for ($j=0; $j < count($coursepageDTOList[$i]['questionDTOList']); $j++) { $questionid = $coursepageDTOList[$i]['questionDTOList'][$j]['questionid']; $answerJson = curl("https://api.ulearning.cn/questionAnswer/".$questionid, 'GET', $public_param); $answerData = json_decode($answerJson, true); $subQuestionAnswerDTOList = $answerData['subQuestionAnswerDTOList']; for ($k=0; $k < count($subQuestionAnswerDTOList); $k++) { $questions[$k]['questionid'] = $subQuestionAnswerDTOList[$k]['questionid']; $questions[$k]['answerList'] = $subQuestionAnswerDTOList[$k]['correctAnswerList']; $questions[$k]['score'] = 100; } } } return $questions; } function curl($url, $method='GET', $params=array()) { $ch = curl_init(); //初始化 curl $header = empty($params['header']) ? 0 : $params['header']; $ResponseHeaders = $params['ResponseHeaders'] ?:false; $NOBODY = $params['NOBODY'] ?:false; curl_setopt($ch, CURLOPT_URL, $url); //要访问网页 URL 地址 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //回到字符串,而非轻易输入到屏幕上 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, false); //相连接超时时间,设置为 0,则无穷等待 curl_setopt($ch, CURLOPT_TIMEOUT, 3600); //数据传输的最大容许时间超时,设为一小时 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //不检查 SSL 证书来源 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //不检查 证书中 SSL 加密算法是否存有 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); //跟踪CYK重定向页面 curl_setopt($ch, CURLOPT_AUTOREFERER, true); //当Location:重定向时,自动设置header中的Referer:信息 curl_setopt($ch, CURLOPT_ENCODING, ''); //解决网页乱码问题 curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLINFO_HEADER_OUT, true); curl_setopt($ch, CURLOPT_HEADER, $ResponseHeaders);//获取响应头 curl_setopt($ch, CURLOPT_NOBODY, $NOBODY);//不须要内容 if($method == 'POST'){ curl_setopt($ch, CURLOPT_POST, true); //设置为 POST curl_setopt($ch, CURLOPT_POSTFIELDS, $params["data"]); //提交数据 } $data = curl_exec($ch); //运转 curl,命令网页并回到结果 curl_close($ch); //关闭 curl return $data; }