Google スプレッドシートから Google アナリティクス データへ自動的にアクセスする

Nick Mihailovski、Google アナリティクス API チーム - 2012 年 8 月

このチュートリアルでは、Apps スクリプトを使って Google スプレッドシートから Management API と Core Reporting API にアクセスする方法を説明しています。


はじめに

Google アナリティクス APIGoogle Apps スクリプト を使用して、Google スプレッドシートから Google アナリティクス データにアクセスすることができます。これにより、簡単な共有、コラボレーション、グラフ化、視覚化ツールといった Google スプレッドシートの便利な機能を、アナリティクス データと組み合わせて使用することができ便利です。

このチュートリアルでは、Google Apps スクリプトを使って Google スプレッドシート内の Google アナリティクス データにアクセスするためのコードについて、詳しく説明します。

概要

このチュートリアルでは、Google アナリティクス API を使用するための Apps Script 環境の登録と設定について説明します。このチュートリアルでは、構成後に Management API を使用して承認済みユーザーのビュー(プロファイル)ID を取得する方法について説明します。次に、ビュー(プロファイル)ID を使用して Core Reporting API にクエリを実行し、Google から上位 250 個のモバイル検索キーワードを取得します。最後に、結果が Google スプレッドシートに挿入されます。データを入手したら、データの取得を自動化する方法についても解説します。

Google アナリティクス API と Apps スクリプトを使用してアプリケーションを作成する手順は、通常次のようになります。

  • Google スプレッドシート内で Google アナリティクスを有効にします。
  • Google アナリティクス API を使用します。

では、手順を詳しく見ていきましょう。

Apps スクリプトで Google アナリティクス API を有効化

Google スプレッドシート内から Google アナリティクス データへのアクセスを有効にする方法は次のとおりです。

  1. Google スプレッドシート ファイルを作成します。シートにわかりやすい名前をつけます。
  2. 新しい Apps Script を作成します。
    1. メニューで [拡張機能] > [Apps Script] に移動します。
    2. メニューがポップアップ表示された場合は、[Blank Project] をクリックします。
    3. プロジェクトに名前を付けます。名前はわかりやすいものにしてください。

新しいスクリプトが作成できたら、次は Google アナリティクス サービスを有効にします。

  1. スクリプト エディタで、[リソース] > [Google の拡張サービス...] を選択します。
  2. 表示されるダイアログで Google アナリティクス API の横に表示された [オン / 無効] スイッチをクリックします。
  3. ダイアログ ボックス下部の [Google デベロッパー コンソール] のリンクをクリックします。
  4. 新しいコンソールで、Google Analytics API の横にある [オン/オフ] スイッチを再度クリックします。(有効にすると、ページの一番上に移動します)。
  5. スクリプト エディタに戻り、ダイアログで [OK] をクリックします。

スクリプトに新しい Google API サービスが追加されたことを知らせる黄色の小さなダイアログ ボックスが表示されます。これで、最初のスクリプトを書く準備が整いました。

アナリティクス API のs

このチュートリアルのスクリプトでは、Google アナリティクス API に対して上位 250 位のモバイル検索キーワードをクエリし、その結果を Google スプレッドシートに出力します。このために、スクリプトは次の手順を実行します。

  • 認証済みユーザーの最初のビュー(旧プロファイル)を取得します。
  • Core Reporting API にデータをクエリします。
  • データをスプレッドシートに挿入します。

空のプロジェクトに次の関数を追加します。

function runDemo() {
  try {

    var firstProfile = getFirstProfile();
    var results = getReportDataForProfile(firstProfile);
    outputToSpreadsheet(results);

  } catch(error) {
    Browser.msgBox(error.message);
  }
}

上記のコードでは、try...catch ブロックを使用して API エラーを処理しています。If any errors occur, the program execution will halt and the error will be displayed in a message box. エラーが発生すると、プログラムの実行が停止され、メッセージ ボックスにエラーが表示されます。try ブロックでは、関数を使用してスクリプトが実行する各ステップを実行します。各関数のコードを追加しましょう。

認証済みユーザーの最初のビュー(旧プロファイル)の取得

Google アナリティクスでは、各レポートはビューに属し、ビュー ID で識別されます。したがって、レポートデータのクエリを指定するときは、データを取得するビュー(プロファイル)のビュー ID も指定する必要があります。

Google Analytics Management API を使用すると、ユーザーに属するすべてのアカウント、ウェブ プロパティ、ビュー(プロファイル)エンティティにアクセスできます。これらのエンティティはそれぞれ階層に属します。この階層をプログラムで走査して、承認済みユーザーのビュー ID を取得できます。

2 番目に作成する関数は Management API 階層を走査して、ユーザーの最初のビューを返します。次のコードをコピーして Apps スクリプトのプロジェクトに貼り付けてください。

function getFirstProfile() {
  var accounts = Analytics.Management.Accounts.list();
  if (accounts.getItems()) {
    var firstAccountId = accounts.getItems()[0].getId();

    var webProperties = Analytics.Management.Webproperties.list(firstAccountId);
    if (webProperties.getItems()) {

      var firstWebPropertyId = webProperties.getItems()[0].getId();
      var profiles = Analytics.Management.Profiles.list(firstAccountId, firstWebPropertyId);

      if (profiles.getItems()) {
        var firstProfile = profiles.getItems()[0];
        return firstProfile;

      } else {
        throw new Error('No views (profiles) found.');
      }
    } else {
      throw new Error('No webproperties found.');
    }
  } else {
    throw new Error('No accounts found.');
  }
}

この関数では、まず Analytics.Management.Accounts.list メソッドを使用して Accounts コレクションをクエリします。認証済みユーザーが複数の Google アナリティクス アカウントを所有している場合、最初のアカウントの ID が取得されます。次に、Analytics.Management.Webproperties.list メソッドを呼び出し、前のステップで取得したアカウント ID をメソッドに渡して、ウェブ プロパティ コレクションをクエリします。ウェブ プロパティが存在する場合、最終的には Analytics.Management.Profiles.list メソッドを使用してビュー(プロファイル)コレクションをクエリします。アカウント ID とウェブ プロパティ ID のryがこのメソッドにパラメータとして渡されます。ビューが存在する場合、最初のビューが返されます。

API エラーが発生した場合、または API レスポンスに結果が含まれていない場合、結果が検出されなかったというメッセージと共にエラーがスローされます。上記の runDemo 関数の catch ブロックは、このエラーをキャッチしてユーザーにメッセージを出力します。

スクリプトが戻ると、レポートデータについてクエリを実行できます。

Core Reporting API へのデータのクエリ

ビュー ID を取得したら、Core Reporting API を使用して Google アナリティクスのレポートデータをクエリします。このセクションでは、Apps スクリプトを使用して Core Reporting API にクエリを行う方法を学びます。

Apps スクリプトのプロジェクトに次のコードを追加します。

function getReportDataForProfile(firstProfile) {

  var profileId = firstProfile.getId();
  var tableId = 'ga:' + profileId;
  var startDate = getLastNdays(14);   // 2 weeks (a fortnight) ago.
  var endDate = getLastNdays(0);      // Today.

  var optArgs = {
    'dimensions': 'ga:keyword',              // Comma separated list of dimensions.
    'sort': '-ga:sessions,ga:keyword',       // Sort by sessions descending, then keyword.
    'segment': 'dynamic::ga:isMobile==Yes',  // Process only mobile traffic.
    'filters': 'ga:source==google',          // Display only google traffic.
    'start-index': '1',
    'max-results': '250'                     // Display the first 250 results.
  };

  // Make a request to the API.
  var results = Analytics.Data.Ga.get(
      tableId,                    // Table id (format ga:xxxxxx).
      startDate,                  // Start-date (format yyyy-MM-dd).
      endDate,                    // End-date (format yyyy-MM-dd).
      'ga:sessions,ga:pageviews', // Comma seperated list of metrics.
      optArgs);

  if (results.getRows()) {
    return results;

  } else {
    throw new Error('No views (profiles) found');
  }
}

function getLastNdays(nDaysAgo) {
  var today = new Date();
  var before = new Date();
  before.setDate(today.getDate() - nDaysAgo);
  return Utilities.formatDate(before, 'GMT', 'yyyy-MM-dd');
}

コードの最初の部分では、Analytics.Data.Ga.get メソッドを使用して Core Reporting API のクエリを作成します。このメソッドは、取得するレポートの種類を指定する一連のパラメータを受け入れます。Core Reporting API の各クエリは必須パラメータとオプション パラメータのセットから構成されます。必須パラメータはパラメータとして、オプション パラメータはオブジェクトとしてメソッドに渡されます。

table ID パラメータは必須で、接頭辞 ga: とビュー(プロファイル)ID を組み合わせたものです。このコードでは、前のステップで取得したビュー(プロファイル)ID を使用してテーブル ID が作成されます。開始日と終了日も必須で、取得するデータの期間を指定します。どちらも getLastNdays 関数を使用して今日の日付に基づいて計算されます。最後に、すべてのオプションのパラメータが、optArgs オブジェクトを使用して関数に渡されます。

Analytics.Data.Ga.get メソッドが実行されると、Core Reporting API にリクエストが送信されます。エラーが発生した場合は、外側の runDemo メソッドで定義された try...catch ブロックで捕捉されます。リクエストが成功した場合、結果が返されます。

スプレッドシートにデータを挿入

最後に、Core Reporting APIから Google スプレッドシートに結果を出力します。outputToSpreadsheet メソッドがこの処理を行います。次のコードをプロジェクトに追加してください。

function outputToSpreadsheet(results) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet();

  // Print the headers.
  var headerNames = [];
  for (var i = 0, header; header = results.getColumnHeaders()[i]; ++i) {
    headerNames.push(header.getName());
  }
  sheet.getRange(1, 1, 1, headerNames.length)
      .setValues([headerNames]);

  // Print the rows of data.
  sheet.getRange(2, 1, results.getRows().length, headerNames.length)
      .setValues(results.getRows());
}

この関数では、まず新しいシートをアクティブなスプレッドシートに挿入します。次に、すべてのヘッダーとレポートデータをそのシートに挿入します。Google スプレッドシートにデータを挿入する方法のヒントについては、スプレッドシートにデータを保存するチュートリアルJavaScript オブジェクトからスプレッドシートにデータを書き込む方法をご覧ください。

スクリプトの実行

すべてのコードをプロジェクトに追加したら、コードを実行することができます。

  • スクリプト エディタのツールバーで、関数を選択するためのプルダウンから runDemo を選択します。
  • 次に、play ボタンをクリックします。

このスクリプトを初めて実行するとポップアップ ボックスが表示されて、このスクリプトが Google アナリティクスのアカウント データにアクセスすることを承認するよう求められます。

[承認] をクリックします。

クリックすると、google.com がホストする新しいページが開いt、このスクリプトのデータへのアクセスを許可するよう促されます。許可すると、確認ページにリダイレクトされます。この時点で、スクリプトは Google アナリティクス データにアクセスすることができるようになり、処理を継続することができます。

スクリプトの実行後、Google スプレッドシートが表示されたウィンドウをクリックします。API から返されたすべてのキーワード データ、またはエラー メッセージ付きのメッセージ ボックスが表示されます。

スクリプトの自動化

これで、Google Analytics API にクエリを実行するスクリプトが準備できました。 毎晩新しいデータを取得するようこのスクリプトを自動化してみましょう。Apps Script では、triggers 機能を使用して非常に簡単に自動化できます。

このスクリプトを自動化するには、次の手順に従ってください。

  • スクリプト エディタのツールバーで、Resources -> All your triggers... をクリックします。
  • [Add a new trigger] をクリックします。トリガーのダイアログ ボックスが表示されます。
  • runDemo メソッドを毎晩実行するようにトリガーを設定します。
    • Run プルダウンを runDemo に設定します。
    • Events プルダウンは、Time-drivenDay timerMidnight to 1am に設定する必要があります。

設定が完了すると、このスクリプトは毎晩実行され、毎朝新しいデータを返します。

夜の間にエラーが起こった場合は、通知されるようにします。Apps スクリプトでは、問題発生時にメールで警告を送るようにすることが可能です。これを構成するには、トリガーのダイアログ ボックスで notifications リンクをクリックします。新しいダイアログ ボックスがポップアップ表示され、エラーの送信先メールアドレスを構成できます。

まとめ

これで、スクリプトを登録し、スクリプトへのアクセスを承認することができました。ビュー(プロファイル)ID を取得するために、Management API に複数回クエリを実行しました。次に、ビュー ID を使って Core Reporting API にクエリを実行し、データを取得して Google スプレッドシートに出力しました。

このチュートリアルで紹介した手法を使用すれば、より複雑な分析を実行してより詳細な分析データを獲得できるうえ、カスタム ダッシュボードの作成や、手動レポートの作成にかかっていた時間の削減などが可能になります。

Google アナリティクス API と Google Apps スクリプトを活用するために、次のチュートリアルも役立つでしょう。