mcommit's message

大阪でソフトウェア開発の仕事をしている simotinといいます。記事の内容でご質問やご意見がありましたらお気軽にコメントしてください\^o^/

ChatWork APIをRubyで呼び出してみた

タイトルの通り、ChatworkAPIをRubyから呼び出して遊んでみました。

APIを使ってみた理由

そもそもなぜAPIを使ってみたかというと、仕事でチャットワークを使っていると定期的な報告やアナウンス的な連絡などを自動化したいと思うことがあったからです。

この記事を書いている2015年12月25日時点ではChatWorkAPIはプレビュー版ということでAPIを呼び出すには利用申請が必要になります。
私の場合は申込みをしてから数日くらいで申請が受理されましたみたいなメールが届きました。※申込みしたのはだいぶ前ですが。。。

APIの利用ができるようになるとチャットワークの動作設定画面でAPIトークンを発行してもらえるようになります。
APIトークンが流出して不正に利用されると問題になるので取扱いには注意した方がよさそう。


発行してもらったAPIトークンの使い方ですが、各APIを呼び出す際にリクエストヘッダに、

X-ChatWorkToken:APIトークン

を追加することで認証されるそうです。

APIの使い方

APIの使用についてはGithubのRAMLを読んでねということのようです。
RAMLフォーマットについてはよく知りませんでしたが、WebAPIの仕様は大体どのサービスも大きな違いはないので雰囲気で何をしないといけないかはつかめました。具体的な使い方については↓こちらのページに具体的に説明が書かれています。
developer.chatwork.com
curlコマンドを使った例があるのが分かりやすいですね。ちなみにレスポンスはJSONフォーマットです。

やりたかったこと

私がやりたかったのはあるチャットにAPI経由でメッセージを投稿するということでしたが、チャットにメッセージを投稿するには、まず投稿したいチャット(API上ではroomと定義されている)のIDを知る必要があります。

チャットの情報は、
https://api.chatwork.com/v1/rooms
を呼び出すことでチャットの情報の一覧が取得できます。

とりあえずテスト目的で「マイチャット」のIDを探して、投稿したコードはこんな感じです。

require 'net/https'
require 'json'

uri = URI.parse('https://api.chatwork.com')
client = Net::HTTP.new(uri.host, 443)
client.use_ssl = true

# チャットの情報一覧を取得してお目当てのroomIDを探す
res = client.get('/v1/rooms', {'X-ChatWorkToken' => 'APIトークン'})
puts JSON.parse(res.body)

# roomIDを指定してメッセージを投稿
res = client.post('/v1/rooms/ルームID/messages', 'body=こんにちわ!', {'X-ChatWorkToken' => 'APIトークン'})

# 正常に投稿されるとメッセージIDが返る
puts JSON.parse(res.body)

感想

チャットワークをAPIから利用できると、業務の自動化ができて便利になりそうです。
仕事としては、Excelで管理しているデータを集計して、定期的にチャットに挙げるという毎日の単純作業を自動化したかったのですが、結構簡単に実現できそうです。

やはりAPIがあると便利ですね(APIを使いすぎるとチャットワークの良さが薄れていく気もしますが)

追記

ルームIDはAPIで取得しなくてもチャットを開いたと時にURLに#!rid123456みたいな感じで表示される数字がルームIDになるみたいですね。