Google Space にAnalyticsデータを日次で投稿する

## はじめに
会社のコミュニケーションツールは何を使っていますか？
当社はGoogle Chatを使っております。このChatの派生機能でコミュニティが作れるSpaceというのがありますが、ここに同じGoogleのGASを使って色々とお知らせ投稿をさせてみようと考えております。
手始めにAnalyticsで取得した日々のアクセスレポート（PVとかUU）について自動投稿させて、定点観測できるようにしたいと思います。

## 前提条件
- 既にGoogle Spaceを使っているものとするのでこちらの詳細は省略
- Google Analyticsで何かのサイト（今回は社内のイントラにしてみました）を計測しているものとする

## 下準備
- Google Spaceの設定を開いて「アプリと統合」メニューを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/2643ff51-880c-3b5f-ab89-1c582aebcebb.png)
- Webhookを追加してURLを取得する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/9a462d7a-df58-6e89-0a7d-e51f19901d6a.png)
- Google Analyticsの当該レポートより、プロパティIDを取得する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/fb281fe6-1fee-09ce-c820-1f0a1090b8a5.png)

## GASの開発
ということで早速Drive内にGoogleAppScriptを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/23ddc849-370f-db81-021d-8fe76cf259d6.png)

### AnalyticsのAPIのサービスを追加
サービスの欄からこちらを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/227b4efc-449a-7e11-2d4a-53f094d9eade.png)

### 入力するコード
こちらを入力し、WebhookやAnalyticsのプロパティIDなど適宜修正してみてください。
```
function googleChatBot() {
  //GoogleChatで設定したWebhookのURLを設定
  const WEBHOOK_URL = "[Google ChatのWebhook]";

  const [yesterday, pv, uu] = Getanalytics();

  var msg;
  msg += '【昨日のポータルのPV、UUをお知らせします】\n';
  msg += '日付: '+yesterday+'\n';
  msg += 'PV: '+pv+'\n';
  msg += 'UU： '+uu+'\n';

  var message = {
    'text' : msg
  };

  //HTTPリクエストのパラメータを設定
  var options = {
    'payload' : JSON.stringify(message),
    'myamethod' : 'POST',
    'contentType' : 'application/json'
  };

  //Google Chatへ投稿（WebhookURLへHTTP POSTを実行）
  var response = UrlFetchApp.fetch(WEBHOOK_URL,options);
}

function Getanalytics() {
  const GA4_PROPERTY_ID = "[GAで取得したプロパティID]";

  try {
    // PV, UU等メトリクス（値）、複数指定可能
    const metric1 = AnalyticsData.newMetric();
    metric1.name = "screenPageViews";
    const metric2 = AnalyticsData.newMetric();
    metric2.name = "totalUsers";

    // データの日付範囲
    const dateRange = AnalyticsData.newDateRange();
    var today = new Date();
    var yesterday = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 1);
    var today = Utilities.formatDate(today, 'Asia/Tokyo', 'yyyy-MM-dd');
    var yesterday = Utilities.formatDate(yesterday, 'Asia/Tokyo', 'yyyy-MM-dd');
    dateRange.startDate = yesterday;
    dateRange.endDate = yesterday;

    const request = AnalyticsData.newRunReportRequest();
    request.metrics = [metric1, metric2];
    request.dateRanges = dateRange;

    // Analyticsデータ取得
    const report = AnalyticsData.Properties.runReport(request,
        'properties/' + GA4_PROPERTY_ID);
    Logger.log(report.rows);
    if (!report.rows) {
      Logger.log('No rows returned.');
      return [yesterday, 0, 0];
    }
    Logger.log("pv:"+report.rows[0].metricValues[0].value + "uu:"+report.rows[0].metricValues[1].value);
    return [yesterday, report.rows[0].metricValues[0].value, report.rows[0].metricValues[1].value];    
  }catch (e) {
    // TODO (Developer) - Handle exception
    Logger.log(`Failed to write report with error: ${e}`);
  }
}
```
## 実行
ここからテストもしくは実行ができます。ブレークポイント張ってステップ実行しながらデバッグするならデバッグで普通に実行する際には実行ボタンです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/6e9ae2cd-3d37-53b0-ffdf-e002051b1768.png)

また、時間指定してバッチ処理も可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/cf4fbd85-b42d-14e7-b2bb-aa3a390a4526.png)

## 投稿イメージ
こんな感じで投稿されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/ceb51757-cf0b-c938-6cb1-fce3677aa6be.png)

## 最後に
こんな感じで色々応用範囲が広いかと思うのでぜひGASとGoogle Space、Analyticsを利用してみてください。