Google Apps ScriptでGoogle Analytics APIを実行する

## 前提

昨日に引き続いて、今日も担当します。

さて、昨日急遽決めたのでテーマを何にするかを考えたのですが、
どうせなら書籍に書けなかった事を書いてやろうと思ったので
今日は、Google Analyticsを使ってみます。
ただ、期待しないでください。本当に初歩の内容となりますので…。

Google APIを実行する場合は、スクリプトエディタのメニュー「リソース」→「Google APIを使用…」から、Analytics APIを有効にする必要があります。
それから、APIキーを求められるのでGoogle APIs ConsoleでAPIキーも取得しておいてください。

## 今日のコード.gsとmyFunction

```コード.gs
function myFunction() {
  var list = Analytics.Management.Accounts.list();
  
  var items = list.getItems();
  for(var i = 0; i < items.length; i++) {
    var account = items[i];
    Logger.log("-------------");
    Logger.log(account.getId());                        // アカウントID
    Logger.log(account.getChildLink());
    Logger.log(account.getCreated());
    Logger.log(account.getKind());                      // データの種類
    Logger.log(account.getName());                      // アカウント名
    Logger.log(account.getSelfLink());                  // 実行したAPIのURL
    Logger.log(account.getUpdated());
    
    // WebPropertyを取得するためにAccountIDが必要
    var properties = Analytics.Management.Webproperties.list(account.getId());
    var pItems = properties.getItems();
    for(var j = 0; j < pItems.length; j++) {
      var property = pItems[j];
      Logger.log("********************");
      Logger.log(property.getAccountId());
      Logger.log(property.getChildLink());
      Logger.log(property.getCreated());
      Logger.log(property.getId());
      Logger.log(property.getInternalWebPropertyId());
      Logger.log(property.getKind());                  // データの種類
      Logger.log(property.getName());                  // アカウント名
      Logger.log(property.getParentLink());
      Logger.log(property.getSelfLink());              // 実行したAPIのURL
      Logger.log(property.getUpdated());
      Logger.log(property.getWebsiteUrl());            // 対象のサイトのURL
      Logger.log("********************");

      // プロファイルを取得するためにWebPropertyのアカウントIDとプロパティIDが必要
      var profile = Analytics.Management.Profiles.list(property.getAccountId(), property.getId());

      // 訪問数(visits)と新規表示数(bounces)を表示
      var ga = Analytics.Data.Ga.get("ga:" + profile.getItems()[0].getId(), "2012-11-14", "2012-12-14", "ga:visits,ga:bounces");
      Logger.log("++++++++++++++++++++");
      for(var rows = 0; rows < ga.getRows().length; rows++) {
        for(var k = 0; k < ga.getColumnHeaders().length; k++) {
          Logger.log("%s = %s", ga.getColumnHeaders()[k], ga.getRows()[rows][k]);
        }
      }
      Logger.log("++++++++++++++++++++");
    }
    
    Logger.log("-------------");
  }  
}
```

## Analytics APIは面倒…？
実際にAnalyticsのデータを取得するためには、

Analytics.Management.Accounts.list()
Analytics.Management.Webproperties.list()
Analytics.Management.Profiles.list()
Analytics.Data.Ga.get()

上記の4回データを取得しないと訪問者数の取得まで到達しません。

恐らく、Analyticsが複数のサイトを登録できたり、アカウントを複数登録できるからなんでしょうけど、ちょっと面倒ですね。
（あ、ScriptDBとか、ScriptPropertiesにIDを突っ込んでおけば、もう少し楽になるかも）

しかも、パラメータの渡し方（特に、Ga.get()のmetrics引数）は[APIリファレンス](https://developers.google.com/analytics/devguides/reporting/core/v3/ "APIリファレンス")に
従って指定しないといけないのでもう少し頑張って欲しいなと思いました。
https://developers.google.com/analytics/devguides/reporting/core/v3/

おまけとして、ログ出力の処理と少しだけコメントをつけているので
出力結果と照らし合わせてみてください。

今回も雑な感じで終わります。（最近、いろいろクオリティが下がってます…）