初始化
This commit is contained in:
423
app/command/Lebo.php
Normal file
423
app/command/Lebo.php
Normal file
@@ -0,0 +1,423 @@
|
||||
<?php
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\command;
|
||||
use Exception;
|
||||
use think\console\Command;
|
||||
use think\console\Input;
|
||||
use think\console\input\Argument;
|
||||
use think\console\input\Option;
|
||||
use think\console\Output;
|
||||
|
||||
use think\facade\Cache;
|
||||
|
||||
use Curl\Curl;
|
||||
use think\helper\Str;
|
||||
use app\kernel\Lebolebo\Account;
|
||||
use app\kernel\Lebolebo\Curriculum;
|
||||
|
||||
use Aria2;
|
||||
|
||||
class Lebo extends Command
|
||||
{
|
||||
private $aria2 = null;
|
||||
private $completed = false;
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
// 指令配置
|
||||
$this->setName('course')
|
||||
->setDescription('the course command');
|
||||
}
|
||||
protected function execute(Input $input, Output $output)
|
||||
{
|
||||
$this->aria2 = new Aria2('http://127.0.0.1:16800/jsonrpc','11223344');
|
||||
$this->completed = false;
|
||||
while($this->completed === false){
|
||||
try {
|
||||
$this->start();
|
||||
} catch (\Exception $e) {
|
||||
dump($e);
|
||||
sleep(3);
|
||||
}
|
||||
}
|
||||
dump('下载完成!');
|
||||
// 指令输出
|
||||
// $output->writeln('course');
|
||||
}
|
||||
private function start()
|
||||
{
|
||||
// $savepath = store_path() . '/lebolebo/';
|
||||
$savepath = 'E:/lebolebo/';
|
||||
$account = new Account();
|
||||
$account_info = $account->login('13880615958','robo520');
|
||||
if($account_info['code'] == 500){
|
||||
dump($account_info['msg']);
|
||||
exit;
|
||||
}
|
||||
$curl = new Curl();
|
||||
$curr = new Curriculum();
|
||||
$curr->setHeader('token',$account_info['data']['token']);
|
||||
$course = $curr->list(0);
|
||||
|
||||
foreach ($course['data']['list'] as $list){
|
||||
$c = $savepath . $list['courseName'];
|
||||
is_dir($c) || mkdir($c,0755,true);
|
||||
$detail = $curr->detail($list['id']);
|
||||
$courseCover = $c . '/courseCover.png';
|
||||
if($detail['data']['courseCover']){
|
||||
$downloadurl = $detail['data']['courseCover'];
|
||||
$check = $this->checkfile($downloadurl,$courseCover);
|
||||
if(!$check && !is_file($courseCover)){
|
||||
// $result = $curl->_fastDownload($downloadurl,$courseCover);
|
||||
$this->aria2->addUri(
|
||||
[$downloadurl],
|
||||
['dir'=>$c,
|
||||
'out'=>'courseCover.png'
|
||||
]
|
||||
);
|
||||
// dump('封面下载结果:',$result);
|
||||
// if($result){
|
||||
// $this->complete($downloadurl,$courseCover);
|
||||
// }
|
||||
}
|
||||
$txt = $courseCover . '-下载地址.txt';
|
||||
$this->savetxt($txt,$downloadurl);
|
||||
}
|
||||
$d = $curr->courseUnitList($list['courseCode']);
|
||||
$courseUnits = $d['data']['courseUnit'];
|
||||
if($courseUnits === null){
|
||||
continue;
|
||||
}
|
||||
foreach ($courseUnits as $courseUnit){
|
||||
$courseUnitName = $c . '/' . str_ireplace('/','-',$courseUnit['courseUnitName']);
|
||||
if(!is_dir($courseUnitName)){
|
||||
dump('创建课程文件夹:' . $courseUnitName);
|
||||
mkdir($courseUnitName,0755,true);
|
||||
}
|
||||
$selectByCourseUnits = $curr->selectByCourseUnits($courseUnit['courseCode'],$courseUnit['courseUnitCode']);
|
||||
foreach ($selectByCourseUnits['data'] as $selectByCourseUnit){
|
||||
$this->waiting();
|
||||
$sessionName = $courseUnitName . '/' . $selectByCourseUnit['sessionName'];
|
||||
if(!is_dir($sessionName)){
|
||||
dump('创建课件文件夹:'.$sessionName);
|
||||
mkdir($sessionName,0755,true);
|
||||
}
|
||||
$t = $curr->selectByCourseSessionCode($selectByCourseUnit['courseSessionCode']);
|
||||
// 0: {type: 1, des: "PPT-HTML"}
|
||||
// 1: {type: 2, des: "讲义"}
|
||||
// 2: {type: 3, des: "课前预习"}
|
||||
// 3: {type: 4, des: "测一测"}
|
||||
// 4: {type: 5, des: "玩一玩"}
|
||||
// 5: {type: 6, des: "试一试"}
|
||||
// 6: {type: 9, des: "知识点"}
|
||||
// 7: {type: 10, des: "名人名言"}
|
||||
// 8: {type: 11, des: "录播课"}
|
||||
// 9: {type: 13, des: "教辅"}
|
||||
// 10: {type: 14, des: "备课"}
|
||||
// 11: {type: 15, des: "课程内容"}
|
||||
// 12: {type: 16, des: "课后拓展"}
|
||||
// 13: {type: 18, des: "素养目标"}
|
||||
$ts = $t['data'];
|
||||
foreach ($ts as $kk ){
|
||||
switch ($kk['resourceType']) {
|
||||
case '1':// PPT-HTML
|
||||
if(!isset($kk['content'])){
|
||||
continue;
|
||||
}
|
||||
$filename = $kk['content']['fileName'];
|
||||
$downloadurl = $kk['content']['fileUrl'];
|
||||
$file = $sessionName . '/' . $filename;
|
||||
// 保存下载地址
|
||||
$txt = "{$file}-下载地址.txt";
|
||||
$this->savetxt($txt,$downloadurl);
|
||||
$check = $this->checkfile($downloadurl,$file);
|
||||
if(!$check && !is_file($file)){
|
||||
dump('下载PPT:' . $file);
|
||||
// $result = $curl->_fastDownload($downloadurl,$file);
|
||||
// dump('PPT下载结果:',$result);
|
||||
// if($result){
|
||||
// $this->complete($downloadurl,$file);
|
||||
// }
|
||||
$this->aria2->addUri(
|
||||
[$downloadurl],
|
||||
['dir'=>$sessionName,
|
||||
'out'=>$filename]
|
||||
);
|
||||
}else if($check && !is_file($file)){
|
||||
if(is_file($check)){
|
||||
try {
|
||||
copy($check,$file);
|
||||
} catch (Exception $e) {
|
||||
dump('文件拷贝失败:',$e);
|
||||
exit;
|
||||
}
|
||||
}else{
|
||||
dump('下载PPT:' . $file);
|
||||
// $result = $curl->_fastDownload($downloadurl,$file);
|
||||
// dump('PPT下载结果:',$result);
|
||||
// if($result){
|
||||
// $this->complete($downloadurl,$file);
|
||||
// }
|
||||
$this->aria2->addUri(
|
||||
[$downloadurl],
|
||||
['dir'=>$sessionName,
|
||||
'out'=>$filename]
|
||||
);
|
||||
}
|
||||
|
||||
dump('跳过PPT:' . $file);
|
||||
}else{
|
||||
dump('PPT文件已存在:' . $file);
|
||||
$this->complete($downloadurl,$file);
|
||||
}
|
||||
break;
|
||||
case '2':
|
||||
break;
|
||||
case '3':
|
||||
break;
|
||||
case '4':
|
||||
break;
|
||||
case '5':
|
||||
break;
|
||||
case '6':
|
||||
// 试一试
|
||||
$shiyishi = $sessionName . '/试一试/';
|
||||
if(!is_dir($shiyishi)){
|
||||
mkdir($shiyishi,0755,true);
|
||||
}
|
||||
$questions = $kk['content']['questions'];
|
||||
if(!is_array($questions))break;
|
||||
foreach ($questions as $key => $question) {
|
||||
$filename = $question['fileName'];
|
||||
$downloadurl = $question['fileUrl'];
|
||||
$file = $shiyishi . $filename;
|
||||
// 保存文件下载地址
|
||||
$txt = "{$file}-下载地址.txt";
|
||||
$this->savetxt($txt,$downloadurl);
|
||||
$check = $this->checkfile($downloadurl,$file);
|
||||
if(!$check && !is_file($file)){
|
||||
// $result = $curl->_fastDownload($downloadurl,$file);
|
||||
// dump('试一试下载结果:',$result);
|
||||
// if($result){
|
||||
// $this->complete($downloadurl,$file);
|
||||
// }
|
||||
$this->aria2->addUri(
|
||||
[$downloadurl],
|
||||
['dir'=>$shiyishi,
|
||||
'out'=>$filename]
|
||||
);
|
||||
}else if($check && !is_file($file)){
|
||||
copy($check,$file);
|
||||
dump('跳过试一试:' . $file);
|
||||
}else{
|
||||
dump('试一试文件已存在:' . $file);
|
||||
$this->complete($downloadurl,$file);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case '9':
|
||||
break;
|
||||
case '10':
|
||||
break;
|
||||
case '11':
|
||||
break;
|
||||
case '13':
|
||||
// 教辅
|
||||
if(!isset($kk['content']['resourceList'])){
|
||||
continue;
|
||||
}
|
||||
$jiaofupath = $sessionName . '/教辅/';
|
||||
if(!is_dir($jiaofupath)){
|
||||
mkdir($jiaofupath,0755,true);
|
||||
}
|
||||
$resourceLists = $kk['content']['resourceList'];
|
||||
foreach($resourceLists as $resourceList){
|
||||
$file = $jiaofupath . $resourceList['fileName'] ;
|
||||
if(Str::endsWith($file,['.mp4','.mov'])){
|
||||
$dd = $curr->getVideoUrl($resourceList['fileUrl']);
|
||||
$downloadurl = $dd['data'];
|
||||
}else{
|
||||
$downloadurl = $resourceList['fileUrl'];
|
||||
}
|
||||
// 保存下载地址
|
||||
$txt = "{$file}-下载地址.txt";
|
||||
$this->savetxt($txt,$downloadurl);
|
||||
$check = $this->checkfile($downloadurl,$file);
|
||||
if(!$check && !is_file($file)){
|
||||
dump('下载教辅:' . $file);
|
||||
// $result = $curl->_fastDownload($downloadurl,$file);
|
||||
// dump('教辅下载结果:',$result);
|
||||
// if($result){
|
||||
// $this->complete($downloadurl,$file);
|
||||
// }
|
||||
$this->aria2->addUri(
|
||||
[$downloadurl],
|
||||
['dir'=>$jiaofupath,
|
||||
'out'=>$resourceList['fileName']]
|
||||
);
|
||||
}else if($check && !is_file($file)){
|
||||
copy($check,$file);
|
||||
dump('跳过教辅:' . $file);
|
||||
}else{
|
||||
dump('教辅文件已存在:' . $file);
|
||||
$this->complete($downloadurl,$file);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case '14':
|
||||
// 备课
|
||||
if(!isset($kk['content']['resourceList'])){
|
||||
continue;
|
||||
}
|
||||
$beikepath = $sessionName . '/备课/';
|
||||
if(!is_dir($beikepath)){
|
||||
mkdir($beikepath,0755,true);
|
||||
}
|
||||
$resourceLists = $kk['content']['resourceList'];
|
||||
foreach($resourceLists as $resourceList){
|
||||
$file = $beikepath . $resourceList['fileName'] ;
|
||||
if(Str::endsWith($file,['.mp4','.mov','.MP4','.mkv','.wmv'])){
|
||||
$dd = $curr->getVideoUrl($resourceList['fileUrl']);
|
||||
$downloadurl = $dd['data'];
|
||||
}else{
|
||||
$downloadurl = $resourceList['fileUrl'];
|
||||
}
|
||||
// 保存下载地址
|
||||
$txt = "{$file}-下载地址.txt";
|
||||
$this->savetxt($txt,$downloadurl);
|
||||
$check = $this->checkfile($downloadurl,$file);
|
||||
if(!$check && !is_file($file)){
|
||||
dump('下载备课:' . $file);
|
||||
// $result = $curl->_fastDownload($downloadurl,$file);
|
||||
// dump('备课下载结果:',$result);
|
||||
// if($result){
|
||||
// $this->complete($downloadurl,$file);
|
||||
// }
|
||||
$this->aria2->addUri(
|
||||
[$downloadurl],
|
||||
['dir'=>$beikepath,
|
||||
'out'=>$resourceList['fileName']]
|
||||
);
|
||||
}else if($check && !is_file($file)){
|
||||
copy($check,$file);
|
||||
dump('跳过备课:' . $file);
|
||||
}else{
|
||||
dump('备课文件已存在:' . $file);
|
||||
$this->complete($downloadurl,$file);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case '15':
|
||||
// 课程内容
|
||||
if(is_null($kk['content']['courseContent']))break;
|
||||
$file = "{$sessionName}/课程内容.txt";
|
||||
$this->savetxt($file,strip_tags($kk['content']['courseContent']));
|
||||
break;
|
||||
case '16':
|
||||
break;
|
||||
case '18':
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// break;
|
||||
}
|
||||
$this->completed = true;
|
||||
}
|
||||
private function checkfile($url,$file)
|
||||
{
|
||||
$key = 'lebolebo_check_header_'.md5($url);
|
||||
try {
|
||||
if(($head = Cache::get($key,null)) === NULL ){
|
||||
$head = @get_headers($url,1);
|
||||
if ($head === false) {
|
||||
dump('获取文件信息失败,直接重新下载'.$file);
|
||||
return false;
|
||||
}
|
||||
Cache::set($key,$head,86400);
|
||||
}
|
||||
$kk = 'lebolebo_file_' . pathinfo($file,PATHINFO_BASENAME);
|
||||
if(isset($head['Content-Length']) && ($size = intval($head['Content-Length']))){
|
||||
$kk .= $size;
|
||||
if(is_file($file) && ($size !== filesize($file))){
|
||||
dump('文件大小不符,重新下载'.$file);
|
||||
unlink($file);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if(isset($head['ETag'])){
|
||||
$t = $kk . md5($head['ETag']);
|
||||
if(Cache::has($t)){
|
||||
return Cache::get($t);
|
||||
}
|
||||
}
|
||||
if(isset($head['Content-MD5'])){
|
||||
$t = $kk . md5($head['Content-MD5']);
|
||||
if(Cache::has($t)){
|
||||
return Cache::get($t);
|
||||
}
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
dump('检查文件失败:',$url,$file,$e);
|
||||
exit;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
private function complete($url,$file)
|
||||
{
|
||||
$key = 'lebolebo_check_header_' . md5($url);
|
||||
try {
|
||||
if(($head = Cache::get($key,null)) === NULL ){
|
||||
$head = @get_headers($url,1);
|
||||
if($head === false){
|
||||
return false;
|
||||
}
|
||||
Cache::set($key,$head,86400);
|
||||
}
|
||||
$kk = 'lebolebo_file_' . pathinfo($file,PATHINFO_BASENAME);
|
||||
if(isset($head['Content-Length'])){
|
||||
$kk .= intval($head['Content-Length']);
|
||||
}
|
||||
if(isset($head['ETag'])){
|
||||
$t = $kk . md5($head['ETag']);
|
||||
Cache::set($t,$file,86400);
|
||||
}
|
||||
if(isset($head['Content-MD5'])){
|
||||
$t = $kk . md5($head['Content-MD5']);
|
||||
Cache::set($t,$file,86400);
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
dump($e);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
private function savetxt(string $file,string $content)
|
||||
{
|
||||
if(is_file($file)){
|
||||
unlink($file);
|
||||
}
|
||||
$myfile = fopen($file, "w");
|
||||
fwrite($myfile, $content);
|
||||
fclose($myfile);
|
||||
// dump('已保存文本内容:'.$file);
|
||||
}
|
||||
private function waiting()
|
||||
{
|
||||
$num = 1;
|
||||
while($num > 0){
|
||||
$activeDownloads = $this->aria2->getGlobalStat();
|
||||
$num = intval($activeDownloads['result']['numWaiting']);
|
||||
if($num > 10){
|
||||
dump('当前任务过多,等待任务数:',$num);
|
||||
sleep(1);
|
||||
}else{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
256
app/command/Zm.php
Normal file
256
app/command/Zm.php
Normal file
@@ -0,0 +1,256 @@
|
||||
<?php
|
||||
namespace app\command;
|
||||
use think\console\Command;
|
||||
use think\console\Input;
|
||||
use think\console\Output;
|
||||
use think\console\input\Option;
|
||||
use think\console\input\Argument;
|
||||
use think\console\input\InputOption;
|
||||
use Aria2;
|
||||
use think\facade\Log;
|
||||
use GuzzleHttp\Client;
|
||||
|
||||
class Zm extends Command
|
||||
{
|
||||
private $aria2 = null;
|
||||
private $completed = false;
|
||||
private $user_id = '8ROYK0G3vGLyyEFjr9DtEQ==';
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
// 指令配置
|
||||
$this->setName('zm')
|
||||
->setDescription('zm command');
|
||||
}
|
||||
|
||||
protected function execute(Input $input, Output $output)
|
||||
{
|
||||
// 输出结果
|
||||
// $output->writeln("Hello, {$name}!");
|
||||
// $output->writeln("Option: {$option}");
|
||||
$this->aria2 = new Aria2('http://127.0.0.1:16800/jsonrpc','11223344'); //实例化aria2对象
|
||||
$this->aria2->setOption('enable-async-dns', true); //设置异步dns解析
|
||||
$this->aria2->setOption('enable-http-pipelining', true); //设置http管道化
|
||||
$this->aria2->setOption('enable-http-keep-alive', true); //设置http保持连接
|
||||
$this->completed = false;
|
||||
while($this->completed === false){
|
||||
try {
|
||||
$this->start();
|
||||
} catch (\Exception $e) {
|
||||
halt($e);
|
||||
sleep(3);
|
||||
}
|
||||
}
|
||||
dump('下载完成!');
|
||||
}
|
||||
protected function start()
|
||||
{
|
||||
$savepath = 'E:/zm';
|
||||
$lable = $this->getLable();
|
||||
if($lable['code'] == 0){
|
||||
$leftLabel = $lable['data']['leftLabel'];
|
||||
foreach ($leftLabel[0]['children'] as $key => $course) {
|
||||
$lable_title = $course['title'];
|
||||
$lable_id = $course['id'];
|
||||
$next = true;
|
||||
$curr_page = 1;
|
||||
$curr_total = 0;
|
||||
while($next){
|
||||
$curr = $this->getCurr($lable_id,$curr_page);
|
||||
$currs = $curr['data']['curriculum'];
|
||||
foreach ($currs as $key => $value) {
|
||||
$curr_total++;
|
||||
$curr_item = $value;
|
||||
$curr_item_title = $curr_item['title'];
|
||||
$c = $savepath . '/' . $lable_title . '/' . $curr_item_title;
|
||||
// dump('存储路径',$c);
|
||||
is_dir($c) || mkdir($c,0755,true);
|
||||
|
||||
$author = $savepath . '/' . $lable_title . '/' . $curr_item_title . '/' . '作者.txt';
|
||||
$this->savetxt($author,$curr_item['author']);
|
||||
|
||||
$introduce = $savepath . '/' . $lable_title . '/' . $curr_item_title . '/' . '介绍.txt';
|
||||
$this->savetxt($introduce,$curr_item['introduce']);
|
||||
|
||||
$cover = $curr_item['cover'];
|
||||
$this->download($cover,$c);
|
||||
|
||||
$cover_name = basename($cover);
|
||||
$cover_path = "{$c}/{$cover_name}-下载地址.txt";
|
||||
$this->savetxt($cover_path,$cover);
|
||||
$curr_details = $this->getCurrDetails($curr_item['id']);
|
||||
foreach($curr_details['data']['curriculum']['allClassSectionTrue'] as $class){
|
||||
$class_path = $c . '/' . $class['title'];
|
||||
is_dir($class_path) || mkdir($class_path,0755,true);
|
||||
$class_details = $this->getClassDetails($class['id']);
|
||||
dump($class_path,$class_details);
|
||||
$class_id = $class_details['data']['classSection']['id'];
|
||||
|
||||
if(!empty($class_details['data']['classSection']['video'])){
|
||||
$this->download($class_details['data']['classSection']['video'],$class_path);
|
||||
}
|
||||
if(!empty($class_details['data']['classSection']['courseware'])){
|
||||
$this->download($class_details['data']['classSection']['courseware'],$class_path);
|
||||
}
|
||||
if(!empty($class_details['data']['classSection']['construction_draw'])){
|
||||
$this->download($class_details['data']['classSection']['construction_draw'],$class_path);
|
||||
}
|
||||
if(!empty($class_details['data']['classSection']['construction_draw_3d'])){
|
||||
$this->download($class_details['data']['classSection']['construction_draw_3d'],$class_path);
|
||||
}
|
||||
|
||||
foreach($class_details['data']['classSection']['allEnclosure'] as $enclosure){
|
||||
$parts = explode("{$class_id}/", $enclosure['url']);
|
||||
|
||||
$path = parse_url($enclosure['url'], PHP_URL_PATH);
|
||||
$parts = explode('/', $path);
|
||||
$this->download($enclosure['url'],$class_path . '/' . urldecode($parts[count($parts)-2]));
|
||||
}
|
||||
}
|
||||
}
|
||||
$curr_page++;
|
||||
if($curr_total >= $curr['data']['total']){
|
||||
$next = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// exit();
|
||||
}
|
||||
dump($leftLabel);
|
||||
}else{
|
||||
dump($lable['msg']);
|
||||
exit();
|
||||
}
|
||||
exit();
|
||||
}
|
||||
protected function download($downloadurl,$dir,$filename = null)
|
||||
{
|
||||
$result = $this->aria2->addUri(
|
||||
[$downloadurl],
|
||||
['dir'=>$dir,
|
||||
'header'=>[
|
||||
'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.97 Safari/537.36 Core/1.116.489.400 QQBrowser/13.7.6351.400',
|
||||
'referer: https://edu.zmrobo.com/courses',
|
||||
],
|
||||
'out'=>$filename]
|
||||
);
|
||||
}
|
||||
public function getLable($sign = 'null')
|
||||
{
|
||||
$client = new Client();
|
||||
$result = $client->get("https://edu.zmrobo.com/api/label",[
|
||||
'headers'=>[
|
||||
'User-Agent'=>'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.97 Safari/537.36 Core/1.116.489.400 QQBrowser/13.7.6351.400',
|
||||
'referer'=>'https://edu.zmrobo.com/courses',
|
||||
'E-Date'=>time(),
|
||||
'Sign'=>$sign,
|
||||
]
|
||||
]);
|
||||
$result = json_decode($result->getBody()->getContents(),true);
|
||||
if($result['code'] == -3){
|
||||
return $this->getLable($result['sign']);
|
||||
}else{
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
public function getCurr($label_id,$page,$sign = 'null')
|
||||
{
|
||||
$client = new Client();
|
||||
$options = [
|
||||
'headers'=>[
|
||||
'User-Agent'=>'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.97 Safari/537.36 Core/1.116.489.400 QQBrowser/13.7.6351.400',
|
||||
'referer'=>'https://edu.zmrobo.com/courses',
|
||||
'E-Date'=>time(),
|
||||
'Content-Type'=>'application/json; charset=utf-8',
|
||||
'Origin'=>'https://edu.zmrobo.com',
|
||||
'Sign'=>$sign,
|
||||
],
|
||||
'body'=>json_encode([
|
||||
'label'=>[[$label_id]],
|
||||
'page'=>$page,
|
||||
])
|
||||
];
|
||||
$result = $client->post("https://edu.zmrobo.com/api/curriculum/list",$options);
|
||||
$result = json_decode($result->getBody()->getContents(),true);
|
||||
if($result['code'] == -3){
|
||||
return $this->getCurr($label_id,$page,$result['sign']);
|
||||
}else if($result['code'] == 0){
|
||||
return $result;
|
||||
}else{
|
||||
dump($result['msg']);
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function getCurrDetails($curr_id,$sign = 'null')
|
||||
{
|
||||
$client = new Client();
|
||||
$options = [
|
||||
'headers'=>[
|
||||
'User-Agent'=>'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.97 Safari/537.36 Core/1.116.489.400 QQBrowser/13.7.6351.400',
|
||||
'referer'=>'https://edu.zmrobo.com/courses',
|
||||
'E-Date'=>time(),
|
||||
'Content-Type'=>'application/json; charset=utf-8',
|
||||
'Origin'=>'https://edu.zmrobo.com',
|
||||
'Sign'=>$sign,
|
||||
],
|
||||
'body'=>json_encode([
|
||||
'id'=>$curr_id,
|
||||
'user_id'=>$this->user_id,
|
||||
])
|
||||
];
|
||||
$result = $client->post("https://edu.zmrobo.com/api/curriculum/details",$options);
|
||||
$result = json_decode($result->getBody()->getContents(),true);
|
||||
if($result['code'] == -3){
|
||||
return $this->getCurrDetails($curr_id,$result['sign']);
|
||||
}else if($result['code'] == 0){
|
||||
return $result;
|
||||
}else{
|
||||
dump($result['msg']);
|
||||
exit();
|
||||
}
|
||||
}
|
||||
public function getClassDetails($curr_id,$sign = 'null')
|
||||
{
|
||||
$client = new Client();
|
||||
$options = [
|
||||
'headers'=>[
|
||||
'User-Agent'=>'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.97 Safari/537.36 Core/1.116.489.400 QQBrowser/13.7.6351.400',
|
||||
'referer'=>'https://edu.zmrobo.com/courses',
|
||||
'E-Date'=>time(),
|
||||
'Content-Type'=>'application/json',
|
||||
'Origin'=>'https://edu.zmrobo.com',
|
||||
'Sign'=>$sign,
|
||||
],
|
||||
'body'=>json_encode([
|
||||
'id'=>$curr_id,
|
||||
'user_id'=>$this->user_id,
|
||||
'token'=>"7aa22a83fece93ed3e5a3119b085ced9",
|
||||
])
|
||||
];
|
||||
$result = $client->post("https://edu.zmrobo.com/api/class/details",$options);
|
||||
$result = json_decode($result->getBody()->getContents(),true);
|
||||
if($result['code'] == -3){
|
||||
return $this->getClassDetails($curr_id,$result['sign']);
|
||||
}else if($result['code'] == 0){
|
||||
return $result;
|
||||
}else{
|
||||
dump($result['msg']);
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private function savetxt(string $file,string $content)
|
||||
{
|
||||
if(is_file($file)){
|
||||
unlink($file);
|
||||
}
|
||||
$myfile = fopen($file, "w");
|
||||
fwrite($myfile, $content);
|
||||
fclose($myfile);
|
||||
// dump('已保存文本内容:'.$file);
|
||||
}
|
||||
}
|
||||
34
app/command/account.php
Normal file
34
app/command/account.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\command;
|
||||
|
||||
use think\console\Command;
|
||||
use think\console\Input;
|
||||
use think\console\input\Argument;
|
||||
use think\console\input\Option;
|
||||
use think\console\Output;
|
||||
|
||||
|
||||
use Curl\Curl;
|
||||
use app\kernel\Lebolebo\Account as a;
|
||||
use app\kernel\Lebolebo\Curriculum;
|
||||
|
||||
class account extends Command
|
||||
{
|
||||
protected function configure()
|
||||
{
|
||||
// 指令配置
|
||||
$this->setName('account')
|
||||
->setDescription('the account command');
|
||||
}
|
||||
|
||||
protected function execute(Input $input, Output $output)
|
||||
{
|
||||
$account = new a();
|
||||
dump($account);
|
||||
dump($account->login('13088393927','393927'));
|
||||
// 指令输出
|
||||
$output->writeln('account');
|
||||
}
|
||||
}
|
||||
42
app/command/test.php
Normal file
42
app/command/test.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\command;
|
||||
|
||||
use think\console\Command;
|
||||
use think\console\Input;
|
||||
use think\console\input\Argument;
|
||||
use think\console\input\Option;
|
||||
use think\console\Output;
|
||||
|
||||
use Curl\Curl;
|
||||
|
||||
use Aria2;
|
||||
|
||||
class test extends Command
|
||||
{
|
||||
protected function configure()
|
||||
{
|
||||
// 指令配置
|
||||
$this->setName('test')
|
||||
->setDescription('the test command');
|
||||
}
|
||||
|
||||
protected function execute(Input $input, Output $output)
|
||||
{
|
||||
|
||||
$aria2 = new Aria2('http://127.0.0.1:16800/jsonrpc');
|
||||
try {
|
||||
// 获取所有活动的下载任务
|
||||
$activeDownloads = $aria2->getGlobalStat();
|
||||
|
||||
dump('正在下载的任务数量:',intval($activeDownloads['result']['numWaiting']));
|
||||
// dump('等待下载的任务数量:',$waitingCount);
|
||||
|
||||
} catch (Exception $e) {
|
||||
dump($e);
|
||||
}
|
||||
// 指令输出
|
||||
// $output->writeln('test');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user