Google Analytics apiを使ってアクセス情報をスプレッドシートに表示する ~Google Analyticsのレポートを自動作成 その参~

こんにちは。広報担当の小林です。
今回の内容もGoogle Analyticsの統計レポートの自動作成手順の続きです。
- Google Apps Scriptを動かしてみる
- Google Apps Scriptでスプレッドシートのセルの値を取得・変更する
- Google Analytics apiを使ってアクセス情報をスプレッドシートに表示する
- Google Slides apiを使ってスライドの中身を書き換える
今回は③、Google Analytics apiを使用してGoogle Analytics(以下GA)のデータを取得します。
なお、本稿の Google Analytics api のバージョンはv3です。
Google Analytics apiを有効化
まずは準備として Google Analytics api を導入する必要があります。
スプレッドシートを作成してスクリプトエディタを開きましょう。
「リソース」の「Cloud Platformプロジェクト」を押して下さい。

プロジェクト名を入力して進むとこのようなダイアログが表示されますので、右下の「APIコンソールを表示」を押すと Google Cloud Platform に移動します。

Google Cloud Platform でAPIを有効化します。
作成したプロジェクトを選択して、メニューから「APIとサービス」のダッシュボードへ移動して「APIとサービスの有効化」で有効化したいAPIを選択してください。
今回は Analytics API を有効化します。

スプレッドのスクリプトエディタに戻ります。
「リソース」の「Googleの拡張サービス」で Google Analytics API をONにします。

これで準備完了です。
サンプルスクリプト
予め「SETTING」と「RESULT」シート、2つのシートを作成しておきます。

上の画像は「SETTING」シートです。
「SETTING」シートの入力値を取得して、それを条件にGAのデータを取得、それを「RESULT」シートに出力します。上のスプレッドシートの入力値を取得してGAのデータを取得します。
「SETTING」シートの内容は以下の通りです。
| ViewID | XXXXXXXX(GAのビューIDを入力) |
|---|---|
| start-date | 2017/06/01 |
| end-date | 2018/06/30 |
| metrics | ga:users |
| dimensions | ga:userGender |
| sort | -ga:users |
| filters | 無し |
2017/6/1~2018/6/30のユーザの男女別の合計数を取得しています。
指定できるパラメータは他にもありますが、今回はその中からいくつか抜粋して使用しています。
各パラメータの説明は以下の通りです。
| ViewID | 取得したいGAのビューID |
|---|---|
| start-date | 期間 開始日 |
| end-date | 期間 終了日 |
| metrics | 指標 PV数やセッションなど、グラフの横軸部分 |
| dimensions | ディメンション ページタイトルや年月など、グラフの縦軸部分 |
| sort | 並び順 先頭に’-’を付けると降順 |
| filters | 結果の絞り込み条件 |
サンプルスクリプト
//起動時にメニューを追加
function onOpen(){
//スプレッドシートのメニューに新たな項目を追加する
SpreadsheetApp.getActive().addMenu(
'Google Analytics',
[
{name: 'データを取得', functionName: 'getGaData'}
]
);
}
//Google Analyticsのデータを取得
function getGaData(){
var settingSheet = SpreadsheetApp.getActive().getSheetByName('SETTING');
//セルの値を取得してパラメータを指定する
var input_viewID = settingSheet.getRange('B2').getValue();
var input_startDate = settingSheet.getRange('B3').getValue();
var input_endDate = settingSheet.getRange('B4').getValue();
var input_metrics = settingSheet.getRange('B5').getValue();
var input_dimensions = settingSheet.getRange('B8').getValue();
var input_sort = settingSheet.getRange('B9').getValue();
var input_filters = settingSheet.getRange('B10').getValue();
//optionを作成
var options = {};
if(input_dimensions !=='') options.dimensions = input_dimensions;
if(input_sort !=='') options.sort = input_sort;
if(input_filters !=='') options.filters = input_filters;
//日付をフォーマットする
var timeZone = Session.getScriptTimeZone();
var startDate = Utilities.formatDate(input_startDate, timeZone, 'yyyy-MM-dd');
var endDate = Utilities.formatDate(input_endDate, timeZone, 'yyyy-MM-dd');
var result = Analytics.Data.Ga.get(
'ga:'+input_viewID, //ViewID
startDate, //データ取得期間 From
endDate, //データ取得期間 To
input_metrics, //マトリクス
options //条件
).rows;
//RESULTシートに結果を表示する
var resultSheet = SpreadsheetApp.getActive().getSheetByName('RESULT');
//シートの値を削除
resultSheet.clear();
if(result.length){
//1行目に項目名を挿入
//配列を作成
var head = [[]];
if(input_dimensions){
var dimensions = String(input_dimensions).split(',');
for(var i=0; i<dimensions.length; i++){
head[0].push(dimensions[i]);
}
}
var metrics = String(input_metrics).split(',');
for(var i=0; i<metrics.length; i++){
head[0].push(metrics[i]);
}
//セルに挿入
resultSheet.getRange(1, 1, 1, head[0].length).setValues(head);
//2行目に結果を挿入
resultSheet.getRange(2, 1, result.length, result[0].length).setValues(result);
}
}
まずサンプルスクリプトの2行目の関数 onOpen ですが本稿の処理とは直接関係ありません。
スプレッドシートを開いた際にメニューの項目を追加しています。
ここで追加したメニューを押すと getGaData が実行されます。
では13行目以降の関数 getGaData を見て下さい。
流れを簡単に説明すると、
14~23行 「SETTING」シートのセルの値を取得
25~42行 上で取得した値から検索用のパラメータを作成、GAのデータを取得
44~70行 結果を「RESULT」シートに反映
という手順になります。
セルの値の取得と変更については前回の記事をご覧ください。
Google Analytics api で統計データを取得する
GAのデータ取得には Analytics.Data.Ga.get() メソッドを使用します。
Analytics.Data.Ga.get(viewID, start-date, end-date, metrics[, options])
まずパラメータの作成です。
セルから取得した値で指定する options オブジェクト作成します。
//optionを作成
var options = {};
if(input_dimensions !=='') options.dimensions = input_dimensions;
if(input_sort !=='') options.sort = input_sort;
if(input_filters !=='') options.filters = input_filters;
start-date,end-date のセルの書式が日付になっている場合、取得した値はDateオブジェクトになっているはずなのでフォーマットします。
//日付をフォーマットする var timeZone = Session.getScriptTimeZone(); var startDate = Utilities.formatDate(input_startDate, timeZone, 'yyyy-MM-dd'); var endDate = Utilities.formatDate(input_endDate, timeZone, 'yyyy-MM-dd');
Analytics.Data.Ga.get() メソッドを使用してGAのデータを取得します。
var result = Analytics.Data.Ga.get(
'ga:'+input_viewID, //ViewID
startDate, //データ取得期間 From
endDate, //データ取得期間 To
input_metrics, //マトリクス
options //条件
).rows;
結果の二次元配列は rows に格納されているため、サンプルスクリプトでは直接変数 result に代入しています。
viewIDの前に ‘ga:’ を付けるのをお忘れなく。
後は結果をRESULTシートに反映して終了です。
結果は二次元配列になっています。
例えばディメンションを2つ、指標を3つ指定した場合は以下のような結果になります。
[
[dimension1, dimension2, metrics1, metrics2, metrics3],
[dimension1, dimension2, metrics1, metrics2, metrics3],
︙
]
サンプルスクリプトを実行するとRESULTシートに結果が表示されます。

以上で Google Analytics api の基本的な使い方は終了です。
次回は Google Slides api を使用してGoogleスライドの中身をいじっていきます。
