GAS+GA4で管理しているすべてのプロパティから情報を一括で収集する方法

Google Analyticsデータを効率的に取得・ソートする方法

Google Analyticsはウェブサイトのトラフィックを分析するための強力なツールですが、大量のデータを効率的に処理するには、自動化が鍵です。ここでは、Google Apps Scriptを使用してGoogle Analyticsのデータを取得し、ページビュー(PV)の数でソートする方法について解説します。

スクリプトの概要

このスクリプトは、指定された期間内の全てのビューからページビュー数とセッション数を取得し、ページビュー数で降順にソートします。このスクリプトは特に、複数のウェブサイトやアプリを管理している場合に有用です。

コードの解説

  1. データ取得の設定: 最初に、取得する期間(startDateendDate)や、取得するメトリクス(metrics)を設定します。
  2. データの取得: Google Analyticsのアカウント、プロパティ、ビューを順に取得し、各ビューからページビュー数とセッション数を取得します。
  3. エラーハンドリング: APIの利用制限に達した場合、一定時間待機してからリクエストを再試行します。
  4. ソート処理: 取得したデータを配列に保存し、ページビュー数でソートします。
  5. 結果の表示: ソートされたデータをログに出力します。

使用方法

  1. Google スプレッドシートを開き、「ツール」>「スクリプト エディタ」を選択します。
  2. スクリプト エディタに上記のコードを貼り付けます。
  3. スクリプトを実行するには、エディタ内で適切な関数を選択し、「実行」ボタンをクリックします。
  4. 初回実行時には、Google Analytics APIへのアクセス許可を求められるので、指示に従って許可します。

注意点

  • Google Apps Scriptの実行時間制限(最大6分)がありますので、大量のデータを扱う場合は注意が必要です。
  • スクリプトの実行頻度が高い場合、Google Analytics APIの利用制限に注意してください。
  • Google Analyticsのアカウントに対する適切なアクセス権限が必要です。

このスクリプトを利用することで、Google Analyticsのデータをより効率的に分析し、ウェブサイトやアプリのパフォーマンス改善に役立てることができます。

Google Analytics APIから取得したデータをページビュー(PV)の数でソートするには、まずデータを配列やリストに保存し、その後にソート処理を行う必要があります。Google Apps ScriptではJavaScriptの配列操作メソッドを使用してこれを実現できます。

以下は、データを取得し、PVでソートするための改善されたサンプルコードです。

スクリプトの改善

function getAllViewsDataSortedByPageviews() {
  var allData = [];
  var startDate = '30daysAgo';
  var endDate = 'today';
  var metrics = 'ga:pageviews,ga:sessions';
  var accounts = Analytics.Management.Accounts.list();

  if (accounts.items && accounts.items.length) {
    for (var i = 0; i < accounts.items.length; i++) {
      var account = accounts.items[i];
      var properties = Analytics.Management.Webproperties.list(account.id);

      if (properties.items && properties.items.length) {
        for (var j = 0; j < properties.items.length; j++) {
          var property = properties.items[j];
          var views = Analytics.Management.Profiles.list(account.id, property.id);

          if (views.items && views.items.length) {
            for (var k = 0; k < views.items.length; k++) {
              var view = views.items[k];
              try {
                var report = Analytics.Data.Ga.get(
                  'ga:' + view.id,
                  startDate,
                  endDate,
                  metrics
                );
                var pageviews = report.totalsForAllResults['ga:pageviews'];
                var sessions = report.totalsForAllResults['ga:sessions'];
                allData.push({
                  viewId: view.id,
                  name: view.name,
                  property: property.name,
                  pageviews: parseInt(pageviews, 10),
                  sessions: parseInt(sessions, 10)
                });
              } catch (e) {
                if (e.message.includes("Rate Limit Exceeded")) {
                  Utilities.sleep(10000); // 10秒待機
                } else {
                  throw e;
                }
              }
            }
          }
        }
      }
    }
  }

  // ページビューでソート
  allData.sort(function(a, b) {
    return b.pageviews - a.pageviews;
  });

  // ソートされたデータの表示
  for (var l = 0; l < allData.length; l++) {
    var data = allData[l];
    Logger.log('View ID: ' + data.viewId + ', Name: ' + data.name + ', Property: ' + data.property + ', Pageviews: ' + data.pageviews + ', Sessions: ' + data.sessions);
  }
}

注意事項

  • このコードは、すべてのデータを取得した後にソート処理を行います。データ量が多い場合は、実行時間制限に注意してください。
  • parseInt 関数を使用して、ページビューとセッションの数値を整数に変換しています。これにより、数値として正しくソートできます。
  • APIの利用制限に達した場合には、10秒待機してから再試行します。これにより、制限によるエラーの影響を最小限に抑えることができます。