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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Trello

Trelloは、無料のタスク管理ツール。タスクを1枚のカードとし、各進捗エリアごとで管理することができます。個人の利用や、複数人での共同作業を直感的且つ容易に行うことが可能です。PCはWebブラウザで、スマホはiPhoneとAndroidでそれぞれアプリが提供されています。

Q&A

解決済

1回答

589閲覧

trelloAPIを用いたカード情報取得後の変数の整形について

takuto-biginner

総合スコア5

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Trello

Trelloは、無料のタスク管理ツール。タスクを1枚のカードとし、各進捗エリアごとで管理することができます。個人の利用や、複数人での共同作業を直感的且つ容易に行うことが可能です。PCはWebブラウザで、スマホはiPhoneとAndroidでそれぞれアプリが提供されています。

0グッド

1クリップ

投稿2019/08/30 17:48

前提・実現したいこと

trelloでタスク管理をしているのですが、毎日自分でチェックするのが面倒なのでGASを利用して
trelloのAPIとslackのwebhookを用いtrelloのリストごとに残タスクをslackに自動で
投げてくれるようなツールを作りたいです。

発生している問題・エラーメッセージ

trelloのAPIを使用してカードの名前とIDを取得することはできたのですが、
それを上手く整形できずに困っています。

エラーメッセージとは少し違うのですが、slack上で

ボット名  Array  Array

と表示されてしまいます。

該当のソースコード

GAS

1function main(){ 2 getCardsFromList("hogehoge")//todoリスト 3} 4 5function getCardsFromList(listID){ 6 var DEV_API_KEY = "API_KEY"; 7 var API_TOKEN = "API_TOKEN"; 8 var url = 'https://api.trello.com/1/lists/' + listID + '/cards?key=' + DEV_API_KEY + '&token=' + API_TOKEN + '&fields=name'; 9 10 try { 11 var response = UrlFetchApp.fetch(url, {'method':'get'}); // GETリクエスト 12 var message = "response"; 13 slack(message); 14 } catch (er) { //エラー発生寺にログを記録 15 var logText = "エラー : line - " + er.lineNumber + '\n Error: ' + er.message; 16 addLog(logText);//スプレッドシートにエラーメッセージ記入 17 } 18} 19function slack(message) { 20 var postUrl = 'https://hooks.slack.com/services/hogehoge'; 21 var username = 'botbot'; // 通知時に表示されるユーザー名 22 var icon = ':hatching_chick:'; // 通知時に表示されるアイコン 23 var jsonData = 24 { 25 "username" : username, 26 "icon_emoji": icon, 27 "text" : message 28 }; 29 var payload = JSON.stringify(jsonData); 30 31 var options = 32 { 33 "method" : "post", 34 "contentType" : "application/json", 35 "payload" : payload 36 }; 37 38 UrlFetchApp.fetch(postUrl, options); 39}

試したこと

今回の問題はtrelloAPIから取得したresponseの型を整形できていないことから起きているのだと考え

var a = response.toString slack(a)

を試しましたが、エラーが飛んでしまいました。以下がそのエラーメッセージです。

Error: https://hooks.slack.com のリクエストに失敗しました(エラー: 400)。 サーバー応答の一部: missing_text_or_fallback_or_attachments (応答の全文を見るには muteHttpExceptions オプションを使用してください)

補足情報(FW/ツールのバージョンなど)

今年初めてPCを買い、プログラミング経験は3ヶ月で、メインはJavaを勉強してきました。
JSでの型の確認方法など調べたもののわからず、教えていただけると幸いです。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/08/31 15:35

> trelloのAPIを使用してカードの名前とIDを取得することはできたのですが、 > それを上手く整形できずに困っています。 取得できた内容を記載し、どのように整形したいのかを書いて下さい。
takuto-biginner

2019/09/02 05:10 編集

質問ありがとうございます。 function addLog(text) { var spreadsheetId = "hogehoge"; var sheetName = "シート1"; var spreadsheet = SpreadsheetApp.openById(spreadsheetId); var sheet = spreadsheet.getSheetByName(sheetName); sheet.appendRow([new Date()/*タイムスタンプ*/,text]); } を用いてスプレッドシートに記載すると [{"id":"hogehoge","name":"hogehgoe"}] のように出力されています。 これをslackに飛ばせるように整形したいです。 おそらくstringに直せば良いと思うのですが、、、
guest

回答1

0

ベストアンサー

response に Array がはいっているようなので、????のような感じでいかがでしょうか。
message には String を入れないといけないので、 card を一つずつ String にする必要がありそうです。

js

1function getCardsFromList(listID){ 2 var DEV_API_KEY = "API_KEY"; 3 var API_TOKEN = "API_TOKEN"; 4 var url = 'https://api.trello.com/1/lists/' + listID + '/cards?key=' + DEV_API_KEY + '&token=' + API_TOKEN + '&fields=name'; 5 6 try { 7 var response = UrlFetchApp.fetch(url, {'method':'get'}); // GETリクエスト 8 // var message = "response"; 9 // slack(message); // 誤 そもそもこれだと "response" が送信される? 10 // 追記 11 var jsonArray = JSON.parse(response.getContentText()); 12 jsonArray.forEach(function(card) { // CardのArrayなので一つずつ 13 var message = "name:" + card.name + "\nclosed:" + card.closed; 14 slack(message); 15 }); 16 } catch (er) { //エラー発生寺にログを記録 17 var logText = "エラー : line - " + er.lineNumber + '\n Error: ' + er.message; 18 addLog(logText);//スプレッドシートにエラーメッセージ記入 19 } 20}

投稿2019/09/01 20:29

編集2019/09/02 05:28
unhappychoice

総合スコア1531

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

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

takuto-biginner

2019/09/02 05:12

ありがとうございます。 いただいたコードで実行したところ "エラー : line - 80 Error: オブジェクト [{""id"":""hogehoge"",""name"":""hogehoge""}] で関数 forEach が見つかりません。" とエラーが出てしまします。。 trello APIで取得したデータは、ArrayListだと認識していたのですが、違うのでしょうか。。。?
takuto-biginner

2019/09/02 06:07

ありがとうございます! jsonデータに変形することで上手くいきました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問