下記のチャットワークのグループチャットのメンバー一覧を取得するGASあるのですが、
全ルームのリスト取得ではなく、特定のルームIDのメンバーだけ抽出したいです。
gas
1 2// チャットワークAPIトークンを設定 3var ChatWorkToken = "xxxxxxxxxxxxxxxxxxxxxxxxx"; 4 5// 設定用シートのシート名 6var SHEETNAME = "シート1"; 7 8//---- 初期設定ここまで ----------- 9 10// 最新のルーム一覧を読込む 11function getRooms(){ 12 13 // シートを読込み 14 var sheet = getSheet(); 15 16 // 自分のchatworkIDを取得 17 var myAccountId = getMyAccountId(); 18 19 // ルーム一覧を読み込み 20 // ChatWork apiに投げるパラメータを設定 21 var params = { 22 headers : {"X-ChatWorkToken" : ChatWorkToken}, 23 method : "get" 24 }; 25 26 //ルーム一覧を取得するURL 27 var url = "https://api.chatwork.com/v2/rooms"; 28 29 //チャットワークAPIエンドポイントからレスポンスを取得 30 var strRespons = UrlFetchApp.fetch(url, params); 31 32 // 中身がなかったら終了 33 if( strRespons.getContentText() == "" ) return false; 34 35 // シートをクリア 36 sheet.clearContents(); 37 38 // レスポンス文字列をJSON形式として解析しJSONオブジェクトとして返す 39 var json = JSON.parse(strRespons.getContentText()); 40 41 // 二次元配列を作成し、シートに貼り付ける 42 // 配列を定義 43 var values = []; 44 // 1行目はフィールド名を挿入 45 values[0] = [ "ルームID", "ルーム名", "アカウントID", "ロール", "名前", "ChatWorkID", "組織ID", "組織名", "部署名" ]; 46 47 // jsonの内容を2行目以降に追加 48 for each(var obj in json){ 49 if(obj.type == "group"){ 50 var members = getMembers(obj.room_id, obj.name, myAccountId); 51 if(!members)continue; 52 values = values.concat(members); 53 } 54 } 55 56 // シートに貼付け 57 sheet.getRange(1,1,values.length,values[0].length).setValues( values ); 58 59} 60 61function getMyAccountId(){ 62 // ChatWork apiに投げるパラメータを設定 63 var params = { 64 headers : {"X-ChatWorkToken" : ChatWorkToken}, 65 method : "get" 66 }; 67 68 // エンドポイント 69 var url = "https://api.chatwork.com/v2/me"; 70 71 //チャットワークAPIエンドポイントからレスポンスを取得 72 var strRespons = UrlFetchApp.fetch(url, params); 73 74 // 中身がなかったら終了 75 if( strRespons.getContentText() == "" ) return false; 76 77 // レスポンス文字列をJSON形式として解析しJSONオブジェクトとして返す 78 var json = JSON.parse(strRespons.getContentText()); 79 80 return json.account_id; 81} 82 83function getMembers(room_id, room_name, myAccountId){ 84 85 // ルーム一覧を読み込み 86 // ChatWork apiに投げるパラメータを設定 87 var params = { 88 headers : {"X-ChatWorkToken" : ChatWorkToken}, 89 method : "get" 90 }; 91 92 // エンドポイント 93 var url = "https://api.chatwork.com/v2/rooms/"+room_id+"/members"; 94 95 //チャットワークAPIエンドポイントからレスポンスを取得 96 try{ 97 var strRespons = UrlFetchApp.fetch(url, params); 98 }catch(e){ 99 return false; 100 } 101 // 中身がなかったら終了 102 if( strRespons.getContentText() == "" ) return false; 103 104 // レスポンス文字列をJSON形式として解析しJSONオブジェクトとして返す 105 var json = JSON.parse(strRespons.getContentText()); 106 107 // 配列を定義 108 var values = []; 109 110 // jsonの内容を追加 111 for each(var obj in json){ 112 if( obj.account_id != myAccountId ){ 113 var line = [ room_id, room_name, obj.account_id, obj.role, obj.name, obj.chatwork_id, obj.organization_id, obj.organization_name, obj.department ]; 114 values.push( line ); 115 } 116 } 117 return values; 118} 119 120function getSheet(){ 121 var book = SpreadsheetApp.getActiveSpreadsheet(); 122 return book.getSheetByName(SHEETNAME); 123}
特定のルームID(123456789)を含む列だけ抽出したいのですが、どのように記述しればよろしいでしょうか?
例えば下記のように if( obj.room_id != 123456789 ){}でくくってみたのですが、うまく行かず。
// jsonの内容を追加 for each(var obj in json){ if( obj.account_id != myAccountId ){ if( obj.room_id == 123456789 ){ var line = [ room_id, room_name, obj.account_id, obj.role, obj.name, obj.chatwork_id, obj.organization_id, obj.organization_name, obj.department ]; values.push( line ); } } } return values; }
よろしくお願いします。
例えば下記のように、をする前の質問文本文のコードで動きそうなのですが、想定動作とどのように違うのか追記いただけませんか?
あと、Aさんの所属グループばかりになる、とのことですが、自分以外にAさんしかユーザがいない状態でこのコードが想定通り動作したときもその結果になります。Aさん以外のユーザは参照できるのですか?

回答2件
あなたの回答
tips
プレビュー