Your IP : 216.73.216.79


Current Path : /var/www/html/quest5/frontend/modules/googleanalytics/controllers/
Upload File :
Current File : /var/www/html/quest5/frontend/modules/googleanalytics/controllers/IndexController.php

<?php
namespace frontend\modules\googleanalytics\controllers;

// Load the Google API PHP Client Library.
require_once  dirname(__DIR__) . '/vendor/autoload.php';

use Yii;
use yii\web\Controller;

/**
 * MainController implements the CRUD actions for google analytics.
 */
class IndexController extends Controller
{

	// Replace with your json service account
	const KEY_FILE_LOCATION = 'luminous-night-312907-e3d4bff88ee2.json';

	// Replace with your view ID, for example XXXX.
	const VIEW_ID = '242470709'; 

	 /**
     * Index
     *
     * @return mixed
     */
    public function actionIndex()
    {	
    	//change to your json key file
    	$analytics = $this->initializeAnalytics();
		$response = $this->getReport($analytics);
		$data = $this->parse($response);

		$this->asJson($data);
    }

	/**
	 * Initializes an Analytics Reporting API V4 service object.
	 *
	 * @return An authorized Analytics Reporting API V4 service object.
	 */
    private function initializeAnalytics() {
	  // Create and configure a new client object.
	  $client = new \Google_Client();
	  $client->setApplicationName("Analytics Reporting");
	  $client->setAuthConfig(dirname(__DIR__) . '/' . self::KEY_FILE_LOCATION);
	  $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
	  $analytics = new \Google_Service_AnalyticsReporting($client);

	  return $analytics;
    }

	 /*
	 * Queries the Analytics Reporting API V4.
	 *
	 * @param service An authorized Analytics Reporting API V4 service object.
	 * @return The Analytics Reporting API V4 response.
	 */
	private function getReport($analytics) {


	  // Create the DateRange object.
	  $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
	  $dateRange->setStartDate("7daysAgo");
	  $dateRange->setEndDate("today");

	  //Create the Dimensions object.
	  $browser = new \Google_Service_AnalyticsReporting_Dimension();
	  $browser->setName("ga:browser");

	  // Create the Metrics object.
	  $sessions = new \Google_Service_AnalyticsReporting_Metric();
	  $sessions->setExpression("ga:uniquePageviews");
	  $sessions->setAlias("uniquePageviews");

	  // Create the ReportRequest object.
	  $request = new \Google_Service_AnalyticsReporting_ReportRequest();
	  $request->setViewId(self::VIEW_ID);
	  $request->setDateRanges($dateRange);
	  $request->setDimensions(array($browser));
	  $request->setMetrics(array($sessions));

	  $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
	  $body->setReportRequests( array( $request) );
	  return $analytics->reports->batchGet( $body );
	}


	/**
	 * Parses and prints the Analytics Reporting API V4 response.
	 *
	 * @param An Analytics Reporting API V4 response.
	 */
	private function parse($reports) {
		$result = [];
		
		for ( $reportIndex = 0; $reportIndex < count( $reports ); $reportIndex++ ) {
	    	$report = $reports[ $reportIndex ];
		    $header = $report->getColumnHeader();
		    $dimensionHeaders = $header->getDimensions();
		    $metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries();
		    $rows = $report->getData()->getRows();

		    for ( $rowIndex = 0; $rowIndex < count($rows); $rowIndex++) {
		      	$row = $rows[ $rowIndex ];
		      	$dimensions = $row->getDimensions();
		      	$metrics = $row->getMetrics();
		      	for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) {
		        	// print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n");
		        	$result['dimension'] = [$dimensionHeaders[$i] => $dimensions[$i]];
		    	}

		     	for ($j = 0; $j < count($metrics); $j++) {
		        	$values = $metrics[$j]->getValues();
		        	for ($k = 0; $k < count($values); $k++) {
		          		$entry = $metricHeaders[$k];
		          		//print($entry->getName() . ": " . $values[$k] . "\n");
		          		$result['entry'] = [$entry->getName() => $values[$k]];
		        	}
		      	}
		    }
	  	}

	  	return $result;
	}
}