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);
}
}