3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【PHP】Google Analytics APIでレポートデータを取得したい!

Last updated at Posted at 2022-05-13

最近めっきりAPIからは遠ざかっていたのですが、
久しぶりに運用担当さんから連絡が来ました。
曰く「Google Analyticsのレポートを自動化したい」とのこと。

ヤッホーーーイ!!

最近バージョンアップとかしかなくて退屈してたんだよね!(違う)

ということで、今回挑むのはGoogle Analytics APIです。
例によって「(意地でも)サンプルを使わずにデータを取る!」方式により
頑張っていきたいと思います。

毎度の繰り返しになりますが、
Googleは「サンプルプログラムを使ってやってね!」を推奨しているので
なにかあっても自己責任でお願いします!

っていうかアナリティクスってなに!?
正直あまり馴染みがないのですが・・・まあなんとかなるか。なるか・・・?

Google Analytics APIとは

Google Analyticsとは、天下のGoogleさんが提供しているアクセス解析ツールです。
当然のことながら無料。さすがぐーぐるさんですね。

Analyticsを利用すると、サイトにどのくらいアクセスが来ているか、
リアルタイムの訪問数や、ユーザーのページ滞在時間、直帰率など
サイトを訪れた人が、どのページをどのくらい見ているかがわかります。

こうやって私たちは常に監視されているわけですね。
なんかこわい。

そんな恐ろしくも便利なGoogle Analyticsには、APIが用意されています。
その名もGoogle Analytics Data API!(そのままや)
リファレンスはこちらをどうぞ。

ではさっそくAPI導入する手順をご説明しましょう。

Analytics APIを有効にする

すでにさまざまなGoogleAPIを導入してきたので

【PHP】Google Ads APIをサンプルプログラム無しで使いたい!!
【PHP】Google Sheets APIをサンプルプログラム無しで使いたい!!
【PHP】Google Ads APIで入札情報を更新したい!
【PHP】GoogleAPIで操作履歴を取りたい!
【PHP】Google広告APIでオフラインコンバージョンを自動アップロードしたい!

どれか一つでも導入済みの方には説明不要かと思いますが、
GoogleでAPIを利用するためには「API コンソール」というところで
「プロジェクト」を設定する必要があります。

そこらへんの解説は、検索したらたくさん出てくると思いますので、
わかりやすいものを参考にしながら作成してください。
たとえばこことか

プロジェクトを作成したら、「有効なAPIとサービス」⇒「+APIとサービスの有効化」をクリック。

image.png

「analytics」とかで検索すると「Google Analytics Reporting API」が出てくるので、
それをクリックして有効にします。

image.png

「Google Analytics API」というのもありますが、
こちらはアカウントの管理をしたりユーザーの制御をしたりするためのものなので
レポートを取るだけなら必要ありません。

サービスアカウントでoAuth認証を行う

ここからはプログラミングに入っていきます。

といっても、基本的に
今までやっていたことの焼き直しで行けたので、詳しい説明は省きます。

認証は「サービスアカウント」と呼ばれるメールアドレスのようなもので行います。

SheetsAPIについての「Google API を使うための認証情報」を参照してください。

「サービスアカウント」を設定すると、秘密鍵のJSONファイルがダウンロードされます。
じぇいすん。そういえば今日は13日の金曜日でした。

続いて、「サービスアカウントで認証を行う」に沿って認証を行います。

この際に注意しなければならないのが、scopeです。

scopeは「私このAPI使いますんで!」って宣言になるもの。
SheetsAPIでは「https://www.googleapis.com/auth/spreadsheets」という
SheetsAPIのためのscopeを指定しています。

今回使うのはAnalyticsのAPIなので、そのように指定してやる必要があります。

//認証のペイロード
$_payload = [
    "iss" => $_jsonauth["client_email"], //認証のclient_email
    "scope" => "https://www.googleapis.com/auth/analytics.readonly", //Analytics用のscope
    "aud" => $_jsonauth["token_uri"],  //認証のtoken_uri
    "exp" => $_time_end,
    "iat" => $_time,
];

Analyticsのscopeは読み取り専用しかないみたいです。まあそりゃそうか。。

処理に問題がなければ、アクセストークンが取れるはず。
これが時間制限付きの認証キーになります。

ビューIDと期間を渡してAPIデータを取得する

認証さえ取れればこっちのものです。
あとは必要な情報を渡してAPIからデータをいただいちゃいましょう。

アナリティクスのレポートデータは、必ず「ビューID」というID情報があります。
管理画面の「管理」⇒「ビューの設定」で確認ができます。

リクエストを渡すメソッドは、reports:batchGet
渡してやるパラメータは、ビューIDと期間情報です。

リクエストとして渡す値はJSONで、入れ子状態がややこしいので注意してください。
仕様はこちらで確認できます。

//viewidをstring型に変換
//※PHPだと型の判別が曖昧なんですが、APIに渡すのは明確に文字列型である必要があります
//※数値型だとデータが取れません
$_viewid = strval($_viewid);

//URLを生成 ※バージョンは利用するものを指定してください
$_url = "https://analyticsreporting.googleapis.com/v4/reports:batchGet";

//取得するデータを設定
$input = [
    "reportRequests" => [[
        "viewId" => $_viewid, 
        "dateRanges" => [["startDate" => "2022-03-01" , "endDate" => "2022-03-31"]],
        "dimensions" => [
            ["name" => "ga:date"], 
            ["name" => "ga:pageTitle"], 
            ["name" => "ga:PagePath"]
        ],
        "metrics" => [
            ["expression" => "ga:uniquePageviews"], 
            ["expression" => "ga:avgTimeOnPage"],
            ["expression" => "ga:bounces"],
            ["expression" => "ga:bounceRate"],
        ],
        "pageSize" => "100000",	//MAX
        "filtersExpression" => "ga:pagePath==/",
    ]]
];

//curl START
$_curl = curl_init();

//OPTIONをセット[GET]
curl_setopt_array($_curl, [
    CURLOPT_URL => $_url,
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTPHEADER => $header,
    CURLOPT_POSTFIELDS => json_encode($input),
]);

//curl EXEC(文字列で取得)
$_resp =  curl_exec($_curl);

//エラーハンドリング用
$_errno = curl_errno($_curl);

//curl END
curl_close($_curl);

//エラーハンドリング
if ($_errno !== CURLE_OK) {
    //エラー処理
}

データのまとまりを表すのが「ディメンション」(dimensions)
取りたい数字データが「メトリクス」(metrics)です。

上記の例では、年月日、ページタイトル、ページパスごとに集計された
ページビュー、平均滞在時間、直帰数、直帰率を取得
しています。

ディメンションに関しては、わかりやすくまとめてくださっている方がいるので
そちらを参考にするとわかりやすいです。私も助かりました。
参考:【最新&完全版】Google Analytics指標&ディメンションチートシート

また、フィルター(filtersExpression)は除外条件です。
こちらも書き方がややこしいのですが、まとめてくださっている方のサイトを参考に。
参考:フィルタを指定して特定のページのPVを Google Analytics から取得する (C#プログラミング)

おわりに

鬼門だと思い続けてきたGoogleのAPIも、
慣れてくると「たぶんこうだろ」と推測できるようになるんだから
続けるって大事だなあと思います。

序盤であんなに苦しんだのは無駄ではなかったんだなと。
懐に入れてもらえたら、Googleさんは優しかった。

APIを使いたいと思いながら「どうすれば!?」と困っている人が
少しでも前進する足がかりになれたらいいなと思います。

みなさんがんばりましょう。

Analyticsと一緒にSearch Consoleについても調べたので、
次回はサチコさんAPIについて書きます。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?