みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
引き続きGoogle Apps Scriptでチャットワークに自動でタスクを追加するプログラムについて研究しております。
前回はこちらの記事。
チャットワークにタスクを追加する最も簡単なパターンについてお伝えしました。
ですが前回追加されたタスク…
ちょっと寂しいですね。
そう、タスク期限がついていませんね。
期限がないといつまで経ってもやらなくなっちゃうこともありますから、ちゃんと期限を設定できるようにしておきたいものです。
ということで、今回はGoogle Apps Scriptでチャットワークに期限付きのタスクを追加する方法についてお伝えします。
前回のおさらい
前回は特定のアカウントIDに対して「ミルクを買う」というタスクを追加するスクリプトを作成しました。
作成したスクリプトはこちら。
function addTestTask() { var token = 'APIトークン'; //チャットワークAPIトークン var room_id = XXXXXXXX; //ルームID var params = { headers : {"X-ChatWorkToken" : token}, //APIトークン method : "post", payload : { body : "ミルクを買う", //タスクの内容 to_ids : XXXXXX //アカウントID } }; var url = "https://api.chatwork.com/v2/rooms/" + room_id + "/tasks"; UrlFetchApp.fetch(url, params); //チャットワークAPIにリクエスト }
HTTPメソッドは「post」で、パラメータpayload内の連想配列として、タスクの内容body、アカウントIDのto_idsを渡す形です。
リクエストURLは
でした。
チャットワークAPIに期限付きのタスクを追加するためのリクエスト
今回はタスクに期限をつけていきたいと思います。
タスク追加に関するリクエストについて、チャットワークAPIのドキュメントを再度確認してみましょう。
チャットに新しいタスクを追加
body(必須):タスクの内容
limit:タスクの期限(※Unix timeで入力してください)
to_ids(必須):担当者のアカウントID(※担当者のアカウントIDをカンマ区切りで)
タスクの期限はlimitというキーでpayload内に渡せばよいですね。
なお、limitのパラメータの型はIntegerになります。
ただ“Unix timeで入力してください”とありますが、どういう意味でしょうか?
UNIX時間とは何か?
UNIX時間とは
UNIX時間(ユニックスじかん)またはUNIX時刻(ユニックスじこく、UNIX time(ユニックスタイム)、POSIX time(ポジックスタイム))とはコンピューターシステム上での時刻表現の一種。UNIXエポック、すなわち協定世界時 (UTC) での1970年1月1日真夜中(午前0時0分0秒)の時刻からの形式的な経過秒数(すなわち、実質的な経過秒数から、その間に挿入された閏秒を引き、削除された閏秒を加えたもの)として表される。
引用:Wikipedia
ということです。んー、わかるようなわからないような…。
つまり、日時の表記の仕方の一つで、1970年からの蓄積された秒数ですから、とっても大きい数字になりそうですね。
getTimeメソッドでUNIX時間を取得する
Google Apps Script(というかJava Script)では、getTimeメソッドで簡単にUNIX時間を取得することができます。
書き方は
となります。
ただしgetTimeメソッドではミリ秒で取得するため、1000倍にして単位を秒に変換する必要があります。
以上を踏まえて作成したスクリプトがこちらです。
function addTestTask() { var token = 'APIトークン'; //チャットワークAPIトークン var room_id = XXXXXXXX; //ルームID var date = new Date(); //今日の日付 var limit = date.getTime()/1000; //秒単位のUNIX時間を取得 var params = { headers : {"X-ChatWorkToken" : token}, //APIトークン method : "post", payload : { body : "ミルクを買う", //タスクの内容 limit : limit, //タスクの期限 to_ids : XXXXXX //アカウントID } }; var url = "https://api.chatwork.com/v2/rooms/" + room_id + "/tasks"; UrlFetchApp.fetch(url, params); //チャットワークAPIにリクエスト }
しかしこれを実行すると
このようにエラーとなってしまいます。
どうやらlimtの値がintegerではないと言われているようですね…。
toFixedメソッドで指数表記を固定小数点表記に変換
前述のスクリプトでいうところの18行目、paramsへのパラメータ格納が終わったところにブレークポイントを設置してデバッグをしてみましょう。
ブレークポイントの設置は行数の箇所をクリックします。デバッグは虫マークのアイコンです。
するとpayload内のlimitの値が指数表記になっていますね。これが原因でエラーが出ていたというわけです。
数値を固定小数点表記に変換する場合はtoFixedメソッドを使います。
書き方はこちらです。
桁数には小数点以下の桁数を指定します。0または省略で小数点以下0桁、つまり整数表記になります。
7行目の後に以下の一行を追加します。
limit = limit.toFixed();
実行結果
そのうえでスクリプトを実行しますと
無事に期限付きのタスクが追加されました。
これをイベントトリガーで毎朝8時などに追加すれば、「牛乳を買う」というタスクがその日の期限で毎日追加されることになります。
まとめ
Google Apps Scriptでチャットワークに期限付きのタスクを追加する方法についてお伝えしました。
- UNIX時間の概要とgetTimeメソッドによる取得の方法
- toFixedメソッドによる数値の固定小数点表記への変更
などのテクニックを使いました。
次回はスプレッドシートにタスク内容とタイミングを指定おくことで、それぞれのタイミングでタスク追加する方法についてお伝えしたいと思います。
どうぞお楽しみに!