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, ] ); $ordering = new \Google_Service_AnalyticsReporting_OrderBy(); $ordering->setFieldName("ga:sessions"); $ordering->setOrderType("VALUE"); $ordering->setSortOrder("DESCENDING"); $request2->setOrderBys($ordering); $body = new \Google_Service_AnalyticsReporting_GetReportsRequest(); $body->setReportRequests( [ $request, $request2, ] ); $response = $analytics->reports->batchGet($body); return $response; } /** * Generates data for view * * @return array */ public function generateData() { $reports = $this->executeQuery(); $data = []; /** * Generating data for Sessions and users */ $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++) { $row = $rows[ $rowIndex ]; $dimensions = $row->getDimensions(); for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) { $data[ 'plot' ][ $rowIndex ][ 'day' ] = date('d-m-Y', strtotime($dimensions[ $i ])); } $metrics = $row->getMetrics(); for ($j = 0; $j < count($metricHeaders) && $j < count($metrics); $j++) { $values = $metrics[ $j ]; for ($valueIndex = 0; $valueIndex < count($values->getValues()); $valueIndex++) { if ($valueIndex === 0) { $name = 'sessions'; } elseif ($valueIndex === 1) { $name = 'users'; } else { continue; } $value = $values->getValues()[ $valueIndex ]; $data[ 'plot' ][ $rowIndex ][ $name ] = (int) $value; } } } /** * Generating data for tabs, * with browser, city and country statistics */ $data2 = []; $report = $reports[ 1 ]; $header = $report->getColumnHeader(); // $dimensionHeaders = $header->getDimensions(); $metricHeaders = $header->getMetricHeader() ->getMetricHeaderEntries(); $rows = $report->getData() ->getRows(); for ($rowIndex = 0; $rowIndex < count($rows); $rowIndex++) { $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 ]; $currentValue = (int) $value; } } $dimensions = $row->getDimensions(); foreach ($dimensions as $key => $dimension) { if (empty( $data2[ $key ][ $dimension ] )) { $data2[ $key ][ $dimension ] = $currentValue; } else { $data2[ $key ][ $dimension ] += $currentValue; } } } $data[ 'table' ] = $data2; return $data; } }