chengwl 4 年之前
父節點
當前提交
e85a1d4151
共有 2 個文件被更改,包括 159 次插入52 次删除
  1. 7 52
      controllers/IndexController.php
  2. 152 0
      lib/GA.php

+ 7 - 52
controllers/IndexController.php

@@ -9,6 +9,7 @@ use yii\web\Response;
 use yii\filters\VerbFilter;
 use app\models\LoginForm;
 use app\models\ContactForm;
+use app\lib\GA;
 
 class IndexController extends Controller
 {
@@ -61,8 +62,12 @@ class IndexController extends Controller
      */
     public function actionIndex()
     {
+        $ga=new GA();
+        $contentpages=$ga->contentpages();
+        exit;
         
-        $analytics=$this->initializeAnalytics();
+
+
         $metrics=[
             'sessions'=>"ga:sessions",
             'bounceRate'=>"ga:bounceRate",
@@ -106,59 +111,9 @@ class IndexController extends Controller
         return $this->render('index');
     }
 
-    function initializeAnalytics()
-{
-
-  // Use the developers console and download your service account
-  // credentials in JSON format. Place them in this directory or
-  // change the key file location if necessary.
-  $KEY_FILE_LOCATION = BASE_DIR . 'config/savvy-theory-278005-43552bf9fe94.json';
-
-  // Create and configure a new client object.
-  $client = new \Google_Client();
-  $client->setApplicationName("Hello Analytics Reporting");
-  $client->setAuthConfig($KEY_FILE_LOCATION);
-  $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
-  $analytics = new \Google_Service_AnalyticsReporting($client);
-
-  return $analytics;
-}
+    
 
-/**
- * Queries the Analytics Reporting API V4.
- *
- * @param service An authorized Analytics Reporting API V4 service object.
- * @return The Analytics Reporting API V4 response.
- */
-function getReport($analytics,$data) {
-  $VIEW_ID = "155703065";
-  // Create the DateRange object.
-  $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
-  $dateRange->setStartDate("7daysAgo");
-  $dateRange->setEndDate("today");
-  $metrics=[];
-  $dimensions=[];
 
-  foreach($data as $k=>$v){
-    $Metric = new \Google_Service_AnalyticsReporting_Metric();
-    $Metric->setExpression($v);
-    $Metric->setAlias($k);
-    array_push($metrics,$Metric);
-  }
-  $date = new \Google_Service_AnalyticsReporting_Dimension();
-  $date->setName("ga:date");
-  array_push($dimensions,$date);
-  // Create the ReportRequest object.
-  $request = new \Google_Service_AnalyticsReporting_ReportRequest();
-  $request->setViewId($VIEW_ID);
-  $request->setDateRanges($dateRange);
-  $request->setMetrics($metrics);
-  $request->setDimensions($dimensions);
-
-  $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
-  $body->setReportRequests( array( $request) );
-  return $analytics->reports->batchGet( $body );
-}
 
 /**
  * Parses and prints the Analytics Reporting API V4 response.

+ 152 - 0
lib/GA.php

@@ -0,0 +1,152 @@
+<?php
+namespace app\lib;
+class GA{
+    private static $insances=[];
+    private static function initializeAnalytics($dp){
+        $KEY_FILE_LOCATION = BASE_DIR . 'config/savvy-theory-278005-43552bf9fe94.json';
+        $client = new \Google_Client();
+        $client->setApplicationName("Hello Analytics Reporting");
+        $client->setAuthConfig($KEY_FILE_LOCATION);
+        $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
+        $analytics = new \Google_Service_AnalyticsReporting($client);
+
+        return $analytics;
+    }
+    public static function getInstance($dp){
+        if(isset(self::$insances[$dp])){
+            return self::$insances[$dp];
+        }else{
+            self::$insances[$dp]=self::initializeAnalytics($dp);
+            return self::$insances[$dp];
+        }
+    }
+    private function getViewId($dp){
+        return "155703065";
+    }
+    public function contentpages($dp){
+        $analytics=self::getInstance($dp);
+        $metrics=[
+            'pageviews'=>"ga:pageviews",
+            'uniquePageviews'=>"ga:uniquePageviews",
+            'avgPageDuration'=>"ga:avgPageDuration",
+            'entrances'=>"ga:entrances",
+            'bounceRate'=>"ga:bounceRate",
+            'exitRate'=>"ga:exitRate",
+            'pageValue'=>"ga:pageValue",
+        ];
+        $dimensionArr=[
+            'pagePath'=>'ga:pagePath',
+            'date'=>"ga:date",
+        ];
+        $VIEW_ID = $this->getViewId($dp);//
+        $reports=$this->getReport($VIEW_ID,$analytics,$metric);
+        $result=$this->getResults();
+        echo "</pre>";
+        print_r($result);exit;
+       
+    }
+
+
+
+
+
+
+    /**
+     * Queries the Analytics Reporting API V4.
+     *
+     * @param service An authorized Analytics Reporting API V4 service object.
+     * @return The Analytics Reporting API V4 response.
+     */
+    function getReport($analytics,$metricArr,$dimensionArr) {
+        $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
+        $dateRange->setStartDate("7daysAgo");
+        $dateRange->setEndDate("today");
+        $metrics=[];
+        $dimensions=[];
+        foreach($metricArr as $k=>$v){
+            $Metric = new \Google_Service_AnalyticsReporting_Metric();
+            $Metric->setExpression($v);
+            $Metric->setAlias($k);
+            array_push($metrics,$Metric);
+        }
+        foreach($dimensionArr as $k=>$v){
+            $Dimension = new \Google_Service_AnalyticsReporting_Dimension();
+            $Dimension->setName($v);
+            array_push($dimensions,$Dimension);
+        }
+        $request = new \Google_Service_AnalyticsReporting_ReportRequest();
+        $request->setViewId($VIEW_ID);
+        $request->setDateRanges($dateRange);
+        $request->setMetrics($metrics);
+        $request->setDimensions($dimensions);
+    
+        $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
+        $body->setReportRequests( array( $request) );
+        return $analytics->reports->batchGet( $body );
+       
+    }
+    function getResults($reports) {
+        $data=[];
+        for ( $reportIndex = 0; $reportIndex < count( $reports ); $reportIndex++ ) {
+            $item=[];
+            $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();
+            // echo "<pre>";
+            if($dimensionHeaders&&$dimensions){
+              for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) {
+                    $item[$dimensionHeaders[$i]]=$dimensions[$i];
+                    // print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n\r");
+                    // echo"<br/>";
+                }
+                // $date=$dimensions[0];
+                // $date=date('Y-m-d',strtotime($date));
+    
+            }else{
+                continue;
+            }
+           
+            if($metricHeaders&&$metrics){
+              for ($j = 0; $j < count($metrics); $j++) {
+                  $values = $metrics[$j]->getValues();
+                  for ($k = 0; $k < count($values); $k++) {
+                    $entry = $metricHeaders[$k];
+                    $list[$entry->getName()]=$values[$k];
+                    // print($entry->getName() . ": " . $values[$k] . "\n\r");
+                    // echo"<br/>";
+                  }
+                } 
+            }
+            
+          }
+        }
+        return $data;
+      }
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    }
+
+}