質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

2回答

2428閲覧

jsonの特定のIDを含む列だけ抽出したい

xu0124

総合スコア31

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2019/06/16 04:54

編集2019/06/16 12:25

下記のチャットワークのグループチャットのメンバー一覧を取得する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; }

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2019/06/16 22:52 編集

例えば下記のように、をする前の質問文本文のコードで動きそうなのですが、想定動作とどのように違うのか追記いただけませんか? あと、Aさんの所属グループばかりになる、とのことですが、自分以外にAさんしかユーザがいない状態でこのコードが想定通り動作したときもその結果になります。Aさん以外のユーザは参照できるのですか?
guest

回答2

0

ぱっと見
ifの**=**がひとつしかない

投稿2019/06/16 04:57

hentaiman

総合スコア6415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xu0124

2019/06/16 12:26 編集

ありがとうございます。 if( obj.room_id == 123456789 ){}を試しましたが、そのルームにいるメンバーが所属しているグループ全てが抽出されました。
hentaiman

2019/06/16 12:37

え、それは意図通りの動作じゃないの?そうなるとやりたい事と質問文が合ってない気がするな・・・
xu0124

2019/06/16 12:50

わかりずらいかもしませんが、obj.room_id ==だとなぜか、Aさんというメンバーが所属しているグループすべてが抽出されてしまいます。 そうではなく特定のグループ「たとえば総務部」のメンバーを抽出したいのです。
guest

0

ベストアンサー

こんな感じ?

GAS

1function getRooms(){ 2 /* 省略 */ 3 // jsonの内容を2行目以降に追加 4 for each(var obj in json){ 5 if(obj.type == "group" && obj.room_id === '123456789'){ // ここでグループを絞る 6 var members = getMembers(obj.room_id, obj.name, myAccountId); 7 if(!members)continue; 8 values = values.concat(members); 9 } 10 } 11 /* 省略 */ 12}

投稿2019/06/17 00:27

macaron_xxx

総合スコア3191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xu0124

2019/06/17 13:28

ありがとうございます!調整箇所わかったのでなんとか取得できました! //ルーム一覧を取得するURL var url = "https://api.chatwork.com/v2/rooms/room_id/members"; for each(var obj in json){ sheet.appendRow([obj.name, obj.account_id]);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問