b38ef228
Alex Savenko
generate GaResource
|
1
2
3
4
5
6
7
8
9
10
11
|
<?php
/**
* Created by PhpStorm.
* User: Alex Savenko
* Date: 09.02.2017
* Time: 18:12
*/
namespace App\Controllers;
|
a941da22
Alex Savenko
ga output
|
12
|
use App\Model\Project;
|
9ba864b0
Alex Savenko
ga output
|
13
|
use App\Model\User;
|
897d06c3
Alex Savenko
generate GaResource
|
14
15
16
|
use Google_Client;
use Google_Service_AnalyticsReporting;
use Google_Service_AnalyticsReporting_DateRange;
|
f51dd710
Alex Savenko
dimensions +dynam...
|
17
|
use Google_Service_AnalyticsReporting_Dimension;
|
897d06c3
Alex Savenko
generate GaResource
|
18
19
20
|
use Google_Service_AnalyticsReporting_GetReportsRequest;
use Google_Service_AnalyticsReporting_Metric;
use Google_Service_AnalyticsReporting_ReportRequest;
|
b38ef228
Alex Savenko
generate GaResource
|
21
|
use PhalconRest\Mvc\Controllers\CrudResourceController;
|
b38ef228
Alex Savenko
generate GaResource
|
22
23
24
|
class GaController extends CrudResourceController {
|
897d06c3
Alex Savenko
generate GaResource
|
25
26
|
const SECRET_JSON = 'ca4a1bd8aa14.json';
const VIEW_ID = '119240817';
|
b38ef228
Alex Savenko
generate GaResource
|
27
|
|
897d06c3
Alex Savenko
generate GaResource
|
28
29
|
public function getAction() {
|
ead93c30
Alex Savenko
ga output
|
30
|
$user_id = $this->request->get('user_id');
|
1db99fb0
Alex Savenko
ga output
|
31
|
$view_id= $this->request->get('view_id') ?? '119240817';
|
180e10be
Alex Savenko
dynamic dateRange
|
32
|
$get_metrics = $this->request->get('metric') ?? 'users';
|
129bec7c
Alex Savenko
ga output
|
33
|
$get_dimensions = $this->request->get('dimension');
|
180e10be
Alex Savenko
dynamic dateRange
|
34
35
|
$get_start_date = $this->request->get('start') ?? '30daysAgo';
$get_end_date = $this->request->get('end') ?? 'today';
|
180e10be
Alex Savenko
dynamic dateRange
|
36
|
|
fcd62711
Alex Savenko
ga output
|
37
38
|
//if (empty($user_id)) {
if (true) {
|
9ba864b0
Alex Savenko
ga output
|
39
40
|
$projects = Project::find(['user_id' => $user_id]);
foreach ($projects as $project) {
|
d756f913
Alex Savenko
ga output
|
41
|
$view_id = string($project->ga_view_id);
|
1db99fb0
Alex Savenko
ga output
|
42
|
$result[] = $this->sendGaRequest($view_id, $get_metrics, $get_dimensions, $get_start_date, $get_end_date);
|
9ba864b0
Alex Savenko
ga output
|
43
44
45
46
47
48
|
}
}
else {
$result = $this->sendGaRequest($view_id, $get_metrics, $get_dimensions, $get_start_date, $get_end_date);
}
return $result;
|
129bec7c
Alex Savenko
ga output
|
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
}
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;
}
public function sendGaRequest($view, $get_metrics, $get_dimensions, $start, $end) {
|
897d06c3
Alex Savenko
generate GaResource
|
86
87
88
89
|
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']);
|
897d06c3
Alex Savenko
generate GaResource
|
90
91
|
$analytics = new Google_Service_AnalyticsReporting($client);
|
29f4a05f
Alex Savenko
multiple metrics
|
92
93
|
// Создание объекта DateRange.
$dateRange = new Google_Service_AnalyticsReporting_DateRange();
|
129bec7c
Alex Savenko
ga output
|
94
95
|
$dateRange->setStartDate($start);
$dateRange->setEndDate($end);
|
29f4a05f
Alex Savenko
multiple metrics
|
96
97
98
|
// Создание объекта Metrics.
$metrics = [];
|
180e10be
Alex Savenko
dynamic dateRange
|
99
|
$get_metrics = explode(',', $get_metrics);
|
29f4a05f
Alex Savenko
multiple metrics
|
100
101
102
|
foreach ($get_metrics as $metric) {
$metrics_obj = new Google_Service_AnalyticsReporting_Metric();
$metrics_obj->setExpression('ga:'.$metric);
|
6d167872
Alex Savenko
alias to one temp...
|
103
|
$metrics_obj->setAlias('ga:'.$metric);
|
29f4a05f
Alex Savenko
multiple metrics
|
104
105
|
$metrics[] = $metrics_obj;
}
|
897d06c3
Alex Savenko
generate GaResource
|
106
|
|
f51dd710
Alex Savenko
dimensions +dynam...
|
107
|
//Create the Dimensions object.
|
b22a7c02
Alex Savenko
empty dimension
|
108
109
110
111
112
113
114
115
|
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;
}
|
04026e8b
Alex Savenko
dimensions +dynam...
|
116
|
}
|
f51dd710
Alex Savenko
dimensions +dynam...
|
117
|
|
29f4a05f
Alex Savenko
multiple metrics
|
118
119
|
// Создание объекта ReportRequest.
$request = new Google_Service_AnalyticsReporting_ReportRequest();
|
129bec7c
Alex Savenko
ga output
|
120
|
$request->setViewId($view);
|
29f4a05f
Alex Savenko
multiple metrics
|
121
|
$request->setDateRanges($dateRange);
|
c6d3dfe5
Alex Savenko
registration
|
122
123
124
|
if (!empty($dimensions)) {
$request->setDimensions(array($dimensions));
}
|
c5aa2e2b
Alex Savenko
dimensions +dynam...
|
125
|
$request->setMetrics(array($metrics));
|
897d06c3
Alex Savenko
generate GaResource
|
126
|
|
29f4a05f
Alex Savenko
multiple metrics
|
127
|
$body = new Google_Service_AnalyticsReporting_GetReportsRequest();
|
c6d3dfe5
Alex Savenko
registration
|
128
|
$body->setReportRequests(array($request));
|
897d06c3
Alex Savenko
generate GaResource
|
129
|
|
c6d3dfe5
Alex Savenko
registration
|
130
|
$response = $analytics->reports->batchGet($body);
|
897d06c3
Alex Savenko
generate GaResource
|
131
|
|
a6a1fb9f
Alex Savenko
ga output
|
132
133
|
//have to rewrite code below (2 rows)
$response = $response->toSimpleObject();
|
a6a1fb9f
Alex Savenko
ga output
|
134
|
$response = $response->reports[0]['data']['rows'];
|
9b8fbac2
Alex Savenko
ga output
|
135
|
|
9cbda58b
Alex Savenko
ga output
|
136
|
$result = [];
|
129bec7c
Alex Savenko
ga output
|
137
|
$project = Project::findFirst(['ga_view_id' => $view]);
|
a941da22
Alex Savenko
ga output
|
138
|
$result['name'] = $project->name;
|
9cbda58b
Alex Savenko
ga output
|
139
|
|
c04bfb94
Alex Savenko
ga output
|
140
|
foreach ($response as $item) {
|
d29dde0e
Alex Savenko
ga output
|
141
142
143
144
|
$metric_val = $item['metrics'][0]['values'];
$dimension_val = $item['dimensions'][0];
|
f842989c
Alex Savenko
ga output
|
145
|
if (count($metric_val) > 1) {
|
65b1cb95
Alex Savenko
ga output
|
146
147
|
for ($i = 0; $i < count($metric_val); $i++) {
$result[$dimension_val][] = $metric_val[$i];
|
d29dde0e
Alex Savenko
ga output
|
148
149
150
151
|
}
} else {
$result[$dimension_val] = $metric_val[0];
}
|
9cbda58b
Alex Savenko
ga output
|
152
153
|
}
|
17f81e11
Alex Savenko
ga output
|
154
|
return ($result);
|
05915c96
Alex Savenko
ga output
|
155
|
|
7fe1d3b2
Alex Savenko
create response
|
156
|
}
|
b38ef228
Alex Savenko
generate GaResource
|
157
|
}
|