Retrieve data from Google Analytics
, (*1)
This is an opinionated Laravel 5 package to retrieve Google Analytics data., (*2)
RTcustom is a webdesign agency in Antwerp, Belgium. You'll find an overview of all our open source projects on our website., (*3)
Install
This package can be installed through Composer., (*4)
``` bash
composer require RTcustom/laravel-analytics, (*5)
You must install this service provider.
```php
// config/app.php
'provider' => [
...
'RTcustom\LaravelAnalytics\LaravelAnalyticsServiceProvider',
...
];
This package also comes with a facade, which provides an easy way to call the the class., (*6)
// config/app.php
'aliases' => [
...
'LaravelAnalytics' => 'RTcustom\LaravelAnalytics\LaravelAnalyticsFacade',
...
];
You can publish the config file of this package with this command:, (*7)
``` bash
php artisan vendor:publish --provider="RTcustom\LaravelAnalytics\LaravelAnalyticsServiceProvider", (*8)
The following config file will be published in `config/laravel-analytics.php`
```php
return
[
/*
* The siteId is used to retrieve and display Google Analytics statistics
* in the admin-section.
*
* Should look like: ga:xxxxxxxx.
*/
'siteId' => env('ANALYTICS_SITE_ID'),
/*
* Set the client id
*
* Should look like:
* xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
*/
'clientId' => env('ANALYTICS_CLIENT_ID'),
/*
* Set the service account name
*
* Should look like:
* xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com
*/
'serviceEmail' => env('ANALYTICS_SERVICE_EMAIL'),
/*
* You need to download a p12-certifciate from the Google API console
* Be sure to store this file in a secure location.
*/
'certificatePath' => storage_path('laravel-analytics/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-privatekey.p12'),
/*
* The amount of minutes the Google API responses will be cached.
* If you set this to zero, the responses won't be cached at all.
*/
'cacheLifetime' => 60 * 24 * 2,
/*
* The amount of seconds the Google API responses will be cached for
* queries that use the real time query method. If you set this to zero,
* the responses of real time queries won't be cached at all.
*/
'realTimeCacheLifetimeInSeconds' => 5,
];
How to obtain the credentials to communicate with Google Analytics
If you haven't already done so, set up a Google Analtyics property and install the tracking code on your site., (*9)
This package needs valid configuration values for siteId
, clientId
and serviceEmail
. Additionally a p12-file
is required., (*10)
To obtain these credentials start by going to the Google Developers Console., (*11)
If you don't have a project present in the console yet, create one.
If you click on the project name, you'll see a menu item APIs
under APIs & auth
on the left hand side. Click it to go the the Enabled API's screen. On that screen you should enable the Analytics API.
Now, again under the APIs & Auth
-menu click Credentials
.
On this screen you should press Create new Client ID
. In the creation screen make sure you select application type Service Account
and key type P12-key
., (*12)
This wil generate a new public/private key pair and the .p12-file will get downloaded to your machine. Store this file in the location specified in the configfile of this package., (*13)
In the properties of the newly created Service Account you'll find the values for the serviceEmail
and clientId
listed as CLIENT ID
and EMAIL ADDRESS
., (*14)
To find the right value for siteId
log in to Google Analytics go the the Admin section.
In the property-column select the website name of which you want to retrieve data, then click View Settings
in the View
-column.
The value presented as View Id
prepended with 'ga:' can be used as siteId
., (*15)
Make sure you've added the ANALYTICS_SERVICE_EMAIL
to the Google Analytics Account otherwise you will get a 403: User does not have any Google Analytics Account
error. You can read Google's instructions here., (*16)
If you want to use the realtime methods you should request access to the beta version of Google's Real Time Reporting API., (*17)
Usage
When the installation is done you can easily retrieve Analytics data. Mostly all methods will return an Illuminate\Support\Collection
-instance., (*18)
Here is an example to retrieve visitors and pageview data for the last seven days., (*19)
/*
* $analyticsData now contains a Collection with 3 columns: "date", "visitors" and "pageViews"
*/
$analyticsData = LaravelAnalytics::getVisitorsAndPageViews(7);
Here's another example to get the 20 most visited pages of the last 365 days, (*20)
/*
* $analyticsData now contains a Collection with 2 columns: "url" and "pageViews"
*/
$analyticsData = LaravelAnalytics::getMostVisitedPages(365, 20);
Provided methods
Visitors and pageviews
These methods return a Collection with columns "date", "vistors" and "pageViews". When grouping by yearMonth, the first column will be called "yearMonth"., (*21)
/**
* Get the amount of visitors and pageviews
*
* @param int $numberOfDays
* @param string $groupBy Possible values: date, yearMonth
* @return Collection
*/
public function getVisitorsAndPageViews($numberOfDays = 365, $groupBy = 'date')
/**
* Get the amount of visitors and pageviews for the given period
*
* @param \DateTime $startDate
* @param \DateTime $endDate
* @param string $groupBy Possible values: date, yearMonth
* @return Collection
*/
public function getVisitorsAndPageViewsForPeriod($startDate, $endDate, $groupBy = 'date')
Keywords
These methods return a Collection with columns "keyword" and "sessions"., (*22)
/**
* Get the top keywords
*
* @param int $numberOfDays
* @param int $maxResults
* @return Collection
*/
public function getTopKeywords($numberOfDays = 365, $maxResults = 30)
/**
* Get the top keywords for the given period
*
* @param \DateTime $startDate
* @param \DateTime $endDate
* @param int $maxResults
* @return Collection
*/
public function getTopKeyWordsForPeriod($startDate, $endDate, $maxResults = 30)
Referrers
These methods return a Collection with columns "url" and "pageViews"., (*23)
/**
* Get the top referrers
*
* @param int $numberOfDays
* @param int $maxResults
* @return Collection
*/
public function getTopReferrers($numberOfDays = 365, $maxResults = 20)
/**
* Get the top referrers for the given period
*
* @param \DateTime $startDate
* @param \DateTime $endDate
* @param $maxResults
* @return Collection
*/
public function getTopReferrersForPeriod($startDate, $endDate, $maxResults)
Browsers
These methods return a Collection with columns "browser" and "sessions"., (*24)
If there are more used browsers than the number specified in maxResults, then a new resultrow with browser-name "other" will be appended with a sum of all the remaining browsers., (*25)
/**
* Get the top browsers
*
* @param int $numberOfDays
* @param int $maxResults
* @return Collection
*/
public function getTopBrowsers($numberOfDays = 365, $maxResults = 6)
/**
* Get the top browsers for the given period
*
* @param \DateTime $startDate
* @param \DateTime $endDate
* @param $maxResults
* @return Collection
*/
public function getTopBrowsersForPeriod($startDate, $endDate, $maxResults)
Most visited pages
These methods return a Collection with columns "url" and "pageViews"., (*26)
/**
* Get the most visited pages
*
* @param int $numberOfDays
* @param int $maxResults
* @return Collection
*/
public function getMostVisitedPages($numberOfDays = 365, $maxResults = 20)
/**
* Get the most visited pages for the given period
*
* @param \DateTime $startDate
* @param \DateTime $endDate
* @param int $maxResults
* @return Collection
*/
public function getMostVisitedPagesForPeriod($startDate, $endDate, $maxResults = 20)
Currently active visitors
This method uses the Real Time Reporting API. It returns the amount of visitors that is viewing your site
right now., (*27)
/**
* Get the number of active users currently on the site
*
*/
public function getActiveUsers()
All other Google Analytics Queries
To perform all other GA queries use performQuery
. Google's Core Reporting API provides more information on on which metrics and dimensions might be used., (*28)
/**
* Call the query method on the autenthicated client
*
* @param \DateTime $startDate
* @param \DateTime $endDate
* @param $metrics
* @param array $others
* @return mixed
*/
public function performQuery($startDate, $endDate, $metrics, $others = array())
Manually setting the siteId at runtime.
You can also set the siteId at runtime. This can be useful if you need to get statistics from multiple sites in one project., (*29)
LaravelAnalytics::setSiteId('ga:12345')->getVisitorsAndPageViews(); // will use the given siteId
LaravelAnalytics->getVisitorsAndPageViews();` // will use the siteId specified in the config file.
```
## Testing
Run the tests with:
``` bash
vendor/bin/phpunit
Contributing
Please see CONTRIBUTING for details., (*30)
Security
If you discover any security related issues, please email freek@RTcustom.be instead of using the issue tracker., (*31)
Credits
About RTcustom
RTcustom is a webdesign agency in Antwerp, Belgium. You'll find an overview of all our open source projects on our website., (*32)
License
The MIT License (MIT). Please see License File for more information., (*33)