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() {
|
95c83ce2
Alex Savenko
ga output
|
30
31
32
|
$user_id = $this->request->get('user_id')?? '1';
//$view_id= $this->request->get('view_id') ?? '119240817';
$view_id= $this->request->get('view_id');
|
180e10be
Alex Savenko
dynamic dateRange
|
33
|
$get_metrics = $this->request->get('metric') ?? 'users';
|
129bec7c
Alex Savenko
ga output
|
34
|
$get_dimensions = $this->request->get('dimension');
|
180e10be
Alex Savenko
dynamic dateRange
|
35
36
|
$get_start_date = $this->request->get('start') ?? '30daysAgo';
$get_end_date = $this->request->get('end') ?? 'today';
|
5937dcc7
Alex Savenko
ga output
|
37
|
$chart = $this->request->get('chart') ?? false;
|
180e10be
Alex Savenko
dynamic dateRange
|
38
|
|
95c83ce2
Alex Savenko
ga output
|
39
|
if (empty($view_id)) {
|
2cda8b9d
Alex Savenko
ga output
|
40
|
$result = [];
|
9ba864b0
Alex Savenko
ga output
|
41
42
|
$projects = Project::find(['user_id' => $user_id]);
foreach ($projects as $project) {
|
9791b548
Alex Savenko
ga output
|
43
|
$view_id = (string)$project->ga_view_id;
|
7e1d4fa3
Alex Savenko
ga output
|
44
|
$result[] = $this->sendGaRequest($project->name, $view_id, $get_metrics, $get_dimensions, $get_start_date, $get_end_date, $chart);
|
9ba864b0
Alex Savenko
ga output
|
45
46
47
|
}
}
else {
|
c0f7b2aa
Alex Savenko
ga output
|
48
|
$project = Project::findFirst(['ga_view_id' => $view_id]);
|
7e1d4fa3
Alex Savenko
ga output
|
49
|
$result = $this->sendGaRequest($project->name , $view_id, $get_metrics, $get_dimensions, $get_start_date, $get_end_date, $chart);
|
9ba864b0
Alex Savenko
ga output
|
50
51
|
}
return $result;
|
129bec7c
Alex Savenko
ga output
|
52
53
54
|
}
|
7e1d4fa3
Alex Savenko
ga output
|
55
|
public function sendGaRequest($project_name, $view, $get_metrics, $get_dimensions, $start, $end, $chart = false) {
|
129bec7c
Alex Savenko
ga output
|
56
|
|
897d06c3
Alex Savenko
generate GaResource
|
57
58
59
60
|
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
|
61
62
|
$analytics = new Google_Service_AnalyticsReporting($client);
|
29f4a05f
Alex Savenko
multiple metrics
|
63
64
|
// Создание объекта DateRange.
$dateRange = new Google_Service_AnalyticsReporting_DateRange();
|
129bec7c
Alex Savenko
ga output
|
65
66
|
$dateRange->setStartDate($start);
$dateRange->setEndDate($end);
|
29f4a05f
Alex Savenko
multiple metrics
|
67
68
69
|
// Создание объекта Metrics.
$metrics = [];
|
180e10be
Alex Savenko
dynamic dateRange
|
70
|
$get_metrics = explode(',', $get_metrics);
|
29f4a05f
Alex Savenko
multiple metrics
|
71
72
73
|
foreach ($get_metrics as $metric) {
$metrics_obj = new Google_Service_AnalyticsReporting_Metric();
$metrics_obj->setExpression('ga:'.$metric);
|
6d167872
Alex Savenko
alias to one temp...
|
74
|
$metrics_obj->setAlias('ga:'.$metric);
|
29f4a05f
Alex Savenko
multiple metrics
|
75
76
|
$metrics[] = $metrics_obj;
}
|
897d06c3
Alex Savenko
generate GaResource
|
77
|
|
f51dd710
Alex Savenko
dimensions +dynam...
|
78
|
//Create the Dimensions object.
|
584f7b1c
Alex Savenko
ga output
|
79
|
if (!empty($get_dimensions)) {
|
b22a7c02
Alex Savenko
empty dimension
|
80
81
82
83
84
85
86
|
$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...
|
87
|
}
|
f51dd710
Alex Savenko
dimensions +dynam...
|
88
|
|
29f4a05f
Alex Savenko
multiple metrics
|
89
90
|
// Создание объекта ReportRequest.
$request = new Google_Service_AnalyticsReporting_ReportRequest();
|
129bec7c
Alex Savenko
ga output
|
91
|
$request->setViewId($view);
|
29f4a05f
Alex Savenko
multiple metrics
|
92
|
$request->setDateRanges($dateRange);
|
c6d3dfe5
Alex Savenko
registration
|
93
94
95
|
if (!empty($dimensions)) {
$request->setDimensions(array($dimensions));
}
|
c5aa2e2b
Alex Savenko
dimensions +dynam...
|
96
|
$request->setMetrics(array($metrics));
|
897d06c3
Alex Savenko
generate GaResource
|
97
|
|
29f4a05f
Alex Savenko
multiple metrics
|
98
|
$body = new Google_Service_AnalyticsReporting_GetReportsRequest();
|
c6d3dfe5
Alex Savenko
registration
|
99
|
$body->setReportRequests(array($request));
|
897d06c3
Alex Savenko
generate GaResource
|
100
|
|
c6d3dfe5
Alex Savenko
registration
|
101
|
$response = $analytics->reports->batchGet($body);
|
897d06c3
Alex Savenko
generate GaResource
|
102
|
|
a6a1fb9f
Alex Savenko
ga output
|
103
104
|
//have to rewrite code below (2 rows)
$response = $response->toSimpleObject();
|
a6a1fb9f
Alex Savenko
ga output
|
105
|
$response = $response->reports[0]['data']['rows'];
|
9b8fbac2
Alex Savenko
ga output
|
106
|
|
7e1d4fa3
Alex Savenko
ga output
|
107
108
109
110
111
|
if ($chart) {
$result = self::responseChartTransform($response, $project_name);
} else {
$result = self::responseDataTransform($response, $project_name);
}
|
5937dcc7
Alex Savenko
ga output
|
112
113
114
115
116
|
return ($result);
}
|
7e1d4fa3
Alex Savenko
ga output
|
117
|
public static function responseDataTransform(array $response, $project_name) {
|
5937dcc7
Alex Savenko
ga output
|
118
|
|
9cbda58b
Alex Savenko
ga output
|
119
|
$result = [];
|
9cbda58b
Alex Savenko
ga output
|
120
|
|
c04bfb94
Alex Savenko
ga output
|
121
|
foreach ($response as $item) {
|
d29dde0e
Alex Savenko
ga output
|
122
123
124
125
|
$metric_val = $item['metrics'][0]['values'];
$dimension_val = $item['dimensions'][0];
|
889ea43e
Alex Savenko
ga output
|
126
127
|
$result['name'] = $project_name;
|
f842989c
Alex Savenko
ga output
|
128
|
if (count($metric_val) > 1) {
|
65b1cb95
Alex Savenko
ga output
|
129
130
|
for ($i = 0; $i < count($metric_val); $i++) {
$result[$dimension_val][] = $metric_val[$i];
|
d29dde0e
Alex Savenko
ga output
|
131
132
133
134
|
}
} else {
$result[$dimension_val] = $metric_val[0];
}
|
9cbda58b
Alex Savenko
ga output
|
135
136
|
}
|
5937dcc7
Alex Savenko
ga output
|
137
|
return $result;
|
05915c96
Alex Savenko
ga output
|
138
|
|
7fe1d3b2
Alex Savenko
create response
|
139
|
}
|
5937dcc7
Alex Savenko
ga output
|
140
|
|
7e1d4fa3
Alex Savenko
ga output
|
141
142
143
|
public static function responseChartTransform(array $response, $project_name) {
$result = [];
|
a7c416d0
Alex Savenko
ga output
|
144
|
|
7e1d4fa3
Alex Savenko
ga output
|
145
146
147
148
149
150
151
152
153
154
|
foreach ($response as $item) {
$metric_val = $item['metrics'][0]['values'];
$result['name'] = $project_name;
if (count($metric_val) > 1) {
for ($i = 0; $i < count($metric_val); $i++) {
$result['data'][] = $metric_val[$i];
}
} else {
|
f98d60e3
Alex Savenko
ga output
|
155
|
$result['data'][] = $metric_val[0];
|
7e1d4fa3
Alex Savenko
ga output
|
156
157
158
159
160
161
162
|
}
}
return $result;
}
|
5937dcc7
Alex Savenko
ga output
|
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
|
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;
}
|
b38ef228
Alex Savenko
generate GaResource
|
201
|
}
|