| Server IP : 138.197.107.151 / Your IP : 216.73.217.7 Web Server : Apache/2.4.58 (Ubuntu) System : Linux BloxBy-Builder 6.8.0-71-generic #71-Ubuntu SMP PREEMPT_DYNAMIC Tue Jul 22 16:52:38 UTC 2025 x86_64 User : wpbetasites_mrakzqskir ( 1022) PHP Version : 8.3.6 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/shark/app/Http/Controllers/ |
Upload File : |
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
use App\Models\PageSpeedResult;
use App\Models\Website;
use Carbon\Carbon;
class PageSpeedController extends Controller
{
public function handle(Request $request)
{
$request->validate([
'website_id' => 'required|integer',
'refresh' => 'nullable|boolean',
]);
$website_id = $request->input('website_id');
$refresh = $request->boolean('refresh', false);
$website = Website::findOrFail($website_id);
$server_meta = json_decode($website->server_meta, true);
// Generate URL safely
$domain = $website->domain && $website->domain_status == 'completed'
? $website->domain
: (!empty($server_meta['domain']) ? $server_meta['domain'].'.bloxby.io' : 'bloxby.io');
$url = 'https://'.$domain;
// Check cache first
if (!$refresh) {
$cached = PageSpeedResult::where('website_id', $website_id)->first();
if ($cached) {
return response()->json([
'source' => 'cache',
'url' => $url,
'last_analysed_at' => $cached->last_analysed_at,
'results' => $cached->response,
]);
} else {
return response()->json([
'source' => 'notfound',
'url' => $url,
'last_analysed_at' => '',
'results' => '',
]);
}
}
$apiKey = env('PAGESPEED_API_KEY', 'AIzaSyAhm4zVPk0uJNXS233ypn4PPOei-xEn4KM');
$endpoint = "https://www.googleapis.com/pagespeedonline/v5/runPagespeed";
$results = [];
// Fetch desktop score
try {
$desktopResp = Http::timeout(60)->get($endpoint, [
'url' => $url,
'key' => $apiKey,
'strategy' => 'desktop',
]);
$desktopData = $desktopResp->json();
$results['desktop_score'] = $desktopData['lighthouseResult']['categories']['performance']['score'] ?? null;
$results['desktop_interactive'] = $desktopData['lighthouseResult']['audits']['interactive']['displayValue'] ?? null;
} catch (\Exception $e) {
$results['desktop_score'] = null;
$results['desktop_interactive'] = null;
}
// Fetch mobile interactive value
try {
$mobileResp = Http::timeout(60)->get($endpoint, [
'url' => $url,
'key' => $apiKey,
'strategy' => 'mobile',
]);
$mobileData = $mobileResp->json();
$results['mobile_score'] = $mobileData['lighthouseResult']['categories']['performance']['score'] ?? null;
$results['mobile_interactive'] = $mobileData['lighthouseResult']['audits']['interactive']['displayValue'] ?? null;
} catch (\Exception $e) {
$results['mobile_score'] = null;
$results['mobile_interactive'] = null;
}
// Save/update DB
$result = PageSpeedResult::updateOrCreate(
['website_id' => $website_id],
[
'response' => $results,
'last_analysed_at' => Carbon::now(),
]
);
return response()->json([
'source' => 'live',
'url' => $url,
'last_analysed_at' => $result->last_analysed_at,
'results' => $results,
]);
}
}