#32のぶろぐ

アウトプットは大事ですよ、っと

Chatworkのグループに所属しているメンバー一覧の取得方法

こんにちは。 初回の投稿からかなり時間が空いてしまいましたが、ゆるく、少しずつ投稿しようと思います。 (まだ使いこなせてないので、目次みたいなのが構成できてませんw)

さて、最近社員が急激に増えてきたため、大人数が参加しているグループについて誰が参加しているのか確認したいというリクエストが舞い込んで来ました。 UIのグループから一覧取得できるかな、くらいに考えていましたが、どうやらAPIを利用して取得するようです。

そのため今回は Google Apps Script (GAS) を利用して Chatwork のグループに所属しているユーザーの一覧を取得してみましたので、その方法を書き留めておきます。



実施手順

実施手順としては以下の通り。

  1. Google スプレッドシートを新規作成する
  2. メニューから、ツール>スクリプトエディタ を選択して GAS を開く
  3. 以下のコードを貼り付けて getRooms の関数を実行する
var ChatWorkToken = "チャットワーク API トークン";
var sheet_name = "シート1";
var room_id = "ルーム ID";
var url =  "https://api.chatwork.com/v2/rooms/" + room_id + "/members";
var sheet = SpreadsheetApp.getActive().getSheetByName(sheet_name);

function getRooms(){
  var params = {
    headers : {"X-ChatWorkToken" : ChatWorkToken },
    method : "get"
  }; 
  var strRespons = UrlFetchApp.fetch(url, params); 
  var json = JSON.parse(strRespons.getContentText()); 

  for(var obj of json){
    Logger.log(obj.name, obj)
    Logger.log(obj.account_id)
    sheet.appendRow([obj.name, obj.account_id]);
  }
}

ログの出力設定を入れているので、ユーザー名とIDが書き出されるのが確認できます。 それと同時に、元開いていたスプレッドシートに情報が書き込まれていきます。



実施してみて

思っていたより情報がなく、出力設定完了まで時間がかかってしまいました。 ハマったポイントは以下となります。

  • for each ~ in 構文で構成したが、エラーとなり実行できなかった

具体的には、for(var obj of json)for each(var obj in json) で設定しました。 ここがエラーアラートとなり実行ができない状態となっていました。

調べてみると、こちら に情報がありました。

for each...in 文は ECMA-357 (E4X) の一部として廃止されました。E4X のサポートは削除されました。代替として、for...of 文が推奨されます。

修正して実行したところ、上記の通り正常実行を確認しました。 普段 JavaScript なんて使わないので調査に時間がかかりましたが、結果情報を正常に取得することができて良かったです。