GaController.php 4.41 KB
<?php
/**
 * Created by PhpStorm.
 * User: Alex Savenko
 * Date: 09.02.2017
 * Time: 18:12
 */

namespace App\Controllers;


use Google_Client;
use Google_Service_AnalyticsReporting;
use Google_Service_AnalyticsReporting_DateRange;
use Google_Service_AnalyticsReporting_Dimension;
use Google_Service_AnalyticsReporting_GetReportsRequest;
use Google_Service_AnalyticsReporting_Metric;
use Google_Service_AnalyticsReporting_ReportRequest;
use PhalconRest\Mvc\Controllers\CrudResourceController;

class GaController extends CrudResourceController {

    const SECRET_JSON = 'ca4a1bd8aa14.json';
    const VIEW_ID = '119240817';

    public function getAction() {

        $view_id = $this->request->get('view_id') ?? '119240817';
        $get_metrics = $this->request->get('metric') ?? 'users';
        $get_start_date = $this->request->get('start') ?? '30daysAgo';
        $get_end_date = $this->request->get('end') ?? 'today';
        $get_dimensions = $this->request->get('dimension');


        putenv('GOOGLE_APPLICATION_CREDENTIALS=/var/www/phalcon/'.self::SECRET_JSON);
        $client = new Google_Client();
        $client->useApplicationDefaultCredentials();
        $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
        $analytics = new Google_Service_AnalyticsReporting($client);

        // Создание объекта DateRange.
        $dateRange = new Google_Service_AnalyticsReporting_DateRange();
        $dateRange->setStartDate($get_start_date);
        $dateRange->setEndDate($get_end_date);

        // Создание объекта Metrics.
        $metrics = [];
        $get_metrics = explode(',', $get_metrics);
        foreach ($get_metrics as $metric) {
            $metrics_obj = new Google_Service_AnalyticsReporting_Metric();
            $metrics_obj->setExpression('ga:'.$metric);
            $metrics_obj->setAlias('ga:'.$metric);
            $metrics[] = $metrics_obj;
        }

        //Create the Dimensions object.
        if (!empty($get_dimensions)) {
            $dimensions = [];
            $get_dimensions = explode(',', $get_dimensions);
            foreach ($get_dimensions as $dimension) {
                $dimension_obj = new Google_Service_AnalyticsReporting_Dimension();
                $dimension_obj->setName("ga:".$dimension);
                $dimensions[] = $dimension_obj;
            }
        }

        // Создание объекта ReportRequest.
        $request = new Google_Service_AnalyticsReporting_ReportRequest();
        $request->setViewId($view_id);
        $request->setDateRanges($dateRange);
        if (!empty($dimensions)) {
            $request->setDimensions(array($dimensions));
        }
        $request->setMetrics(array($metrics));

        $body = new Google_Service_AnalyticsReporting_GetReportsRequest();
        $body->setReportRequests(array($request));

        $response =  $analytics->reports->batchGet($body);

        $obj = $response->toSimpleObject();
        $obj = $obj->reports;

        return $obj;

    }

    public function printResults($reports) {
        $res = '';
        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");
                }

                for ($j = 0; $j < count( $metricHeaders ) && $j < count( $metrics ); $j++) {
                    $entry = $metricHeaders[$j];
                    $values = $metrics[$j];
                    //print("Metric type: " . $entry->getType() . "\n" );
                    for ( $valueIndex = 0; $valueIndex < count( $values->getValues() ); $valueIndex++ ) {
                        $value = $values->getValues()[ $valueIndex ];
                        $res .= "<b>" . $entry->getName() . "</b>: " . $value . '<br/>';
                    }
                }
            }
        }

        return $res;
    }


}