Analytics.php 5.56 KB
<?php
    namespace backend\models;
    
    use yii\base\Model;
    use yii\helpers\VarDumper;

    class Analytics extends Model
    {
        public $viewId;
        
        private function executeQuery()
        {
            $client = new \Google_Client();
            
            $client->setAuthConfig(\Yii::getAlias('@common/config/Artbox-85b8559147bc.json'));
            $client->addScope(\Google_Service_Analytics::ANALYTICS_READONLY);
            
            $analytics = new \Google_Service_AnalyticsReporting($client);
            
            $profile_id = $this->viewId;
            
            $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
            $dateRange->setStartDate("30daysAgo");
            $dateRange->setEndDate("today");
    
            /**
             * Setting metrics and dimensions for first query
             */
            $sessions = new \Google_Service_AnalyticsReporting_Metric();
            $sessions->setExpression('ga:sessions');
            $sessions->setAlias('Сеансы');
            
            $users = new \Google_Service_AnalyticsReporting_Metric();
            $users->setExpression('ga:users');
            $users->setAlias('Пользователи');
            
            $views = new \Google_Service_AnalyticsReporting_Metric();
            $views->setExpression('ga:pageviews');
            $views->setAlias('Просмотры');
            
            $new_sessions = new \Google_Service_AnalyticsReporting_Metric();
            $new_sessions->setExpression('ga:percentNewSessions');
            $new_sessions->setAlias('Новые сессии');
            
            $dimensions = new \Google_Service_AnalyticsReporting_Dimension();
            $dimensions->setName('ga:date');
            
            $request = new \Google_Service_AnalyticsReporting_ReportRequest();
            $request->setViewId($profile_id);
            $request->setDateRanges($dateRange);
            $request->setMetrics(
                [
                    $sessions,
                    $users,
                    $views,
                    $new_sessions,
                ]
            );
            $request->setDimensions($dimensions);
    
            /**
             * Setting parameters for second query
             */
            $sessions2 = new \Google_Service_AnalyticsReporting_Metric();
            $sessions2->setExpression('ga:sessions');
            $new_sessions->setAlias('Сессии');
    
            $browser = new \Google_Service_AnalyticsReporting_Dimension();
            $browser->setName('ga:browser');
    
            $city = new \Google_Service_AnalyticsReporting_Dimension();
            $city->setName('ga:city');
    
            $country = new \Google_Service_AnalyticsReporting_Dimension();
            $country->setName('ga:country');
    
            $request2 = new \Google_Service_AnalyticsReporting_ReportRequest();
            $request2->setViewId($profile_id);
            $request2->setDateRanges($dateRange);
            $request2->setMetrics($sessions2);
            $request2->setDimensions(
                [
                    $browser,
                    $city,
                    $country,
                ]
            );
            
            $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
            $body->setReportRequests(
                [
                    $request,
                    $request2,
                ]
            );
            $response = $analytics->reports->batchGet($body);
            
            return $response;
        }
        
        public function generateData()
        {
            $reports = $this->executeQuery();
            
            $data = [];
    
            $report = $reports[ 0 ];
                $header = $report->getColumnHeader();
                //                $dimensionHeaders = $header->getDimensions();
                $metricHeaders = $header->getMetricHeader()
                                        ->getMetricHeaderEntries();
                $rows = $report->getData()
                               ->getRows();
                $totals = $report->getData()
                                 ->getTotals();
                $total_values = $totals[ 0 ]->getValues();
                
                $data[ 'sessions' ] = $total_values[ 0 ];
                $data[ 'users' ] = $total_values[ 1 ];
                $data[ 'views' ] = $total_values[ 2 ];
                $data[ 'new' ] = $total_values[ 3 ];
                
                for ($rowIndex = 0; $rowIndex < count($rows); $rowIndex++) {
                    //                    $dimensions = $row->getDimensions();
                    //                    for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) {
                    //                    print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n");
                    //                    }
                    
                    $row = $rows[ $rowIndex ];
                    $metrics = $row->getMetrics();
                    for ($j = 0; $j < count($metricHeaders) && $j < count($metrics); $j++) {
                        $values = $metrics[ $j ];
                        for ($valueIndex = 0; $valueIndex < count($values->getValues()); $valueIndex++) {
                            $value = $values->getValues()[ $valueIndex ];
                            $data[ $valueIndex ][] = (int) $value;
                        }
                    }
                }
    
            /**
             * @todo Get data from second query
             */
            return $data;
        }
    }