How to add Google Analytics API code in Laravel PHP to get summary

How to add Google Analytics API code in Laravel PHP to get summary

In this post we will give you information about How to add Google Analytics API code in Laravel PHP to get summary. Hear we will give you detail about How to add Google Analytics API code in Laravel PHP to get summaryAnd how to use it also give you demo for it if it is necessary.

Introduction

Google provide powerful programmatic method to get report from Google analytics in your custom dashboard.

You can see real time activity by integrating Google Analytics API.

You can pass custom date ranges to see the report in your dashboard.

I am going to integrate Google Analytics API to get summary and api will return following things in summary parameter by following this code.

  • ga:sessions
  • ga:users
  • ga:pageviews
  • ga:bounceRate
  • ga:hits
  • ga:avgSessionDuration
  • active_users

Step1: Setup service account

Before going to integrate Google Analytics API, you must have project in the Google API Console if don’t have project then click on Create a project link to create project.

It will take few minutes to active after that you can create service account by clicking this link Create service account.

You must enable your google app.

Here you will get service account email which will be used to configure with Google Analytics API.

You will need also view id which you will get in your analytics dashboard > admin > view settingsomewhere it is known as table id.


Step2: Update composer to install package for Google Client

Add this line in your composer file and update composer command in your terminal.

"google/apiclient" : "^1.1",


Step3: Add Routes

  1. Route::get('google-analytics-summary',array('as'=>'google-analytics-summary','uses'=>'HomeController@getAnalyticsSummary'));
Route::get('google-analytics-summary',array('as'=>'google-analytics-summary','uses'=>'HomeController@getAnalyticsSummary'));


Step3: HomeController.php

Now Create a HomeController.php and paste this code.

  1. <?php
  2. namespace AppHttpControllers;
  3. use IlluminateHttpRequest;
  4. use AppHttpControllersController;
  5. class HomeController extends Controller
  6. {
  7. public functiongetAnalyticsSummary(Request $request){
  8. $from_date=date("Y-m-d",strtotime($request->get('from_date',"7 days ago")));
  9. $to_date=date("Y-m-d",strtotime($request->get('to_date',$request->get('from_date','today'))));
  10. $gAData=$this->gASummary($from_date,$to_date);
  11. return$gAData;
  12. }
  13. //to get the summary of google analytics.
  14. private functiongASummary($date_from,$date_to){
  15. $service_account_email='your service account email';
  16. // Create and configure a new client object.
  17. $client=newGoogle_Client();
  18. $client->setApplicationName("{application name}");
  19. $analytics=newGoogle_Service_Analytics($client);
  20. $cred=newGoogle_Auth_AssertionCredentials(
  21. $service_account_email,
  22. array(Google_Service_Analytics::ANALYTICS_READONLY),
  23. "{your private_key}"
  24. );
  25. $client->setAssertionCredentials($cred);
  26. if($client->getAuth()->isAccessTokenExpired()){
  27. $client->getAuth()->refreshTokenWithAssertion($cred);
  28. }
  29. $optParams=[
  30. 'dimensions'=>'ga:date',
  31. 'sort'=>'-ga:date'
  32. ];
  33. $results=$analytics->data_ga->get(
  34. 'ga:{View ID}',
  35. $date_from,
  36. $date_to,
  37. 'ga:sessions,ga:users,ga:pageviews,ga:bounceRate,ga:hits,ga:avgSessionDuration',
  38. $optParams
  39. );
  40. $rows=$results->getRows();
  41. $rows_re_align=[];
  42. foreach($rowsas$key=>$row){
  43. foreach($rowas$k=>$d){
  44. $rows_re_align[$k][$key]=$d;
  45. }
  46. }
  47. $optParams=array(
  48. 'dimensions'=>'rt:medium'
  49. );
  50. try {
  51. $results1=$analytics->data_realtime->get(
  52. 'ga:{View ID}',
  53. 'rt:activeUsers',
  54. $optParams);
  55. // Success.
  56. }catch(apiServiceException $e){
  57. // Handle API service exceptions.
  58. $error=$e->getMessage();
  59. }
  60. $active_users=$results1->totalsForAllResults ;
  61. return[
  62. 'data'=>$rows_re_align,
  63. 'summary'=>$results->getTotalsForAllResults(),
  64. 'active_users'=>$active_users['rt:activeUsers']
  65. ];
  66. }
  67. }
<?php
namespace AppHttpControllers;

use IlluminateHttpRequest;
use AppHttpControllersController;

class HomeController extends Controller
{

   public function getAnalyticsSummary(Request $request){
        $from_date = date("Y-m-d", strtotime($request->get('from_date',"7 days ago")));
        $to_date = date("Y-m-d",strtotime($request->get('to_date',$request->get('from_date','today')))) ; 
        $gAData = $this->gASummary($from_date,$to_date) ;
        return $gAData;

    }
         //to get the summary of google analytics.
    private function gASummary($date_from,$date_to) {
        $service_account_email = 'your service account email';       
        // Create and configure a new client object.
        $client = new Google_Client();
        $client->setApplicationName("{application name}");
        $analytics = new Google_Service_Analytics($client);
        $cred = new Google_Auth_AssertionCredentials(
            $service_account_email,
            array(Google_Service_Analytics::ANALYTICS_READONLY),
              "{your private_key}"
        );     
        $client->setAssertionCredentials($cred);
        if($client->getAuth()->isAccessTokenExpired()) {
            $client->getAuth()->refreshTokenWithAssertion($cred);
        }
        $optParams = [
            'dimensions' => 'ga:date',
            'sort'=>'-ga:date'
        ] ;       
        $results = $analytics->data_ga->get(
           'ga:{View ID}',
           $date_from,
           $date_to,
           'ga:sessions,ga:users,ga:pageviews,ga:bounceRate,ga:hits,ga:avgSessionDuration',
           $optParams
           );
            
            $rows = $results->getRows();
            $rows_re_align = [] ;
            foreach($rows as $key=>$row) {
                foreach($row as $k=>$d) {
                    $rows_re_align[$k][$key] = $d ;
                }
            }           
            $optParams = array(
                        'dimensions' => 'rt:medium'
                );

            try {
              $results1 = $analytics->data_realtime->get(
                  'ga:{View ID}',
                  'rt:activeUsers',
                  $optParams);
              // Success. 
            } catch (apiServiceException $e) {
              // Handle API service exceptions.
              $error = $e->getMessage();
            }
            $active_users = $results1->totalsForAllResults ;
            return [
                'data'=> $rows_re_align ,
                'summary'=>$results->getTotalsForAllResults(),
                'active_users'=>$active_users['rt:activeUsers']
                ] ;

    }

}

If you are getting error “User does not have any Google Analytics Account” then add service account user in analytics by clicking admin option on analytics dashboard and go to User Management.(Within account,property or view).

If you are getting error “Google Analytics API has not been used in project {project id} before or it is disabled” then follow given url in error message and enable api.

There are several package to integrate Google Analytics API too.

You can use spatie/laravel-analytics package but this package are using same google api client version.

Now use this code to get summary of Google Analytics in your dashboard using Laravel 5.2

Hope this code and post will helped you for implement How to add Google Analytics API code in Laravel PHP to get summary. if you need any help or any feedback give it in comment section or you have good idea about this post you can give it comment section. Your comment will help us for help you more and improve us. we will give you this type of more interesting post in featured also so, For more interesting post and code Keep reading our blogs

For More Info See :: laravel And github

Leave a Comment

Your email address will not be published. Required fields are marked *

72  +    =  75

We're accepting well-written guest posts and this is a great opportunity to collaborate : Contact US