Your IP : 216.73.217.78


Current Path : /home/seto/888mirror.pm/api/
Upload File :
Current File : /home/seto/888mirror.pm/api/stats.php

<?php
require_once __DIR__ . '/../includes/db.php';

header('Content-Type: application/json');
header('Access-Control-Allow-Origin: https://mydash.pm');

$key = $_GET['key'] ?? '';
if ($key !== 'mydash_stats_2026') {
    http_response_code(403);
    echo json_encode(['error' => 'forbidden']);
    exit;
}

$db = db();

$today       = date('Y-m-d');
$yesterday   = date('Y-m-d', strtotime('-1 day'));
$since_7d    = date('Y-m-d H:i:s', strtotime('-7 days'));
$since_30d   = date('Y-m-d H:i:s', strtotime('-30 days'));
$month_start = date('Y-m-01 00:00:00');

// Same filters as admin dashboard
$excl    = "AND country NOT IN ('cn','us')";
$hetzner = "AND (ip NOT LIKE '2a01:4f8:%' AND ip NOT LIKE '2a01:4f9:%')";
$base    = "AND country != '-' $excl $hetzner";

// Redirects today / yesterday / month / 7d / 30d
$redirects_today     = (int)$db->query("SELECT COUNT(*) FROM redirect_clicks WHERE DATE(created_at) = '$today'")->fetchColumn();
$redirects_yesterday = (int)$db->query("SELECT COUNT(*) FROM redirect_clicks WHERE DATE(created_at) = '$yesterday'")->fetchColumn();
$redirects_month     = (int)$db->query("SELECT COUNT(*) FROM redirect_clicks WHERE created_at >= '$month_start'")->fetchColumn();
$redirects_7d        = (int)$db->query("SELECT COUNT(*) FROM redirect_clicks WHERE created_at >= '$since_7d'")->fetchColumn();
$redirects_30d       = (int)$db->query("SELECT COUNT(*) FROM redirect_clicks WHERE created_at >= '$since_30d'")->fetchColumn();

// Impressions today — unique visitors, same as admin (DISTINCT visit_id, no bots/CN/US/Hetzner)
$impressions_today = (int)$db->query("
    SELECT COUNT(DISTINCT visit_id) FROM stats
    WHERE event_type = 'impression' AND DATE(created_at) = '$today' $base
")->fetchColumn();

// Clicks today — same filters
$clicks_today = (int)$db->query("
    SELECT COUNT(*) FROM stats
    WHERE event_type = 'click' AND DATE(created_at) = '$today' $base
")->fetchColumn();

// CTR today
$ctr_today = $impressions_today > 0 ? round($clicks_today / $impressions_today * 100, 1) : 0;

// Top brands 7d (by redirects)
$top_brands = $db->query("
    SELECT b.name, COUNT(*) as cnt
    FROM redirect_clicks rc JOIN brands b ON b.id = rc.brand_id
    WHERE rc.created_at >= '$since_7d'
    GROUP BY rc.brand_id ORDER BY cnt DESC LIMIT 5
")->fetchAll();

// Top countries 7d
$top_countries = $db->query("
    SELECT country, COUNT(*) as cnt
    FROM redirect_clicks
    WHERE created_at >= '$since_7d' AND country != ''
    GROUP BY country ORDER BY cnt DESC LIMIT 5
")->fetchAll();

// Hourly today (redirects)
$hourly = $db->query("
    SELECT strftime('%H', created_at) as hour, COUNT(*) as cnt
    FROM redirect_clicks
    WHERE DATE(created_at) = '$today'
    GROUP BY hour ORDER BY hour
")->fetchAll();

echo json_encode([
    'redirects_today'     => $redirects_today,
    'redirects_yesterday' => $redirects_yesterday,
    'redirects_month'     => $redirects_month,
    'redirects_7d'        => $redirects_7d,
    'redirects_30d'       => $redirects_30d,
    'impressions_today'   => $impressions_today,
    'clicks_today'        => $clicks_today,
    'ctr_today'           => $ctr_today,
    'top_brands'          => $top_brands,
    'top_countries'       => $top_countries,
    'hourly_today'        => $hourly,
    'generated_at'        => date('Y-m-d H:i:s'),
]);