Help us understand the problem. What is going on with this article?

Google Analytics Reporting API v4を使ってPV数とUU数を取得する

はじめに

はじめてのアナリティクス Reporting API v4: サービス アカウント向け PHP クイックスタートを参考にして、指定した期間のPV数とUU数を、日毎に取得するバッチを作成できたので、クイックスタートのHelloAnalytics.phpのgetReportメソッド にあたる部分の備忘録。
cronでバッチ実行して日毎のPV数、UU数を取得するバッチを実行したい人の役に立てたらと思います。

前提

  • PHP7.4
  • Google API ConsoleでJSON形式の秘密鍵を作成済み
  • クライアントライブラリインストール済み
  • 例外系の処理も書いていますが省略。

PHPプログラム

HelloAnalytics.php
<?php

function getReport($analytics) {

    // Create the DateRange object.
    $dateRange = new Google_Service_AnalyticsReporting_DateRange();
    $dateRange->setStartDate("7daysAgo");
    $dateRange->setEndDate("today");

    // Create the Metrics object.
    // PV
    $pageviews = new Google_Service_AnalyticsReporting_Metric();
    $pageviews->setExpression('ga:pageviews');
    // UU
    $uniqueUsers = new Google_Service_AnalyticsReporting_Metric();
    $uniqueUsers->setExpression('ga:users');

    // Create the Dimension object.
    // Daily
    $byDay = new Google_Service_AnalyticsReporting_Dimension();
    $byDay->setName("ga:date");

    // Create the ReportRequest object.
    $request = new Google_Service_AnalyticsReporting_ReportRequest();
    $request->setViewId($viewId);
    $request->setDateRanges($dateRange);
    $request->setMetrics([$pageviews, $uniqueUsers]);
    $request->setDimensions([$byDay]);

    $body = new Google_Service_AnalyticsReporting_GetReportsRequest();
    $body->setReportRequests([$request]);
    $result = $analytics->reports->batchGet($body);

    //今回は日毎のPV数とUU数が欲しかったので、日付をキーとした連想配列にpvとuuを入れてみました。
    $data = [];
    foreach ($result['reports'][0]['data']['rows'] as $row) {
        $data[$row['dimensions'][0]] = [
            "pv" => $row['metrics'][0]['values'][0],
            "uu" => $row['metrics'][0]['values'][1],
        ];
    }

実際の中身の形式は以下のようになります。

    var_dump($data);
    //以下結果例
    [20201013] =>
     array(2) {
     'pv' =>
         string(5) "12345"
     'uu' =>
         string(4) "8585"
     }...

最後に

ソートの設定しなくても古い順から結果を得ることができるんですね。
クイックスタートの参考例ではPV数だけが返ってきており、かつ指定した合計数が返ってきてしまったのですが、

$uniqueUsers->setExpression('ga:users');
$byDay->setName("ga:date");

こちらの設定をすることで、PV数だけでなくUU数と、指定した期間の日毎の結果を得ることができたので嬉しかったです。

chonma57
新卒3年目になってしまった、バックエンドエンジニアです 学んだことを細々と書けたらいいなと思います。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away