request->get('user_id'); $view_id = $this->request->get('view_id') ?? '119240817'; $get_metrics = $this->request->get('metric') ?? 'users'; $get_dimensions = $this->request->get('dimension'); $get_start_date = $this->request->get('start') ?? '30daysAgo'; $get_end_date = $this->request->get('end') ?? 'today'; //if (empty($user_id)) { if (true) { $projects = Project::find(['user_id' => $user_id]); foreach ($projects as $project) { $result[] = $this->sendGaRequest($project->ga_view_id, $get_metrics, $get_dimensions, $get_start_date, $get_end_date); } } else { $result = $this->sendGaRequest($view_id, $get_metrics, $get_dimensions, $get_start_date, $get_end_date); } return $result; } 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 .= "" . $entry->getName() . ": " . $value . '
'; } } } } return $res; } public function sendGaRequest($view, $get_metrics, $get_dimensions, $start, $end) { 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($start); $dateRange->setEndDate($end); // Создание объекта 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); $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); //have to rewrite code below (2 rows) $response = $response->toSimpleObject(); $response = $response->reports[0]['data']['rows']; $result = []; $project = Project::findFirst(['ga_view_id' => $view]); $result['name'] = $project->name; foreach ($response as $item) { $metric_val = $item['metrics'][0]['values']; $dimension_val = $item['dimensions'][0]; if (count($metric_val) > 1) { for ($i = 0; $i < count($metric_val); $i++) { $result[$dimension_val][] = $metric_val[$i]; } } else { $result[$dimension_val] = $metric_val[0]; } } return ($result); } }