����JFIF��x�x����'
| Server IP : 78.140.185.180 / Your IP : 216.73.216.169 Web Server : LiteSpeed System : Linux cpanel13.v.fozzy.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64 User : builderbox ( 1072) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/builderbox/./././public_html/vendor/spatie/laravel-analytics/src/ |
Upload File : |
<?php
namespace Spatie\Analytics;
use Carbon\Carbon;
use Google_Service_Analytics;
use Illuminate\Support\Collection;
use Illuminate\Support\Traits\Macroable;
class Analytics
{
use Macroable;
/** @var \Spatie\Analytics\AnalyticsClient */
protected $client;
/** @var string */
protected $viewId;
/**
* @param \Spatie\Analytics\AnalyticsClient $client
* @param string $viewId
*/
public function __construct(AnalyticsClient $client, string $viewId)
{
$this->client = $client;
$this->viewId = $viewId;
}
/**
* @param string $viewId
*
* @return $this
*/
public function setViewId(string $viewId)
{
$this->viewId = $viewId;
return $this;
}
public function getViewId()
{
return $this->viewId;
}
public function fetchVisitorsAndPageViews(Period $period): Collection
{
$response = $this->performQuery(
$period,
'ga:users,ga:pageviews',
['dimensions' => 'ga:date,ga:pageTitle']
);
return collect($response['rows'] ?? [])->map(function (array $dateRow) {
return [
'date' => Carbon::createFromFormat('Ymd', $dateRow[0]),
'pageTitle' => $dateRow[1],
'visitors' => (int) $dateRow[2],
'pageViews' => (int) $dateRow[3],
];
});
}
public function fetchTotalVisitorsAndPageViews(Period $period): Collection
{
$response = $this->performQuery(
$period,
'ga:users,ga:pageviews',
['dimensions' => 'ga:date']
);
return collect($response['rows'] ?? [])->map(function (array $dateRow) {
return [
'date' => Carbon::createFromFormat('Ymd', $dateRow[0]),
'visitors' => (int) $dateRow[1],
'pageViews' => (int) $dateRow[2],
];
});
}
public function fetchMostVisitedPages(Period $period, int $maxResults = 20): Collection
{
$response = $this->performQuery(
$period,
'ga:pageviews',
[
'dimensions' => 'ga:pagePath,ga:pageTitle',
'sort' => '-ga:pageviews',
'max-results' => $maxResults,
]
);
return collect($response['rows'] ?? [])
->map(function (array $pageRow) {
return [
'url' => $pageRow[0],
'pageTitle' => $pageRow[1],
'pageViews' => (int) $pageRow[2],
];
});
}
public function fetchTopReferrers(Period $period, int $maxResults = 20): Collection
{
$response = $this->performQuery(
$period,
'ga:pageviews',
[
'dimensions' => 'ga:fullReferrer',
'sort' => '-ga:pageviews',
'max-results' => $maxResults,
]
);
return collect($response['rows'] ?? [])->map(function (array $pageRow) {
return [
'url' => $pageRow[0],
'pageViews' => (int) $pageRow[1],
];
});
}
public function fetchUserTypes(Period $period): Collection
{
$response = $this->performQuery(
$period,
'ga:sessions',
[
'dimensions' => 'ga:userType',
]
);
return collect($response->rows ?? [])->map(function (array $userRow) {
return [
'type' => $userRow[0],
'sessions' => (int) $userRow[1],
];
});
}
public function fetchTopBrowsers(Period $period, int $maxResults = 10): Collection
{
$response = $this->performQuery(
$period,
'ga:sessions',
[
'dimensions' => 'ga:browser',
'sort' => '-ga:sessions',
]
);
$topBrowsers = collect($response['rows'] ?? [])->map(function (array $browserRow) {
return [
'browser' => $browserRow[0],
'sessions' => (int) $browserRow[1],
];
});
if ($topBrowsers->count() <= $maxResults) {
return $topBrowsers;
}
return $this->summarizeTopBrowsers($topBrowsers, $maxResults);
}
protected function summarizeTopBrowsers(Collection $topBrowsers, int $maxResults): Collection
{
return $topBrowsers
->take($maxResults - 1)
->push([
'browser' => 'Others',
'sessions' => $topBrowsers->splice($maxResults - 1)->sum('sessions'),
]);
}
/**
* Call the query method on the authenticated client.
*
* @param Period $period
* @param string $metrics
* @param array $others
*
* @return array|null
*/
public function performQuery(Period $period, string $metrics, array $others = [])
{
return $this->client->performQuery(
$this->viewId,
$period->startDate,
$period->endDate,
$metrics,
$others
);
}
/*
* Get the underlying Google_Service_Analytics object. You can use this
* to basically call anything on the Google Analytics API.
*/
public function getAnalyticsService(): Google_Service_Analytics
{
return $this->client->getAnalyticsService();
}
}