Perl で Google Analytics のアクセス解析データを手軽に取得する方法

Perl で Google Analytics のアクセス解析データを取得しようとしたとき、ウェブ上の記事をさらっとなぞるだけではうまくいかなかった。どの記事もやや古く、そのとおりになぞっても失敗した。また、Google API 側の UI 等が大きく変更されていて目的のデータへたどり着けなかったりもした。

なので、試行錯誤の結果うまくいった方法をメモ程度に残しておきます。





# あらかじめ知っておくこと

[Net::Google::Analytics](http://search.cpan.org/~nwellnhof/Net-Google-Analytics-3.05/) を使って Google Analytics のデータを取得します。

この記事を書いてる 2017 年 7 月時点でのモジュールバージョンは 3.05 でした。現在のところこのモジュールは Google Analytics API v3 に対応してるそうなので、最新版である API v4 ではなくレガシーな API v3 を使ってデータを取得する格好になります。





# 必要なもの

Google Analytics の [表示と分析] 権限を持っている Google アカウントが必要です。
作業をはじめる前にログインしておきます。




# API への OAuth2 認証準備をする

API でデータにアクセスするためには、まず認証をパスする必要があります。いろいろな認証方法が Google から提供されていますが、Net::Google::Analytics は OAuth2 での認証が必要なので、その準備を行います。





## Google Analytics API v3 を有効化する

まず [API ダッシュボード](https://console.developers.google.com/apis/dashboard)にアクセスします。

![API ダッシュボード スクショ](https://qiita-image-store.s3.amazonaws.com/0/14157/f444cd2a-ab6a-b8bb-a8d0-07d321007f65.png)

まだプロジェクトが作られていなければ、おそらく作成を要求されると思います。お好きな名前と ID で新規プロジェクトを作成してください。

そして、**[+] APIを有効にする** から「Analytics API」を探して有効にしてください。ここで、似たような名前の「Google Analytics Reporting API」がありますが、こちらは API v4 のようです。





## OAuth2 認証情報を作成する

次に [API 認証情報](https://console.developers.google.com/apis/credentials)にアクセスします。

![API 認証情報 スクショ](https://qiita-image-store.s3.amazonaws.com/0/14157/bc218d07-3e25-f05c-3358-4066dac65895.png)

1. まず、**認証情報を作成 [▼]** から **OAuth クライアントID** を選択します。
2. 同意画面の設定を求められるので、お好きなサービス名を設定して保存してください。今回この入力内容に大きな意味はないです。
3. アプリケーションの種類を尋ねられたら、**ウェブアプリケーション**を選びます。
4. クライアント ID の名前を求められたら、お好きな名前を入力してください。
5. **承認済みのリダイレクト URI** には下記の URL を入力してください。  
`https://developers.google.com/oauthplayground`
6. 作成ボタンを押すと**クライアント ID** と**クライアントシークレット**が表示されます。後で必要になるので控えておいてください。





## OAuth 2.0 Playground で認証をパスする

[このリンクから Google の OAuth 2.0 Playground にアクセスします。](https://developers.google.com/oauthplayground/?hl=ja#step1&scopes=https%3A//www.googleapis.com/auth/analytics.readonly&url=https%3A//&content_type=application/json&http_method=GET&useDefaultOauthCred=checked&oauthEndpointSelect=Google&oauthAuthEndpointValue=https%3A//accounts.google.com/o/oauth2/auth&oauthTokenEndpointValue=https%3A//www.googleapis.com/oauth2/v3/token&includeCredentials=unchecked&accessTokenType=bearer&autoRefreshToken=unchecked&accessType=offline&forceAprovalPrompt=checked&response_type=code)
※必要な設定値が自動入力される URL です。気になる方はクエリを見たら何が設定されるのかだいたい分かると思います。

![OAuth 2.0 Playground スクショ](https://qiita-image-store.s3.amazonaws.com/0/14157/7274a8c9-29a4-b937-7a6b-095468d6cd49.png)

1. 画面右の設定項目 **OAuth Client ID** と **OAuth Client secret** に、先ほど控えておいた **クライアント ID** と**クライアントシークレット** をそれぞれ入力して Close します。
2. アクティブに切り替わった **Authorize APIs** ボタンをクリックします。
3. 画面が切り替わり、API アクセスの許可を求められますので、一応メッセージを読んでから許可します。
4. また画面が切り替わるので、アクティブになっている **Exchange authorization code for tokens** ボタンを押します。
5. すると画面右側に HTTP レスポンスとして JSON が表示されますので、その中の **refresh_token** を控えます。




## Net::Google::Analytics が要求する profile_id なるものを取得する

これは簡単です。
Google Analytics にログインし、データを取りたいビューの**ビュー設定**を開き、**ビュー ID**を控えます。
※これが Net::Google::Analytics が要求する profile_id です。




## Net::Google::Analytics でアクセス解析データを取得する

ここまでできれば、あとは大丈夫かと思います。
試しに [CPAN に載っているコード](http://search.cpan.org/~nwellnhof/Net-Google-Analytics-3.05/lib/Net/Google/Analytics.pm#SYNOPSIS) を実行してみて、うまくいけば成功です。

あとは、CPAN の説明ページにデータ取得方法や該当する API リファレンスへのリンクが掲載されていますので、いろいろ試すとよいと思います。

なお、最初の方でも書きましたが、最新の API は v4 です。Net::Google::Analytics ではひとつ古い v3 を利用することになるので、リンク先のリファレンスの内容が若干違う場合があることは注意が必要です。