webdlh-net/Controllers/VisitorBackupController.cs

184 lines
6.5 KiB
C#

// using Microsoft.AspNetCore.Mvc;
// using Google.Apis.AnalyticsData.v1beta;
// using Google.Apis.AnalyticsData.v1beta.Data;
// using Google.Apis.Auth.OAuth2;
// using Google.Apis.Services;
// using System;
// using System.Collections.Generic;
// using System.IO;
// using System.Threading;
// using System.Threading.Tasks;
// using Microsoft.Extensions.Caching.Memory;
// namespace YourApp.Controllers
// {
// [ApiController]
// [Route("api/[controller]")]
// public class VisitorController : ControllerBase
// {
// private readonly IMemoryCache _cache;
// private static string[] Scopes = { AnalyticsDataService.Scope.AnalyticsReadonly };
// private static string ApplicationName = "web-dlh";
// private static string PropertyId = "493898388";
// private static readonly TimeSpan CacheDuration = TimeSpan.FromMinutes(30);
// public VisitorController(IMemoryCache cache)
// {
// _cache = cache;
// }
// private static string GetCredentialsPath()
// {
// return Path.Combine(
// Directory.GetCurrentDirectory(),
// "AppData",
// "web-dlh-cd5131789ece.json"
// );
// }
// // Endpoint to get daily visitor count
// [HttpGet("daily-visitor")]
// public async Task<IActionResult> GetDailyVisitor()
// {
// try
// {
// var visitorCount = await GetVisitorCountAsync("yesterday", "yesterday");
// return Ok(new { dailyVisitorCount = visitorCount });
// }
// catch (Exception ex)
// {
// return StatusCode(500, new { message = "Error fetching daily visitor data", details = ex.Message });
// }
// }
// // Endpoint to get monthly visitor count
// [HttpGet("monthly-visitor")]
// public async Task<IActionResult> GetMonthlyVisitor()
// {
// try
// {
// var visitorCount = await GetVisitorCountAsync("30daysAgo", "yesterday");
// return Ok(new { monthlyVisitorCount = visitorCount });
// }
// catch (Exception ex)
// {
// return StatusCode(500, new { message = "Error fetching monthly visitor data", details = ex.Message });
// }
// }
// // Endpoint to get both daily and monthly visitor counts
// [HttpGet("visitor-stats")]
// public async Task<IActionResult> GetVisitorStats()
// {
// const string cacheKey = "visitor_stats";
// try
// {
// // Check cache first
// if (_cache.TryGetValue(cacheKey, out var cachedStats))
// {
// return Ok(cachedStats);
// }
// // Fetch from GA4
// var dailyTask = GetVisitorCountAsync("yesterday", "yesterday");
// var monthlyTask = GetVisitorCountAsync("30daysAgo", "yesterday");
// await Task.WhenAll(dailyTask, monthlyTask);
// var stats = new
// {
// dailyVisitorCount = await dailyTask,
// monthlyVisitorCount = await monthlyTask,
// lastUpdated = DateTime.UtcNow
// };
// _cache.Set(cacheKey, stats, CacheDuration);
// return Ok(stats);
// }
// catch (Exception ex)
// {
// if (_cache.TryGetValue(cacheKey, out var expiredStats))
// {
// return Ok(expiredStats);
// }
// return StatusCode(500, new
// {
// message = "Error fetching visitor statistics",
// details = ex.Message
// });
// }
// }
// // Private method to fetch visitor count from Google Analytics Data API
// private async Task<long> GetVisitorCountAsync(string startDate, string endDate)
// {
// GoogleCredential credential;
// var credentialsPath = GetCredentialsPath();
// Console.WriteLine($"Using credentials path: {credentialsPath}");
// // Check if credentials file exists
// if (!System.IO.File.Exists(credentialsPath))
// {
// throw new FileNotFoundException($"Credentials file not found at: {credentialsPath}");
// }
// // Authenticate using Service Account
// using (var stream = new FileStream(credentialsPath, FileMode.Open, FileAccess.Read))
// {
// credential = GoogleCredential.FromStream(stream).CreateScoped(Scopes);
// }
// // Create the AnalyticsDataService instance
// var analyticsDataService = new AnalyticsDataService(new BaseClientService.Initializer()
// {
// HttpClientInitializer = credential,
// ApplicationName = ApplicationName,
// });
// // Prepare the request for the report
// var request = new RunReportRequest
// {
// DateRanges = new List<DateRange>
// {
// new DateRange
// {
// StartDate = startDate,
// EndDate = endDate
// }
// },
// Metrics = new List<Metric>
// {
// new Metric { Name = "activeUsers" }
// }
// };
// // Execute the request and get the response
// var response = await analyticsDataService.Properties.RunReport(request, $"properties/{PropertyId}").ExecuteAsync();
// long visitorCount = 0;
// if (response?.Rows?.Count > 0 && response.Rows[0].MetricValues?.Count > 0)
// {
// if (long.TryParse(response.Rows[0].MetricValues[0].Value, out visitorCount))
// {
// return visitorCount;
// }
// }
// return visitorCount;
// }
// [HttpPost("clear-cache")]
// public IActionResult ClearCache()
// {
// _cache.Remove("visitor_stats");
// return Ok(new { message = "Cache cleared successfully" });
// }
// }
// }