GASを使ってAnalyticsのデータを毎日自動でプリザンターに登録する。

本記事は [Pleasanter(プリザンター) Advent Calendar 2020](https://qiita.com/advent-calendar/2020/pleasanter) 十日目の記事です。

# はじめに
この記事は、12月7日に公開した [Googleフォームの回答内容をプリザンターに登録してみる](https://qiita.com/sesese/items/6a0d3e8d25565631d30d) の続編のようなものです。
表題の通り、今回はGoogle Apps Scriptを使ってGoogle Analyticsとプリザンターを連携させるわけですが、ほとんど使いまわしです。言うなれば、エコです。

今回はプリザンターのAPIを使用しますので、Pleasanter.netのフリープラン、ライトプランではお試し頂けません。
お試し環境を持っていない場合は、デモサイトをご利用ください。メールアドレスを登録するだけですぐにお使いいただけます。
[プリザンターのデモサイト](https://pleasanter.azurewebsites.net/users/login)

もちろん、OSS版をお使いいただいている方はそちらでお試しください。
[プリザンターのダウンロード](https://pleasanter.org/)


# プリザンターにテーブルを作る
まずは記録テーブルを作りましょう。
「テーブルの管理」「エディタ」で以下のように項目を有効化します。
![スクリーンショット 2020-12-10 21.29.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537390/42e47af8-bffe-31b0-e67d-3a30996e21f4.png)

|項目名称|種別|
|:--|:--|
|タイトル|Title|
|ユーザ|NumA|
|セッション|NumB|
|ページビュー|NumC|

ついでに、APIキーを発行し、メモはせずに暗記してください。全集中です。
[ユーザーマニュアル：APIキーの作成](https://pleasanter.net/fs/publishes/422358/edit)

# Google様に感謝

Analyticsにログインしているブラウザで以下にアクセスしてください。
https://ga-dev-tools.appspot.com/query-explorer/

GASでAnalyticsに値を取りに行く際に必要となるidsも表示されているのでメモはせずに暗記してください。
metricsでは、どの項目を取得するか指定する際のパラメータが表示されます。
今回はシンプルに「ユーザ数」「セッション」「ページビュー」をプリザンターに登録したいと思います。

![スクリーンショット 2020-12-10 21.26.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537390/bd9f3d6a-8832-3cae-8e2b-8d0afaf4ff40.png)



続いて、スクリプトエディタで、AnalyticsのAPIを使えるように設定します。
スクリプトエディタの「リソース」→「Googleの拡張サービス」から「Google Analytics API」を「ON」にします。

![スクリーンショット 2020-12-10 20.57.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537390/e5425fab-5a2b-3782-f90e-127669785760.png)



前回同様、IDなどはプロパティストアに格納しておきます。
「ファイル」→「プロジェクトのプロパティ」→「スクリプトのプロパティ」に以下のように登録します。

|プロパティ|値|
|:--|:--|
|API_KEY|プリザンターで発行したAPIキー|
|API_URL|リクエストを投げるURL|
|ids|Google Analytics|

![スクリーンショット 2020-12-10 20.57.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537390/96f47434-1c9b-fbb0-7c5b-3c9d8802ff4e.png)

コードは以下のような感じです。

```
function SendPleasanter() {

    let date = new Date();
    let year = date.getFullYear();
    let month = date.getMonth() + 1;
    let day = date.getDate();
    let title = year + '/' + month + '/' + day + '：' + 'Pleasanter.org';
  
    var gaData = getGaData('yesterday', 'yesterday');
    Logger.log(gaData);
  
    var data = {
        "ApiVersion": 1.1,
        "ApiKey": PropertiesService.getScriptProperties().getProperty('API_KEY'),
        "Title": title,
        "NumHash": {
            "NumA" : gaData[0][0],
            "NumB" : gaData[0][1],
            "NumC" : gaData[0][2]
        }
    };
  
    const api_url = PropertiesService.getScriptProperties().getProperty('API_URL');

    var options = {
        'method': 'post',
        'contentType': 'application/json',
        'payload': JSON.stringify(data)
    };
  
    var response = UrlFetchApp.fetch(api_url, options);
    Logger.log(api_url, options);
}

function getGaData(startDate, endDate) {
    var gaData = Analytics.Data.Ga.get(
        PropertiesService.getScriptProperties().getProperty('ids'),
        startDate, endDate, 
        'ga:users, ga:sessions, ga:pageviews' 
    ).rows;
 
    return gaData;
}
```

Googleフォームとの連携と違って、スクリプトエディタから実行できますので、試してみましょう。

![スクリーンショット 2020-12-10 21.31.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537390/9c80949d-75ba-8698-3bfe-66925c461d09.png)
登録できました！
控えめなページビューでお恥ずかしい限りです。

とりあえず、これで昨日のページビューなどをAnalyticsから取得し、プリザンターに登録することができました。ただ、これを毎日手動でやるのも面倒なので、フォーム連携でも使ったトリガーを設定して自動化します。

![スクリーンショット 2020-12-10 21.01.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537390/20ba22c5-638d-a8cc-d9f4-5dd5f094039c.png)

これで毎日午後1時〜2時の間で自動的にスクリプトが走って、プリザンターに情報が登録されます。
素晴らしい！

# おわりに
いやあ、Google Apps Script、本当に便利。
Analytics APIも非常にシンプルにアクセスできるので、思ったより簡単に出来てしまいました。
ドキュメントが豊富なのもありがたいところです。
GASを使うことでもっとプリザンターを便利に使える予感が青天井で有頂天で絶好調です。

Analyticsのデータをプリザンターに集積してMetabaseで視覚化、というのも面白そうですよね。
プリザンターをデータハブとして、様々なサービスと連携させることで、可能性は無限大です。宇宙です。
もっとプリザンターをいろいろなものと連携させてみたい欲求も無限大です。全集中です。