Google Analytics API V4(谷歌統計實戰)

海外服務網站 利用谷歌統計實戰,實現用戶數據分析

谷歌統計網址:https://analytics.google.com

1、註冊谷歌統計賬號

如果有谷歌賬號,一般會自動註冊(有待測試)

2、創建媒體資源

點擊左側“管理”右側彈出三列,分別爲:“賬號”、“媒體資源”、“數據視圖”

點擊“媒體資源”欄目下的“媒體資源設置”

填寫媒體資源名稱、默認網址(就是您需要跟蹤的網站網址)

3、創建數據視圖

點擊“數據視圖”欄目下的“數據視圖設置”

填寫數據視圖名稱、網站網址、幣種顯示(如果網站平臺爲電子商務平臺,需要收集交易數據,則應選擇平臺使用的幣種)

4、向網站緊貼

標籤添加全局代碼:

 代碼位置:“媒體資源”欄目下“.js 跟蹤代碼”->“跟蹤代碼”
 以下代碼可以自行優化,比如自己增加 用戶 IP 指標等等
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=GA_TRACKING_ID"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'GA_TRACKING_ID');
</script>

php 獲取分析數據

參考文檔 :https://developers.google.com/analytics/devguides/config/mgmt/v3?hl=zh-cn

第 1 步:啓用 Google Analytics(分析)API
要開始使用 Google Analytics(分析)API,需要先使用設置工具,該工具會引導您在 Google API 控制檯中創建項目,啓用 API 以及創建憑據。

創建客戶端 ID
打開服務帳號頁。如果看到相關提示,請選擇項目。
點擊創建服務帳號。
在創建服務帳號窗口中,鍵入服務帳號的名稱,然後選擇提供新的私鑰。如果您希望將 G Suite 全網域權限授予該服務帳號,另請選中啓用 G Suite 全網域委派功能。然後點擊保存。
您的新公鑰/私鑰對已生成並下載到您的計算機;該密鑰僅此一份,您負責安全存儲該密鑰。

當系統提示您提供“密鑰類型”時,選擇 JSON,並將生成的密鑰另存爲 service-account-credentials.json;在本教程的後面,您將需要用到該密鑰。
將服務帳號添加到 Google Analytics(分析)帳號中
新建服務帳戶的電子郵件地址爲 &ltprojectId&gt-&ltuniqueId&[email protected],可用於向您想通過該 API 訪問的 Google Analytics(分析)帳戶添加用戶。就本教程涵蓋的內容而言,只需閱讀和分析權限即可。

第 2 步:安裝 Google 客戶端庫
要獲得適用於 PHP 的 Google API 客戶端庫,您可以下載此版本或使用 Composer:

composer require google/apiclient:^2.0

第 3 步:設置示例代碼
您需要創建一個名爲 HelloAnalytics.php 的文件,其中將包含以下示例代碼。

將以下源代碼複製或下載到 HelloAnalytics.php 中。
將先前下載的 service-account-credentials.json 移到示例代碼所在的目錄中。
首先要先在後套
<?php
use Hisune\EchartsPHP\ECharts;
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use \kartik\date\DatePicker;

$this->title = '管理後臺';

?>

    <div >

        <?php  $form = ActiveForm::begin(['action' => ['index/index'], 'method' => 'post']); ?>
        <div>
            <div style="float:left;margin-left: 150px;">
                <?php
                echo DatePicker::widget([
                    'model' => $model,
                    'attribute' => 'start_date',
                    'attribute2' => 'end_date',
                    'options' => ['placeholder' => '開始時間'],
                    'options2' => ['placeholder' => '結束時間'],
                    'type' => DatePicker::TYPE_RANGE,
                    'separator' => '-',
                    'pluginOptions' => [
                        'endDate'=>'+1',
                        'format' => 'yyyy-mm-dd',
                        'autoclose' => true,
                    ]
                ]);
                ?>
            </div>
            <div  class="form-group" style="display: inline-block;margin-left: 10px;">
                <?= Html::submitButton('搜索', ['class' => 'btn btn-primary']) ?>
            </div>
        </div>
        <?php ActiveForm::end(); ?>
    </div>


<?php
$chart = new ECharts();
//        $day = date('Y-m-d', time()); //獲取當天日期
$chart->title->text = '瀏覽量(總瀏覽量'.$visite.')'; //標題
//        $chart->title->subtext = '日期 ' . $day; //副標題
$chart->title->left = 'center'; //標題距離左側的距離,這裏設爲居中
$chart->tooltip->show = true; //提示框顯示
$chart->tooltip->trigger = 'axis'; //數據項圖形觸發
$chart->legend->data = ['瀏覽量', '訪客數', '新訪客數']; //圖例組件   ,'IP數'
$chart->legend->left = 'right'; //圖例組件顯示在右邊
$chart->color = ['#d14a61', '#3c8dbc', 'green', 'orange']; //顏色就在這裏定義,series會按順序使用這些顏色。
$chart->xAxis = array(
    'type' => 'category',
    'data' => $data['DAY'],
);

$chart->yAxis = [
    [
        'type' => 'value',
        'name' => '瀏覽量',
        'min' => 0,
        'axisLine' => [
            'lineStyle' => [
                'color' => 'green'//定義Y軸顏色
            ]
        ],
        'axisLabel' => [
            'formatter' => "{value}"//定義Y軸刻度標籤
        ],
    ],
];
$chart->series = [
    [
        'name' => '瀏覽量',
        'type' => 'line',
        'data' => $data['DAV'],
    ],
//    [
//        'name' => 'IP數',
//        'type' => 'line',
//        'data' => $data['DIP'],
//    ],
    [
        'name' => '訪客數',
        'type' => 'line',
        'data' => $data['DAU'],
    ],
    [
        'name' => '新訪客數',
        'type' => 'line',
        'data' => $data['DNU'],
    ],

];

echo $chart->render('simple-custom-1');
?>
 public 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 = __DIR__ . '/client_secrets.json';

        // Create and configure a new client object.
        $client = new \Google_Client();
        $client->setApplicationName("Hello Analytics Reporting");
        $client->setAuthConfig($KEY_FILE_LOCATION);
        $client->setDeveloperKey('OAuth 客戶端的ID');
        $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
        $analytics = new \Google_Service_AnalyticsReporting($client);

        return $analytics;
    }

    public function actionIndex()
    {
        $analytics =  $this->initializeAnalytics();
        $data = $this->getReport($analytics);
        return $this->render('index', $data);
    }
    /**
     * Queries the Analytics Reporting API V4.
     *
     * @param service An authorized Analytics Reporting API V4 service object.
     * @return The Analytics Reporting API V4 response.
     */
    public function getReport($analytics) {
        $model = new \app\models\DayCount();
        $startDate = date('Y-m-d', strtotime('-7 day'));
        $endDate = date('Y-m-d', time());
        if (Yii::$app->request->isPost) {
            $model->load(Yii::$app->request->post());
            $startDate = date('Y-m-d',strtotime($model->start_date));
            $endDate = date('Y-m-d',strtotime($model->end_date)) ;
        }
        else{
            $model->start_date = date('Y-m-d',  strtotime($startDate));
            $model->end_date = date('Y-m-d',  strtotime($endDate));
        }
        // Replace with your view ID, for example XXXX.
        $VIEW_ID = "216828575";  //數據視圖ID

        // 配置時間範圍
        $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
        $dateRange->setStartDate($startDate);
        $dateRange->setEndDate($endDate); //"2020-05-05"

        // 配置指標 (顯示的字段). 方法一
//        $sessions = new \Google_Service_AnalyticsReporting_Metric();
//        $sessions->setExpression("ga:pageviews");// sessions
//        $sessions->setAlias("pageviews");
//        $sessions2 = new \Google_Service_AnalyticsReporting_Metric();
//        $sessions2->setExpression("ga:users");// users
//        $sessions->setAlias("users");

        //配置維度  (每日  分組)
        $browser = new \Google_Service_AnalyticsReporting_Dimension();
        $browser->setName("ga:date");//  ga:day  ga:nthDay   date

        // Create the ReportRequest object.
        $request = new \Google_Service_AnalyticsReporting_ReportRequest();
        $request->setViewId($VIEW_ID);
        $request->setDateRanges($dateRange);
        $request->setDimensions($browser);
        //配置查詢指標  (顯示的字段).  方法二
        $request->setMetrics([["expression"=>'ga:users'],["expression"=>'ga:pageviews'],["expression"=>'ga:newUsers']]);//array($sessions,$sessions2)
        $request->setMetricFilterClauses([[
            "filters"=>[[
                "metricName"=> "ga:users",
                "operator"=> "GREATER_THAN", //GREATER_THAN   MORE_THAN
                "comparisonValue"=> "-1"
            ]]
        ]]);
        $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
        $body->setReportRequests( array( $request) );
        $data = $analytics->reports->batchGet($body );
        $data_new = $this->printResults($data);
        $visite = array_sum($data_new['DAV']);
        return ['data'=>$data_new,'model'=>$model,'visite'=>$visite];
    }

    /**
     * Parses and prints the Analytics Reporting API V4 response.
     *
     * @param An Analytics Reporting API V4 response.
     */
    function printResults($reports) {
        $data = [];
        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++) {
                    $data['DAY'][] = $dimensions[$i];
//                    print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n");
                }
                //指標信息
                for ($j = 0; $j < count($metrics); $j++) {
                    $values = $metrics[$j]->getValues();
                    for ($k = 0; $k < count($values); $k++) {
                        $entry = $metricHeaders[$k];
                        //每日 瀏覽量
                        if($entry->getName() == 'ga:pageviews'){
                            $data['DAV'][] = $values[$k];
                        }
                        //每日 訪客數
                        if($entry->getName() == 'ga:users'){
                            $data['DAU'][] = $values[$k];
                        }
                        //每日 新訪客數
                        if($entry->getName() == 'ga:newUsers'){
                            $data['DNU'][] = $values[$k];
                        }
//                        $data[$entry->getName()]   = $values[$k];
//                        print($entry->getName() . ": " . $values[$k] . "\n");
                    }
                }
            }
        }
        return $data;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章