みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Google Apps Scriptを活用してチャットワークにおみくじチャットを作成しています。
前回はチャットワークのメッセージ記法を使って、Toや返信をつけておみくじの結果を返す方法をお伝えしました。
さて、先日こちらの記事でも書いた通り「リーダブルコード」を読みました。
読みやすいコードはすっごい重要だよ、なんて言っているくせに、前回作ったおみくじチャットのコード…ちょっとというかだいぶ読みづらいですね。
チャットワークAPIのやり取りは汎用的な機能となる場合が多いので関数化をしておくと、別のときに使いやすいということですね。
今回は
- チャットワークからメッセージを取り出す
- チャットワークへメッセージを送る
という機能をそれぞれ関数化をして全体のコードをスッキリさせていきたいと思います。
チャットワークにメッセージを取りに行く関数
まず、チャットワークからメッセージを取得する関数を作っていきます。
チャットワークAPIの仕様では
チャットのメッセージ一覧を取得。パラメータ未指定だと前回取得分からの差分のみを返します。(最大100件まで取得)
force:1を指定すると未取得にかかわらず最新の100件を取得します(デフォルトは0)
です。
HTTPメソッドはGETです。
ちなみにチャットワークAPI共通ですが、HTTPヘッダに “X-ChatWorkToken”というパラメータにAPIトークンを渡す必要がありましたね。
リクエストURLは
ですから、追加で必要なパラメータはルームIDですね。
したがって、
- 引数 token:APIトークン, room_id:ルームID
- 返り値 json:レスポンスをJSON解析した配列
にて、関数fetchMessaageを作ればOKです。
チャットワークからメッセージを取得するfetchMessage関数
関数fetchMessageのコードはこちらです。
/* チャットワークからメッセージ取得 */ function fetchMessage(token,room_id){ var params = { headers : {"X-ChatWorkToken" : token}, method : "get" }; var url = "https://api.chatwork.com/v2/rooms/" + room_id + "/messages?force=0"; var response = UrlFetchApp.fetch(url, params); if(response.getContentText()){ return JSON.parse(response.getContentText()); }else{ return ''; } }
チャットワークにメッセージを送る関数
同様にチャットワークにメッセージを送る関数を作っていきます。
チャットワークAPIの仕様は
チャットに新しいメッセージを追加
body:メッセージ本文
ですから、こちらでは、APIトークン、room_idとともにbodyつまりメッセージ本文がパラメータとして必要です。
HTTPメソッドはPOSTですね。
リクエストURLは
となります。
したがって作成する関数としては
- 引数 token:APIトークン, room_id:ルームID, body:メッセージ本文
- 返り値 なし
にて、関数sendMessaageを作ればOKです。
APIトークンとルームIDは毎回引数として渡さなくてもよいようにできればなのですが…また別の機会にですね。
チャットワークにメッセージを送るsendMessage関数
関数sendMessageのコードはこちらです。
/* チャットワークにメッセージを送る */ function sendMessage(token,room_id,body){ var params = { headers : {"X-ChatWorkToken" : token}, method : "post", payload : { body : body } }; var url = "https://api.chatwork.com/v2/rooms/" + room_id + "/messages"; UrlFetchApp.fetch(url, params); }
おみくじチャットのスクリプト
では上記二つの関数を使って、おみくじチャットのスクリプトを直していきます。
function getOmikuji(){ var token = 'APIトークン'; //チャットワークAPIトークン var room_id = XXXXXXXX; //ルームID var json = fetchMessage(token,room_id); /* json内に「おみくじ」メッセージがあればチャットワークに送信 */ for each(var obj in json){ if(obj.body === "おみくじ"){ var body = "[rp aid=" + obj.account.account_id + " to=" + room_id + "-" + obj.message_id + "] " + obj.account.name + "さん[info]おみくじの結果:" + generateOmikuji() + "[/info]"; //チャットワークに送るテキスト sendMessage(token,room_id,body); } } }
だいぶスッキリしましたね!
行数でいうと前回のスクリプト本体は31行ありましたので、9行削減しつつ、見やすいコードにすることができました。
まとめ
これまで何回かにわたってチャットワークAPIそしてGoogle Apps Scriptを使ったおみくじチャットの作り方についてお伝えしてきました。
これをベースにしまして、チャットワークをインターフェースとして様々なツールやシステムを開発していくことができます。
それに際して、汎用的なコードを意識していくことで、未来への貴重な財産になっていきますので、皆さんも意識して頂ければと思います。
またチャットワークAPIを活用して、ステキなアイデア実現していきたいと思いますので、ぜひ楽しみにしていてくださいね。