diff --git a/app/Http/Controllers/Api/TG/HookController.php b/app/Http/Controllers/Api/TG/HookController.php index 797e3d6..949d0ca 100755 --- a/app/Http/Controllers/Api/TG/HookController.php +++ b/app/Http/Controllers/Api/TG/HookController.php @@ -12,7 +12,6 @@ final class HookController { public function cmd() { - try { $oTGHttp = new TGHttp(); diff --git a/app/Http/Controllers/ExecController.php b/app/Http/Controllers/ExecController.php index b089327..0bb4394 100755 --- a/app/Http/Controllers/ExecController.php +++ b/app/Http/Controllers/ExecController.php @@ -6,6 +6,7 @@ use Illuminate\Http\Request; use App\Models\ArticleList; use App\Models\Tags; use App\Services\Time; +use App\Models\Option as ModelOption; class ExecController extends Controller { @@ -18,6 +19,7 @@ class ExecController extends Controller echo 'only local'; exit; } + } // cron n合1 @@ -64,6 +66,7 @@ class ExecController extends Controller curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); + $i = 0; foreach ($aArticleCode as $iCode) { $sUrl = $sUrlBase.$iCode; @@ -75,10 +78,11 @@ class ExecController extends Controller $r = file_put_contents($sHtmlPath, $sArticleView); - echo $r; - echo "
"; + $i++; } + echo "静态化".$i."个"; + curl_close($ch); } @@ -220,13 +224,24 @@ class ExecController extends Controller } // 节点文章批量抓取,倒数 - public function freenodeCraw($day) { +// public function freenodeCraw($day) { +// +// $sDateStart = date("Ymd", strtotime("-$day day")); +// +// $iLimit = 10; +// +// for ($i=$day; $i>($day - $iLimit); $i--) { +// echo "
"; +// echo ($i); +// echo "
"; +// echo $this->freenodeUp(-$i); +// } +// +// } + + public function freenodeCraw($iStart = 1, $iLimit = 1) { - $sDateStart = date("Ymd", strtotime("-$day day")); - - $iLimit = 10; - - for ($i=$day; $i>($day - $iLimit); $i--) { + for ($i=$iStart; $i>($iStart - $iLimit); $i--) { echo "
"; echo ($i); echo "
"; @@ -248,6 +263,8 @@ class ExecController extends Controller $sDateNext10DayCode = date("Ymd", $sTimeNext10Day); $sFreeNodePath = "fn/".$sDateStartCode.".html"; + $aOption = ModelOption::_all(); + //// 生成订阅 start $iTodayCode = ArticleList::where("code", $sDateStartCode)->first()?->code; @@ -255,11 +272,11 @@ class ExecController extends Controller echo "article already exists.\n"; return; } - - $sV2rayTodayUrl = "https://nodefree.githubrowcontent.com/".date('Y', $sTimeStart)."/".date('m', $sTimeStart)."/".$sDateStartCode.".txt"; + + $sV2rayTodayUrl = $aOption["freenode_craw_url"].date('Y', $sTimeStart)."/".date('m', $sTimeStart)."/".$sDateStartCode.".txt"; $sV2rayToday = @file_get_contents($sV2rayTodayUrl); - $sV2rayNextUrl = "https://nodefree.githubrowcontent.com/".date('Y', $sTimeNext10Day)."/".date('m', $sTimeNext10Day)."/".$sDateNext10DayCode.".txt"; + $sV2rayNextUrl = $aOption["freenode_craw_url"].date('Y', $sTimeNext10Day)."/".date('m', $sTimeNext10Day)."/".$sDateNext10DayCode.".txt"; $sV2rayNext = @file_get_contents($sV2rayNextUrl); if (empty($sV2rayNext) || $sV2rayNext == $sV2rayToday) { @@ -275,8 +292,9 @@ class ExecController extends Controller } $sClashPath = "feed/clash-".$sDateStartCode.".yaml"; - $sClashTodayUrl = "https://nodefree.githubrowcontent.com/".date('Y', $sTimeStart)."/".date('m', $sTimeStart)."/".$sDateStartCode.".yaml"; + $sClashTodayUrl = $aOption["freenode_craw_url"].date('Y', $sTimeStart)."/".date('m', $sTimeStart)."/".$sDateStartCode.".yaml"; $sClashToday = @file_get_contents($sClashTodayUrl); +// tomd($aOption["freenode_craw_url"].date('Y', $sTimeStart)."/".date('m', $sTimeStart)."/".$sDateStartCode.".yaml", 1); $mClashR = file_put_contents($sClashPath, $sClashToday); if ($mClashR === false) { @@ -309,14 +327,13 @@ class ExecController extends Controller '日本、台湾、新加坡,韩国、俄罗斯、法国、美国、德国', '新加坡、日本、台湾、美国、韩国、德国、香港', '香港、台湾、日本、韩国、越南、阿根廷、俄罗斯、加拿大、美国', - '上' ]; $iNodeRegionRandKey = array_rand($aNodeRegionPool); $sNodeZone = $aNodeRegionPool[$iNodeRegionRandKey]; // 标题 $aTitlePool = [ - date('Y', $sTimeStart)."年最新高速SSR/V2ray/Clash/Shadowrocket免费节点订阅链接" + date('Y', $sTimeStart).$aOption["freenode_title"] ]; $iTitlePoolRandKey = array_rand($aTitlePool); $sTitle = $aTitlePool[$iTitlePoolRandKey]; @@ -410,8 +427,9 @@ class ExecController extends Controller } // 直接生成文章 - public function freenodeDataAll () + public function freenodeDataAll() { + $aOption = ModelOption::_all(); ArticleList::where('type', 'node')->delete(); // 先删除节点文章 @@ -443,14 +461,18 @@ class ExecController extends Controller '美国、新加坡、日本、俄罗斯', '香港、台湾、美国、日本、新加坡、德国', '美国、新加坡、加拿大、香港、欧洲、韩国、日本', - '美国、日本、新加坡、台湾' + '美国、日本、新加坡、台湾', + '日本、香港、台湾、越南、土耳其、阿根廷、俄罗斯', + '日本、台湾、新加坡,韩国、俄罗斯、法国、美国、德国', + '新加坡、日本、台湾、美国、韩国、德国、香港', + '香港、台湾、日本、韩国、越南、阿根廷、俄罗斯、加拿大、美国', ]; $iNodeRegionRandKey = array_rand($aNodeRegionPool); $sNodeZone = $aNodeRegionPool[$iNodeRegionRandKey]; // 标题 $aTitlePool = [ - date('Y', $sTimeStart)."年最新高速SSR/V2ray/Clash/Shadowrocket免费节点订阅链接" + date('Y', $sTimeStart).$aOption["freenode_title"] ]; $iTitlePoolRandKey = array_rand($aTitlePool); $sTitle = $aTitlePool[$iTitlePoolRandKey]; diff --git a/app/Models/Option.php b/app/Models/Option.php new file mode 100755 index 0000000..4914603 --- /dev/null +++ b/app/Models/Option.php @@ -0,0 +1,39 @@ +toArray(); + + $arr = []; + foreach ($aData as $row) { + $arr[$row['key']] = $row['value']; + } + + return $arr; + + } + + public static function _find($sKey) + { + $oData = self::where("key", $sKey)->first(); + + if ($oData && $oData->value) { + $r = $oData->value; + } else { + $r = false; + } + + return $r; + + } + +} diff --git a/app/Services/RandBox.php b/app/Services/RandBox.php new file mode 100755 index 0000000..9bbda74 --- /dev/null +++ b/app/Services/RandBox.php @@ -0,0 +1,33 @@ +get()->toArray(); - - foreach ($aArticleList as &$row) { // 使用引用来修改原数组 - unset($row['updated_at']); // 移除 updated_at 字段 - unset($row['created_at']); // 移除 created_at 字段 - $this->oTGHttp->sendToTG(json_encode($row, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); - } - - $this->oHttp::response(200, 'ok'); - } - - public function Find($aParam) - { - $iId = $aParam['aArg'][1]; - - $aSingle = ModelArticle::find($iId)->toArray(); - - unset($aSingle['updated_at']); - unset($aSingle['created_at']); - - return json_encode($aSingle, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); - } - - - public function Like($aParams) - { - $aArticleList = ModelArticle::where($this->cmdGood($aParams['aOption'][1]), 'like', '%' . $aParams['aArg'][1] . '%') - ->orderBy("user_name") - ->get() - ->toArray(); - - if (empty($aArticleList)) { - $this->oTGHttp->sendToTG("没有"); - } else { - foreach ($aArticleList as &$row) { // 使用引用来修改原数组 - unset($row['updated_at']); // 移除 updated_at 字段 - unset($row['created_at']); // 移除 created_at 字段 - $this->oTGHttp->sendToTG(json_encode($row, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); - } - } - - $this->oHttp::response(200, 'ok'); - } - - public function Clone($aParam) - { - $iId = $aParam['aArg'][1]; - - // 查找文章 - $aArticle = ModelArticle::find($iId); - - if ($aArticle) { - // 复制文章 - $newArticle = $aArticle->replicate(); - - // 如果需要,可以修改新文章的某些字段,例如标题或状态 -// $newArticle->title = $newArticle->title . ' - Copy'; // 修改标题 - // $newArticle->status = 'draft'; // 例如,将状态设置为草稿 - - // 保存新文章 - $newArticle->save(); - - // 发送新文章的 ID 到 Telegram - $sMsg = "新文章已创建,ID: " . $newArticle->id; - $this->oTGHttp->sendToTG($sMsg); - - // 返回 HTTP 响应 - $this->oHttp::response(200, 'ok'); - } else { - throw new \Exception("没有这个id"); - } - } - - public function Add($aParams) - { - - $newArticle = new ModelArticle(); - $newArticle->user_name = $aParams['aArg'][1]; - $r = $newArticle->save(); - - $this->oTGHttp->sendToTG(json_encode($r, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); - - $this->oHttp::response(200, 'ok'); - - } - - public function Del($aParams) - { - - $article = ModelArticle::find($aParams['aArg'][1]); - - if ($article) { - $r = $article->delete(); - } else { - $r = false; - } - - $this->oTGHttp->sendToTG(json_encode($r, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); - - $this->oHttp::response(200, 'ok'); - - } - - // /ArticleSet__id__user_name xxx - public function Set($aParams) - { - $sField = $this->cmdGood($aParams['aOption'][2]); - - $article = ModelArticle::find($aParams['aOption'][1]); - - $sSet = $aParams['aArg'][1]; - - if ($article) { - $article->$sField = $sSet; - - $r = $article->save(); - } else { - // 处理未找到的情况 - throw new \Exception("Article not found"); - } - - $this->oTGHttp->sendToTG(json_encode($r, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); - - $this->oHttp::response(200, 'ok'); - } - -} diff --git a/app/Services/TG/Hook/Mod/Base.php b/app/Services/TG/Hook/Mod/Base.php index 6aede03..1caace7 100644 --- a/app/Services/TG/Hook/Mod/Base.php +++ b/app/Services/TG/Hook/Mod/Base.php @@ -15,29 +15,18 @@ class Base { // $this->oTGHttp->sApiChatId = env("telegram_chatid"); } - protected function cmdGood($sCmd) { - - $sCmdNew = ""; - switch ($sCmd) { - case "user": - $sCmdNew = "user_name"; - break; - case "project": - $sCmdNew = "project_name"; - break; - case "code": - $sCmdNew = "sale_code"; - break; - case "condition": - $sCmdNew = "cron_condition"; - break; - default: - $sCmdNew = $sCmd; - break; + public function toJson($aData) + { + return json_encode($aData, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + } + + public function eachSendTg($aData) + { + foreach ($aData as $row) { + $this->oTGHttp->sendToTG(json_encode($row, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); } - return $sCmdNew; - + $this->oHttp::response(200, 'ok'); } } diff --git a/app/Services/TG/Hook/Mod/DataBase.php b/app/Services/TG/Hook/Mod/DataBase.php new file mode 100644 index 0000000..7e2e087 --- /dev/null +++ b/app/Services/TG/Hook/Mod/DataBase.php @@ -0,0 +1,27 @@ +toJson($r); + } + + public function sql($aParam) + { + $sql = $aParam["aArg"][1]; + $sql = implode(" ", $aParam["aArg"]); + + $r = DB::statement($sql); + + return $this->toJson($r); + } +} diff --git a/app/Services/TG/Hook/Mod/Git.php b/app/Services/TG/Hook/Mod/Git.php deleted file mode 100644 index 8f9fb47..0000000 --- a/app/Services/TG/Hook/Mod/Git.php +++ /dev/null @@ -1,128 +0,0 @@ -get()->toArray(); - - $sMsg = ''; - foreach ($aArticleList as $v) { - $sMsg .= "\n\n"; - $sMsg .= "https://github.com/".$v['user_name']."/".$v['project_name']; - } - - return $sMsg; - - } - - public function LastTime($aParam) - { - $iId = $aParam['aArg'][1]; - - $aArticle = ModelArticle::find($iId); - - $sProjectPath = env("BASE_DIR") . "github/" . $aArticle->user_name . "-" . $aArticle->project_name; - - // 进入指定目录 - if (!chdir($sProjectPath)) { - throw new \Exception("无法进入目录" . $sProjectPath); - } - - // 获取远程更新 - $this->runCommand('git fetch origin'); - - // 获取最后提交的时间 - $lastCommitTime = $this->runCommand('git log origin/main -1 --format=%cd'); - $lastCommitTime = \DateTime::createFromFormat('D M d H:i:s Y O', $lastCommitTime[0]); - $lastCommitTime = json_encode($lastCommitTime->format('Y-m-d H:i:s')); - - // 检查是否获取到时间 - if (empty($lastCommitTime)) { - throw new \Exception("无法获取最后提交时间,可能是分支不存在或没有提交。"); - } - - return $lastCommitTime; - - } - - // 没用 - public function AddSshHostGithub() - { - - // 定义要添加的主机 - $host = 'github.com'; - - // 执行 ssh-keyscan 命令 - $key = shell_exec("ssh-keyscan -t ed25519 $host"); - - // 检查是否成功获取到公钥 - if ($key) { - // 获取 known_hosts 文件的路径 - $knownHostsFile = '/root/.ssh/known_hosts'; - - // 检查 known_hosts 文件中是否已经存在该主机的公钥 - if (strpos(file_get_contents($knownHostsFile), $host) === false) { - // 将公钥写入 known_hosts 文件 - file_put_contents($knownHostsFile, $key, FILE_APPEND); - $sMsg = "公钥已成功添加到 $knownHostsFile\n"; - } else { - $sMsg = "公钥已存在于 $knownHostsFile\n"; - } - } else { - $sMsg = "无法获取 $host 的公钥\n"; - } - - $this->oTGHttp->sendToTG($sMsg); - - $this->oHttp::response(200, 'ok'); - - } - - // /Git#PullR 3 - public function PullR($aParam) - { - - $iId = $aParam['aArg'][1]; - - $aArticle = ModelArticle::find($iId); - - $sProjectPath = env("BASE_DIR")."github/".$aArticle->user_name."-".$aArticle->project_name; - - // 进入指定目录 - if (!chdir($sProjectPath)) { - throw new \Exception("无法进入目录".$sProjectPath); - } - - // 获取远程更新 - $this->runCommand('git fetch origin'); - - // 硬重置到远程主分支 - $this->runCommand('git reset --hard origin/main'); - - $this->oTGHttp->sendToTG("操作完成:已重置到远程主分支"); - - $this->oHttp::response(200, 'ok'); - - } - - private function runCommand($command) { - $output = []; - $returnVar = 0; - exec($command, $output, $returnVar); - - if ($returnVar !== 0) { - $jsonOutput = json_encode($output, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); - $errorMessage = "命令失败: $command\n" . $jsonOutput . "\n"; - - throw new \Exception($errorMessage); - } else { - return $output; - } - - } - -} diff --git a/app/Services/TG/Hook/Mod/Option.php b/app/Services/TG/Hook/Mod/Option.php index 6629417..8a2ac2a 100644 --- a/app/Services/TG/Hook/Mod/Option.php +++ b/app/Services/TG/Hook/Mod/Option.php @@ -5,30 +5,90 @@ use App\Models\Option as ModelOption; class Option extends Base { - public function Pause($aParam) - { - $v = $aParam['aArg'][1]; - - // 获取第一个匹配的选项 - $oOption = ModelOption::where("type", "pause")->first(); - - // 检查是否找到了选项 - if ($oOption) { - $oOption->value = $v; - - // 保存并返回结果 - return json_encode($oOption->save()); - } - - // 如果没有找到选项,返回一个错误信息 - return json_encode(['error' => 'Option not found']); - } - public function List() { - $aOptionList = ModelOption::all()->toArray(); - return json_encode($aOptionList, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + $oOptionList = ModelOption::all(); + + if (!$oOptionList) { + throw new \Exception("没有?"); + } + + $str = ""; + foreach ($oOptionList as $row) { + $str .= "\n\n"; + $str .= $row->key."::".$row->value; + } + + return $str; + + } + + public function Add($aParam) + { + $sKey = $aParam['aArg'][1]; + + $oOption = new ModelOption(); + + $oOption->key = $sKey; + $r = $oOption->save(); + + return $r; + } + + public function Like($aParam) + { + $sField = $aParam["aOption"][1]; + $sValue = $aParam["aArg"][1]; + + $oOption = ModelOption::where($sField, "like", "%".$sValue."%")->get(); + + if (!$oOption) { + throw new \Exception("没有"); + } + + $this->eachSendTg($oOption); + + } + + public function Find($aParam) + { + $sKey = $aParam["aArg"][1]; + + $oOption = ModelOption::where("key", $sKey)->first(); + + if (!$oOption) { + throw new \Exception("没有"); + } + + return $this->toJson($oOption); + } + + public function Option($aParam) + { + $sKey = $aParam["aOption"][1]; + $sValue = $aParam["aArg"][1]; + + $oOption = ModelOption::where("key", $sKey)->first(); + + if (!$oOption) { + throw new \Exception("没有这个key"); + } + + $oOption->value = $sValue; + $r = $oOption->save(); + + return $r; + } + + public function del($aParam) + { + $sKey = $aParam["aArg"][1]; + + $oOption = ModelOption::where("key", $sKey); + $r = $oOption->delete(); + + return $r; } } diff --git a/app/Services/TG/Hook/Mod/SaleCode.php b/app/Services/TG/Hook/Mod/SaleCode.php deleted file mode 100644 index a638ae8..0000000 --- a/app/Services/TG/Hook/Mod/SaleCode.php +++ /dev/null @@ -1,48 +0,0 @@ -update(['sale_rate' => $aParams['aArg'][1]]); - - $this->oTGHttp->sendToTG(json_encode($updatedRows, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); - - $this->oHttp::response(200, 'ok'); - - } - - public function List() - { - $aSaleCodeList = ModelArticle::select('sale_code', 'sale_rate') - ->distinct() - ->orderBy("sale_code") - ->get() - ->toArray(); - - $this->oTGHttp->sendToTG(json_encode($aSaleCodeList, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); - - $this->oHttp::response(200, 'ok'); - } - - public function Find($aParams) - { - - $aSaleCodeList = ModelArticle::select('sale_code', 'sale_rate') - ->where("sale_code", $aParams['aArg'][1]) - ->distinct() - ->orderBy("sale_code") - ->get() - ->toArray(); - - $this->oTGHttp->sendToTG(json_encode($aSaleCodeList, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); - - $this->oHttp::response(200, 'ok'); - - } - -} diff --git a/app/Services/TG/Hook/Mod/Test.php b/app/Services/TG/Hook/Mod/Test.php index aa953ab..5ac4abc 100644 --- a/app/Services/TG/Hook/Mod/Test.php +++ b/app/Services/TG/Hook/Mod/Test.php @@ -2,6 +2,7 @@ namespace App\Services\TG\Hook\Mod; //use App\Services\TomTool\Http; +use App\Models\Option as ModelOption; class Test extends Base { @@ -25,4 +26,22 @@ class Test extends Base { } + public function FreenodeCrawUrl() + { + $aOption = ModelOption::_all(); + + $sTimeSet = 0; + $sTimeStart = strtotime($sTimeSet." day"); + $sTimeNextDay = strtotime(($sTimeSet+1)." day"); + $sTimeNext10Day = strtotime(($sTimeSet+10)." day"); + $sTimePrevDay = strtotime(($sTimeSet-1)." day"); + $sDateStartCode = date("Ymd", $sTimeStart); + $sDateNextDayCode = date("Ymd", $sTimeNextDay); + $sDateNext10DayCode = date("Ymd", $sTimeNext10Day); + + $sUrl = $aOption["freenode_craw_url"].date('Y', $sTimeStart)."/".date('m', $sTimeStart)."/".$sDateStartCode.".txt"; + + return $sUrl; + } + } diff --git a/app/Services/TG/Hook/Mod/Tool.php b/app/Services/TG/Hook/Mod/Tool.php new file mode 100644 index 0000000..53b516b --- /dev/null +++ b/app/Services/TG/Hook/Mod/Tool.php @@ -0,0 +1,127 @@ +oHttp->sMethod = "get"; +// $this->oHttp->bIsJson = "true"; +// /exec/html/toptags +// /exec/like/auto +// /exec/html/client +// /exec/html/article +// /exec/html/single/{code} +// /exec/data/freenode/all +// /exec/like/init +// /exec/freenode/craw/{day} +// } + + public function Article_freenode_up_limit($aParam) + { + $iStart = $aParam["aArg"][1]; + $iLimit = $aParam["aArg"][2]; + + $this->oHttp->sMethod = "get"; + $this->oHttp->bIsJson = "true"; + $this->oHttp->sToUrl = env("APP_URL")."/exec/freenode/craw/".$iStart."/".$iLimit; + $r = $this->oHttp->send(); + + return $r; + } + + public function Like_init() + { + $this->oHttp->sMethod = "get"; + $this->oHttp->bIsJson = "true"; + $this->oHttp->sToUrl = env("APP_URL")."/exec/like/init"; + $r = $this->oHttp->send(); + + return $r; + } + + public function Article_freenode_data_reset() + { + $this->oHttp->sMethod = "get"; + $this->oHttp->bIsJson = "true"; + $this->oHttp->sToUrl = env("APP_URL")."/exec/data/freenode/all"; + $r = $this->oHttp->send(); + + return $r; + } + + public function Article_single_html($aParam) + { + $sCode = $aParam["aArg"][1]; + + $this->oHttp->sMethod = "get"; + $this->oHttp->bIsJson = "true"; + $this->oHttp->sToUrl = env("APP_URL")."/exec/html/single/".$sCode; + $r = $this->oHttp->send(); + + return $r; + } + + public function Article_html() + { + $this->oHttp->sMethod = "get"; + $this->oHttp->bIsJson = "true"; + $this->oHttp->sToUrl = env("APP_URL")."/exec/html/article"; + $r = $this->oHttp->send(); + + return $r; + } + + public function Article_client_html() + { + $this->oHttp->sMethod = "get"; + $this->oHttp->bIsJson = "true"; + $this->oHttp->sToUrl = env("APP_URL")."/exec/html/client"; + $r = $this->oHttp->send(); + + return $r; + } + + public function Like_auto() + { + $this->oHttp->sMethod = "get"; + $this->oHttp->bIsJson = "true"; + $this->oHttp->sToUrl = env("APP_URL")."/exec/like/auto"; + $r = $this->oHttp->send(); + + return $r; + } + + public function Toptag_html() + { + $this->oHttp->sMethod = "get"; + $this->oHttp->bIsJson = "true"; + $this->oHttp->sToUrl = env("APP_URL")."/exec/html/toptags"; + $r = $this->oHttp->send(); + + return $r; + } + + public function Article_freenode_up() + { + $this->oHttp->sMethod = "get"; + $this->oHttp->bIsJson = "true"; + $this->oHttp->sToUrl = env("APP_URL")."/exec/freenode/up"; + $r = $this->oHttp->send(); + + return $r; + } + + public function cron() + { + $this->oHttp->sMethod = "get"; + $this->oHttp->bIsJson = "true"; + $this->oHttp->sToUrl = env("APP_URL")."/exec/cron"; + $r = $this->oHttp->send(); + + return $r; + } + +} diff --git a/app/Services/TG/Hook/Mod/ToolOld.php b/app/Services/TG/Hook/Mod/ToolOld.php new file mode 100644 index 0000000..f0715d7 --- /dev/null +++ b/app/Services/TG/Hook/Mod/ToolOld.php @@ -0,0 +1,30 @@ +oHttp->sMethod = "get"; + $this->oHttp->bIsJson = "true"; + $this->oHttp->sToUrl = env("APP_URL")."/tool"; + $r = $this->oHttp->send(); + + return $r; + } + + public function Exec($aParam) + { + $sExec = $aParam['aArg'][1]; + + $this->oHttp->sMethod = "get"; + $this->oHttp->bIsJson = "true"; + $this->oHttp->sToUrl = env("APP_URL")."/exec/".$sExec; + $r = $this->oHttp->send(); + + return $r; + } + +} diff --git a/routes/web.php b/routes/web.php index 9c60dad..76382a4 100755 --- a/routes/web.php +++ b/routes/web.php @@ -32,7 +32,7 @@ Route::get('/client/single/{code}', [ArticleSingleController::class, 'client']); Route::get('/fn/single/{code}', [ArticleSingleController::class, 'freenode']); // 免费节点single Route::get('/tool', [SakaiController::class, 'tool']); -Route::get('/exec/freenode/craw/{day}', [ExecController::class, 'freenodeCraw']); // 免费节点文章批量抓取 +Route::get('/exec/freenode/craw/{start}/{limit}', [ExecController::class, 'freenodeCraw']); // 免费节点文章批量抓取 Route::get('/exec/freenode/up', [ExecController::class, 'freenodeUp']); // 免费节点文章每日更新 Route::get('/exec/freenode/del', [ExecController::class, 'freenodeDelAuto']); // 免费节点自动删除 Route::get('/exec/html/toptags', [ExecController::class, 'tagCountToHtml']); // 热门标签静态生成