みなさん、こんにちは!うえはら(@tifoso_str)です。
前回はGoogle Apps ScriptでTrelloの特定のリストにあるカードの一覧を取得しました。
取得できた情報から、必要な情報はある程度、把握できたとおもいます。
今回はTrelloのAPI仕様を確認し、必要な情報を特定して、Trelloのカードから必要な情報を取り出す部分を解説します。
前回の復習
前回紹介した特定のリストにあるカード情報一覧を取得するスクリプトです。
function trelloMain(){ var scriptProperties = PropertiesService.getScriptProperties(); const Trello_KEY = scriptProperties.getProperty('Trello_KEY'); const Trello_TOKEN = scriptProperties.getProperty('Trello_TOKEN'); const BOARD_ID = scriptProperties.getProperty('BOARD_ID'); const LIST_ID = scriptProperties.getProperty('LIST_ID'); var url = 'https://api.trello.com/1/lists/' + LIST_ID + '/cards?key=' + Trello_KEY + '&token=' + Trello_TOKEN; var response = UrlFetchApp.fetch(url); var json = JSON.parse(response.getContentText()); Logger.log(json); }
APIのKEYやTOKENはプロパティストアを利用して呼び出します。
そして、取得できたログがこちらです。
英単語と内容から、メンバーは「idMembers」で、期限は日付形式だから・・・、となんとなくわかると思います。
この中から、今回のシリーズで必要なメンバーと期限を特定します。
カード情報の確認
カード情報の一覧からメンバーと期限がどれになるか、TrelloのAPI_Docを確認します。
このカードオブジェクト結構長いですが、予想した箇所を見ると下記のように確認できます。
項目 | キー | 説明 |
---|---|---|
メンバー | idMembers | カードに登録されたメンバーIDの配列 |
期限 | due | カードの期限(存在する場合) |
カード一覧から取り出すために必要なキーがわかったので、前回のスクリプトを修正して、メンバーと期限だけをTrelloから取得します。
URLにfieldsパラメータを追加して、横に長くなったので、改行して縦に揃えました。
function TrelloMain(){ var scriptProperties = PropertiesService.getScriptProperties(); const Trello_KEY = scriptProperties.getProperty('Trello_KEY'); const Trello_TOKEN = scriptProperties.getProperty('Trello_TOKEN'); const BOARD_ID = scriptProperties.getProperty('BOARD_ID'); const LIST_ID = scriptProperties.getProperty('LIST_ID'); var url = 'https://api.trello.com/1/lists/' + LIST_ID + '/cards'; url += '?key=' + Trello_KEY; url += '&token=' + Trello_TOKEN; url += '&fields= idMembers,due'; var response = UrlFetchApp.fetch(url); var json = JSON.parse(response); Logger.log(json); }
ログ表示すると、メンバーのIDと期限だけが表示されると思います。
このログをブログに出すと、モザイクだらけになるので、みなさんの環境で試してください。
メンバーIDと期限を配列に追加する
メンバーIDと期限の情報は得られましたが、このままでは扱いづらいので、値だけを配列に追加します。
また、今後、メンバー一覧も取得するので、カード情報を取得する部分も関数にします。
スクリプトは下記のようになります。
/** * Trelloから情報を取得するメイン関数 */ function trelloMain(){ var scriptProperties = PropertiesService.getScriptProperties(); const Trello_KEY = scriptProperties.getProperty('Trello_KEY'); const Trello_TOKEN = scriptProperties.getProperty('Trello_TOKEN'); const BOARD_ID = scriptProperties.getProperty('BOARD_ID'); const LIST_ID = scriptProperties.getProperty('LIST_ID'); var cards = getCards(Trello_KEY,Trello_TOKEN,LIST_ID); //カード情報取得 } /** * リストのカード一覧から必要な情報を配列として返す * @param {String} Trello_KEY TrelloのAPIキー * @param {String} Trello_TOKEN Trelloのトークン * @param {String} LIST_ID カードを取得するリストID * @return {String[]} メンバーIDと期限の配列 */ function getCards(Trello_KEY,Trello_TOKEN,LIST_ID) { var url = 'https://api.trello.com/1/lists/' + LIST_ID + '/cards'; url += '?key=' + Trello_KEY; url += '&token=' + Trello_TOKEN; url += '&fields=idMembers,due'; var response = UrlFetchApp.fetch(url); var json = JSON.parse(response.getContentText()); var cards = []; //カード情報を入れる配列の用意 //カードの数だけ繰り返す for (var i = 0 ; i < json.length; i++){ var idMembers = json[i].idMembers[0]; var due = json[i].due; var card = [idMembers,due]; cards.push(card); //配列に追加 } return cards; }
11行でgetCards関数を呼び出して、メンバーIDと期限の入った配列を取得しています。
getCards関数では、メンバーIDと期限の配列を返す必要がありますが、二つは返せないので、37行でメンバーIDと期限を対にした配列を作り、38行でその配列を別の配列に追加して、2次元配列を作成しています。
35行目のメンバーIDを取り出すところで、idMembers[0]となっているのはidMembersが配列となっている為です。
Trelloではメンバーを複数設定できるので、このような仕様になっています。
なお、本シリーズではメンバーには一人だけ設定されているものとしています。
また、関数として分けたので、ドキュメンテーションコメントも追加しました。
ドキュメンテーションコメントについては、下記コーディングルールをご覧下さい。
まとめ
今回は、Google Apps ScriptでTrelloのカードから必要な情報を取り出す方法をお伝えしました。
次回に向けて、カード情報を取得する部分を別関数にしましたが、こういうときにドキュメンテーションコメントを追加しておくと、再利用するときなど読み返す効率が上がります。
一手間加えることで、その後の開発に大きな差が出ますので、追加することをおすすめします!
さて、カード情報からメンバーIDはわかりましたが、これでは誰か判断できません。
次回はTrelloのメンバー情報から、メンバーのIDとメンバー名を取得する方法をお伝えします。
次回もよろしくお願いします。