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. メニューが表示されたら、[空のプロジェクト] をクリックします。
    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 アナリティクスの 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 スクリプトを活用するために、次のチュートリアルも役立つでしょう。