From 5f6ea8c1944152c9419aab5e5a0576448154aaf2 Mon Sep 17 00:00:00 2001 From: hellcat Date: Thu, 13 Aug 2026 16:30:49 +0800 Subject: [PATCH] no message --- app/Http/Controllers/SakaiController.php | 6 +- app/Services/Cron.php | 6 ++ app/Services/Cron/ReportUmami.php | 70 ++++++++++++++---------- app/Services/TomTool/Telegram/Slave.php | 7 ++- config/key.php | 6 ++ 5 files changed, 63 insertions(+), 32 deletions(-) create mode 100755 config/key.php diff --git a/app/Http/Controllers/SakaiController.php b/app/Http/Controllers/SakaiController.php index 073b2b13..5b296dfb 100755 --- a/app/Http/Controllers/SakaiController.php +++ b/app/Http/Controllers/SakaiController.php @@ -31,8 +31,10 @@ class SakaiController // echo 111; // exit; - $oReportUmami = new ReportUmami(); - $oReportUmami->handle(); +// $oReportUmami = new ReportUmami(); +// $oReportUmami->handle(); + + (new ReportUmami())->handle(); exit; diff --git a/app/Services/Cron.php b/app/Services/Cron.php index 18ae33fa..29463537 100755 --- a/app/Services/Cron.php +++ b/app/Services/Cron.php @@ -20,6 +20,7 @@ use App\Services\Cron\FnSitePublish as CronFnSitePublish; use App\Services\Cron\NasaTestFnSubfile; use App\Services\Cron\ShadowRocketCrawl; use App\Services\Cron\ShadowRocketPublish; +use App\Services\Cron\ReportUmami; final class Cron { @@ -44,8 +45,13 @@ final class Cron echo "cron开始执行 \n"; + if ($h === 8 && $i === 3) { + (new ReportUmami())->handle(); + } + if ($h % 8 === 0 && $i === 3) { CronBook::randbox_notify(); // note提醒 + (new ReportUmami())->handle(); } if ($h % 4 === 0 && $i === 3) { diff --git a/app/Services/Cron/ReportUmami.php b/app/Services/Cron/ReportUmami.php index b707f4ec..ce29c382 100755 --- a/app/Services/Cron/ReportUmami.php +++ b/app/Services/Cron/ReportUmami.php @@ -12,12 +12,14 @@ use App\Services\TomTool\Telegram\Slave as TeleSlave; final class ReportUmami { private string $baseUrl; - private string $username = 'admin'; - private string $password = 'taonihouzi#'; + private string $username; + private string $password; public function __construct() { - $this->baseUrl = (string) config('path.url_umami_base'); + $this->baseUrl = (string) "https://".config('path.url_umami_base'); + $this->username = (string) config('key.umami_user'); + $this->password = (string) config('key.umami_pass'); } /** @@ -28,55 +30,59 @@ final class ReportUmami try { // 1. 获取 API 认证 Token $token = $this->getAuthToken(); + if (!$token) { - TeleSlave::log()->send("⚠️ [Umami 报表失败]: 无法获取 Auth Token,请检查账号密码。"); + TeleSlave::log()->enableDetail(false)->send("⚠️ [Umami 报表失败]: 无法获取 Auth Token,请检查账号密码。"); return; } // 2. 获取网站列表 $websites = $this->getWebsites($token); if (empty($websites)) { - TeleSlave::log()->send("ℹ️ [Umami 报表]: 数据库中未找到任何网站。"); + TeleSlave::log()->enableDetail(false)->send("ℹ️ [Umami 报表]: 数据库中未找到任何网站。"); return; } // 3. 统计过去 24 小时的数据 - $endAt = microtime(true) * 1000; // 当前时间戳 (毫秒) - $startAt = $endAt - (24 * 3600 * 1000); // 24小时前的时间戳 (毫秒) - - $msg = "📊 Umami 每日站点数据日报\n"; - $msg .= "----------------------------\n"; + $endAt = (int) (microtime(true) * 1000); // 当前时间戳 (毫秒) + $startAt = $endAt - (24 * 3600 * 1000); // 24小时前的时间戳 (毫秒) foreach ($websites as $site) { - $siteId = $site['id']; - $siteName = $site['name']; - $domain = $site['domain'] ?? ''; + + $siteId = $site['id'] ?? ''; + $siteName = $site['name'] ?? '未命名站点'; + $domain = $site['domain'] ?? ''; + + if (!$siteId) { + continue; + } // 获取单个网站的统计指标 - $stats = $this->getWebsiteStats($token, $siteId, (int)$startAt, (int)$endAt); - + $stats = $this->getWebsiteStats($token, $siteId, $startAt, $endAt); + if ($stats) { - $pageviews = $stats['pageviews']['value'] ?? 0; - $visitors = $stats['visitors']['value'] ?? 0; - $visits = $stats['visits']['value'] ?? 0; - $bounces = $stats['bounces']['value'] ?? 0; + // 对齐结构:直接获取 int 值 + $pageviews = $stats['pageviews'] ?? 0; + $pageviewsPrev = $stats['comparison']['pageviews'] ?? 0; + $visitors = $stats['visitors'] ?? 0; + $visits = $stats['visits'] ?? 0; + $bounces = $stats['bounces'] ?? 0; // 计算跳出率 $bounceRate = $visits > 0 ? round(($bounces / $visits) * 100, 1) : 0; - $msg .= "🌐 {$siteName} ({$domain})\n"; - $msg .= "├ 👁️ 页面浏览 (PV): {$pageviews}\n"; - $msg .= "├ 👤 独立访客 (UV): {$visitors}\n"; - $msg .= "├ 🔄 会话次数: {$visits}\n"; - $msg .= "└ 📉 跳出率: {$bounceRate}%\n\n"; + $msg = "\n\n======= 📊 访客统计:{$domain} ==================="; + $msg .= "\n- 今日:{$pageviews}"; + $msg .= "\n- 昨日:{$pageviewsPrev}"; + } } // 4. 发送日志至 Telegram - TeleSlave::log()->send($msg); + TeleSlave::log()->enableDetail(false)->send($msg); } catch (\Throwable $e) { - TeleSlave::log()->send("❌ [Umami 报表异常]: " . $e->getMessage()); + TeleSlave::log()->enableDetail(false)->send("❌ [Umami 报表异常]: " . $e->getMessage()); } } @@ -99,7 +105,13 @@ final class ReportUmami private function getWebsites(string $token): array { $response = $this->curlRequest('GET', '/api/websites', [], $token); - return $response['data'] ?? $response ?? []; + + // Umami 2.x API 网站列表格式通常包含在 data 字段中 + if (isset($response['data']) && is_array($response['data'])) { + return $response['data']; + } + + return is_array($response) ? $response : []; } /** @@ -115,8 +127,8 @@ final class ReportUmami * 通用 cURL 请求工具方法 */ private function curlRequest(string $method, string $path, array $data = [], ?string $token = null): ?array - { organize: - $ch = curl_init($this->baseUrl . $path); + { + $ch = curl_init(rtrim($this->baseUrl, '/') . $path); $headers = [ 'Content-Type: application/json', diff --git a/app/Services/TomTool/Telegram/Slave.php b/app/Services/TomTool/Telegram/Slave.php index 75dc21b3..716dd6b3 100755 --- a/app/Services/TomTool/Telegram/Slave.php +++ b/app/Services/TomTool/Telegram/Slave.php @@ -285,7 +285,12 @@ class Slave throw new \Exception("未设置env的url_master_base"); } - $sUrlMasterPost = "https://".$sUrlMaSterBase."/api/telegram/post"; + $h = "https://"; + if ($sUrlMaSterBase == "dd.loc") { + $h = "http://"; + } + + $sUrlMasterPost = $h.$sUrlMaSterBase."/api/telegram/post"; try { diff --git a/config/key.php b/config/key.php new file mode 100755 index 00000000..abfccdc8 --- /dev/null +++ b/config/key.php @@ -0,0 +1,6 @@ + 'admin', + "umami_pass" => 'taonihouzi#' +];