Blame view

app/library/App/Controllers/GaController.php 5.66 KB
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() {
  
9ba864b0   Alex Savenko   ga output
30
          $user_id = $this->request->get('user_id') ?? '1';
2617218b   Alex Savenko   dynamic view_id
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
  
368857f9   Alex Savenko   ga output
37
          if (true) {
9ba864b0   Alex Savenko   ga output
38
39
40
41
42
43
44
45
46
              $projects = Project::find(['user_id' => $user_id]);
              foreach ($projects as $project) {
                  $result[] = $this->sendGaRequest($project->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;
129bec7c   Alex Savenko   ga output
47
48
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
  
      }
  
      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
84
85
86
87
          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
88
89
          $analytics = new Google_Service_AnalyticsReporting($client);
  
29f4a05f   Alex Savenko   multiple metrics
90
91
          // Создание объекта DateRange.
          $dateRange = new Google_Service_AnalyticsReporting_DateRange();
129bec7c   Alex Savenko   ga output
92
93
          $dateRange->setStartDate($start);
          $dateRange->setEndDate($end);
29f4a05f   Alex Savenko   multiple metrics
94
95
96
  
          // Создание объекта Metrics.
          $metrics = [];
180e10be   Alex Savenko   dynamic dateRange
97
          $get_metrics = explode(',', $get_metrics);
29f4a05f   Alex Savenko   multiple metrics
98
99
100
          foreach ($get_metrics as $metric) {
              $metrics_obj = new Google_Service_AnalyticsReporting_Metric();
              $metrics_obj->setExpression('ga:'.$metric);
6d167872   Alex Savenko   alias to one temp...
101
              $metrics_obj->setAlias('ga:'.$metric);
29f4a05f   Alex Savenko   multiple metrics
102
103
              $metrics[] = $metrics_obj;
          }
897d06c3   Alex Savenko   generate GaResource
104
  
f51dd710   Alex Savenko   dimensions +dynam...
105
          //Create the Dimensions object.
b22a7c02   Alex Savenko   empty dimension
106
107
108
109
110
111
112
113
          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...
114
          }
f51dd710   Alex Savenko   dimensions +dynam...
115
  
29f4a05f   Alex Savenko   multiple metrics
116
117
          // Создание объекта ReportRequest.
          $request = new Google_Service_AnalyticsReporting_ReportRequest();
129bec7c   Alex Savenko   ga output
118
          $request->setViewId($view);
29f4a05f   Alex Savenko   multiple metrics
119
          $request->setDateRanges($dateRange);
c6d3dfe5   Alex Savenko   registration
120
121
122
          if (!empty($dimensions)) {
              $request->setDimensions(array($dimensions));
          }
c5aa2e2b   Alex Savenko   dimensions +dynam...
123
          $request->setMetrics(array($metrics));
897d06c3   Alex Savenko   generate GaResource
124
  
29f4a05f   Alex Savenko   multiple metrics
125
          $body = new Google_Service_AnalyticsReporting_GetReportsRequest();
c6d3dfe5   Alex Savenko   registration
126
          $body->setReportRequests(array($request));
897d06c3   Alex Savenko   generate GaResource
127
  
c6d3dfe5   Alex Savenko   registration
128
          $response =  $analytics->reports->batchGet($body);
897d06c3   Alex Savenko   generate GaResource
129
  
a6a1fb9f   Alex Savenko   ga output
130
131
          //have to rewrite code below (2 rows)
          $response = $response->toSimpleObject();
a6a1fb9f   Alex Savenko   ga output
132
          $response = $response->reports[0]['data']['rows'];
9b8fbac2   Alex Savenko   ga output
133
  
9cbda58b   Alex Savenko   ga output
134
          $result = [];
129bec7c   Alex Savenko   ga output
135
          $project = Project::findFirst(['ga_view_id' => $view]);
a941da22   Alex Savenko   ga output
136
          $result['name'] = $project->name;
9cbda58b   Alex Savenko   ga output
137
  
c04bfb94   Alex Savenko   ga output
138
          foreach ($response as $item) {
d29dde0e   Alex Savenko   ga output
139
140
141
142
  
              $metric_val = $item['metrics'][0]['values'];
              $dimension_val = $item['dimensions'][0];
  
f842989c   Alex Savenko   ga output
143
              if (count($metric_val) > 1) {
65b1cb95   Alex Savenko   ga output
144
145
                  for ($i = 0; $i < count($metric_val); $i++) {
                      $result[$dimension_val][] = $metric_val[$i];
d29dde0e   Alex Savenko   ga output
146
147
148
149
                  }
              } else {
                  $result[$dimension_val] = $metric_val[0];
              }
9cbda58b   Alex Savenko   ga output
150
151
          }
  
17f81e11   Alex Savenko   ga output
152
          return ($result);
05915c96   Alex Savenko   ga output
153
  
7fe1d3b2   Alex Savenko   create response
154
      }
b38ef228   Alex Savenko   generate GaResource
155
  }