みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
前回チャットワークAPIの概要と簡単な使い方についてお伝えしました。
これから何回かの記事に分けて「おみくじチャット」を作るというのを目標にチャットワークAPIの使い方を勉強していきたいと思います。
今回はグループチャットのメッセージをGoogle Apps Scriptで取得するところまでをやってみます。
では、いってみましょう!
前回のおさらい:自分の情報を取得する
前回作成したスクリプトはこちらでした。
//ChatWorkから自分の情報を取得する function getMeData(){ var params = { headers : {"X-ChatWorkToken" : 'APIトークン'}, method : "get" }; var url = "https://api.chatwork.com/v2/me"; // var strRespons = UrlFetchApp.fetch(url, params); //チャットワークAPIエンドポイントからレスポンスを取得 var json = JSON.parse(strRespons.getContentText()); //文字列をJSON形式として解析しJSONオブジェクトとして返す Logger.log(json["chatwork_id"]); Logger.log(json["organization_name"]); Logger.log(json["name"]); Logger.log(json["url"]); }
- UrlFetchApp.fetchメソッドでリクエストURLとパラメータ(APIトークンとメソッド)を投げる
- JSON.parseメソッドでレスポンスをjsonに格納
- jsonから特定のデータを抽出してログ出力
といった流れです。
チャットワークAPIを使う場合は1,2の流れは基本的に一緒です。
おみくじチャットの概要
今回はおみくじチャットを作っていきます。
まず「おみくじ」という名前のグループチャットを用意し
- メンバーがメッセージを送信
- メッセージが「おみくじ」であれば
- そのメンバー宛に「大吉、中吉、小吉、吉、末吉、凶」のいずれかが返信
という動きをするシステムを作ってみます。
特定のグループチャットのメッセージを取得する
まず機能として、特定のグループチャットのメッセージを取得する必要があります。
チャットワークAPIのドキュメントによるとメッセージの取得については
チャットのメッセージ一覧を取得。パラメータ未指定だと前回取得分からの差分のみを返します。(最大100件まで取得)
force:1を指定すると未取得にかかわらず最新の100件を取得します(デフォルトは0)
とあります。メソッドは「get」のままでOKですね。
リクエストURLは
です。
ルームIDは各グループチャットのURL
で知ることができます。8桁の数字からなる文字列です。
forceパラメータですが、一度取得したメッセージは再度取得する必要がありませんので0にします。
詳しくはチャットワークAPIドキュメントをどうぞ。
メッセージ一覧のレスポンス
上記リクエストURLを投げて受け取るレスポンスは以下になります。
[ { "message_id": 5, "account": { "account_id": 123, "name": "Bob", "avatar_image_url": "https://example.com/ico_avatar.png" }, "body": "Hello Chatwork!", "send_time": 1384242850, "update_time": 0 } ]
一番外側に角括弧「[]」があります。メッセージは一回のリクエストで最大100のメッセージがレスポンスに含まれるので、最大であれば[0]~[99]までの配列になります。
その一つ内側の波括弧「{}」がメッセージごとに格納されているという形です。
例えば、配列番号3のbodyと配列番号10のnameを取得したければ
json[3]["body"] json[10]["acount"]["name"]
または
json[3].body json[10].acount.name
とします。
チャットワークからメッセージを取得するスクリプト
ではチャットワークからメッセージを取得するスクリプトを作成してみましょう。
こちらです。
function getOmikuji(){ var params = { headers : {"X-ChatWorkToken" : 'APIトークン'}, method : "get" }; var roomID = XXXXXXXX; //ルームID var url = "https://api.chatwork.com/v2/rooms/" + roomID + "/messages?force=0"; //指定のグループチャットからメッセージを取得 var strRespons = UrlFetchApp.fetch(url, params); //チャットワークAPIエンドポイントからレスポンスを取得 var json = JSON.parse(strRespons.getContentText()); //文字列をJSON形式として解析しJSONオブジェクトとして返す for each(var obj in json){ Logger.log(obj.body); } }
12行目のfor each~ですが、jsonに含まれる配列要素全てについて繰り返すという書き方です。for~で
[js]
for(var i=0;i<json.length;i++){
// 処理
}
[/js]
とするものと同じ処理になります。for each~のほうがシンプルで直観的な書き方ができますね。
チャットワークで投稿してスクリプトを実行
まずチャットワークにはこのように投稿してみました。これからの意気込みを伝えています。
その後、先ほどのスクリプトを実行してみます。
無事にメッセージ内容がログ出力されました。
まとめ
チャットワークAPIを使って、Google Apps Scriptにメッセージを取得する方法をお伝えしました。
これから、おみくじチャットを作っていきますので
- メッセージが「おみくじ」かどうかを判定する
- おみくじの結果をランダムで生成する
- おみくじの結果を文字列として成形してチャットワークへ送信する
といった処理が必要になります。
次回は、Google Apps Scriptでおみくじ部分の処理を作っていきます。
どうぞお楽しみに!