GoogleChat のREST APIを叩いてみるよ スペース情報をとってくる編


[前回](https://qiita.com/akky-tys/items/5b22f93b7bb8872836c5)からの続きだよ
前回は公式をそのままコピーしてBotを作成し、使ってみるところまでやったよ。
今度はもうちょっと別の動きをさせるために、まずはREST APIの使い方を学ぶよ。


###GoogleChatにはどんなAPIがあるの？
Chatに用意されたREST APIはこんな感じだよ。
>https://developers.google.com/hangouts/chat/reference/rest

【REST API】
space.get 特定のスペースの情報を返す。
space.list　ボットが追加されているスペースを返す。
space.members.get　そのスペースのメンバーを返す。
space.members.list　スペースのボット以外のメンバーを返す。
space.messages.create　メッセージを作る。
space.messages.delete メッセージを削除する。
space.messages.get メッセージを受け取る。
space.messages.update メッセージを更新する。




これらのAPIを使いこなせるように、下記の手順で進めていくよ。

**1. サービスアカウントの作成**
**2. プロジェクトとスクリプトの結びつけ**
**3. サービスアカウントを利用して認証し、APIを叩く**
 今日はspace.getを使ってみるよ。


###1.サービスアカウントの作成
>https://developers.google.com/hangouts/chat/how-tos/service-accounts#creating_and_using_a_service_account

公式ドキュメント大好きだからね、ステップ1の手順に沿ってサービスアカウントと秘密鍵を作成するよ。

[GoogleCloudPlatform](https://console.cloud.google.com/home/)で作業をするよ。
[IAMと管理]> [サービスアカウント]で[サービスアカウントを作成]をクリック。
![スクリーンショット 2020-07-19 13.10.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482103/c13358d1-f98e-13a7-b2ff-5dd066f1bfe6.png)

名前をつけて[作成]をクリック。　本当はちゃんと名付けているよ。
![スクリーンショット 2020-07-19 13.11.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482103/1c6e6fe5-fcf6-a955-8ae4-c6068597ea12.png)


[このサービス アカウントにプロジェクトへのアクセスを許可する]
[ユーザーにこのサービス アカウントへのアクセスを許可]の手順は空白のまま先に進むよ。

鍵をJSON形式で作成するよ。
![スクリーンショット 2020-07-19 13.12.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482103/805ae29c-bad3-c694-0a4a-61ebc7874918.png)
![スクリーンショット 2020-07-19 13.12.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482103/55ffac83-a10e-9f1b-d012-c68238f4a0d7.png)
秘密鍵がダウンロードされるから、大切に保管しようね。



###2.プロジェクトとスクリプトの結びつけ
[Google Apps Script](https://script.google.com/home)で作業をするよ。

対象のスクリプトファイルを開いて[ファイル]>[プロジェクトのプロパティ ]のスクリプトのプロパティを開くよ。
[+行を追加]で 名前と値を入れるよ。値にはさっきダウンロードした秘密鍵をコピーして入れるよ。

![スクリーンショット 2020-07-19 13.21.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482103/c1f56c35-3658-d1fa-3b19-b7d7f0cb7450.png)



次に、CloudPlatformのプロジェクトに関連付けをするよ。
[GoogleCloudPlatform](https://console.cloud.google.com/home/)の該当プロジェクトのダッシュボードを開いて、プロジェクト番号をコピーするよ。
![スクリーンショット 2020-07-19 13.26.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482103/0014880e-6a9d-8d8e-6d28-6661ef46e7c1.png)

スクリプトファイルの[リソース]>[CloudPlatformのプロジェクト...]を開いて、コピーしたプロジェクト番号で設定をするよ。
![スクリーンショット 2020-07-19 13.25.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482103/698dc8a2-f7d5-19b8-5bb2-c3decce21c20.png)

設定が完了すると、画像みたいに現在関連づけられているプロジェクトとして出てくるよ。
REST APIを使う準備ができたよ:relaxed:


###3.サービスアカウントを利用して認証する
サービスアカウントでの認証はライブラリを使って行ったよ。
下記の記事が:relaxed:にもわかるほど、丁寧でわかりやすいので、参考にさせていただいたよ。

[Google Apps ScriptでService Accountを利用して認証する ~GASを使ってAppEngineのバージョン一覧を取得~](https://qiita.com/soundTricker/items/63da2f5cf98088542821)

＊GSApp.initでエラーがでて右往左往したのですが、「chromev8搭載のapps scriptランタイム」を無効にしたら、解消しました。
ライブラリに互換性のない箇所があるのかな・・
今だともっと良いライブラリがあるのかもなあ・・
と、きちんと調べきれていないので、次への宿題にします。

コードは、こんな感じだよー。

```javascript:MyFunc


  var jsonKey = JSON.parse(PropertiesService.getScriptProperties().getProperty("jsonKey"));

  // GoogleChatの認証をせってい。
  var serverToken = new GSApp.init(jsonKey.private_key, ["https://www.googleapis.com/auth/chat.bot"], jsonKey.client_email);

  //トークンを取得するユーザを設定して、トークンを取得
  var tokens = serverToken.addUser(jsonKey.client_email).requestToken().getTokens();

 // XXXXXには、調べたいスペースのリソース名がはいるよ。Chatを開いた時のURLのおしりについているよ。
 // XXXXXをつけないと、Botが参加している全てのスペース情報が戻るよ。（spaces.list)

  var url = "https://chat.googleapis.com/v1/spaces/XXXXXX"
   options = {
    "method" : "GET",
    "muteHttpExceptions": true,
    "headers": {
      'Authorization': 'Bearer ' +  tokens[jsonKey.client_email].token
     }
  };
  var res = UrlFetchApp.fetch(url,options);
  console.log(res);
```

こんな感じの戻り値があったよ！

```
{
  "name": "spaces/XXXXXXXX",
  "type": "ROOM",
  "singleUserBotDm": false,
  "threaded": true,
  "displayName": "ルームの名前"
}
```

今日はここまでにするよ。
次回は、POSTでメッセージを送るようにするよ。:relaxed:


##参考にさせていただいたもの

[Google Apps ScriptでService Accountを利用して認証する ~GASを使ってAppEngineのバージョン一覧を取得~](https://qiita.com/soundTricker/items/63da2f5cf98088542821)

[Google Chat API](https://developers.google.com/hangouts/chat)
公式さん、全面的にありがとう。大好き:relaxed: