【Ruby】チャットワークAPIでメッセージとか取得するクラス作りました

クラウド型ビジネスチャットツール「チャットワーク」から、
メッセージを取得したり、メッセージを投稿したりできるAPIが公開されています。

http://developer.chatwork.com/ja/index.html

このAPIHTTPSリクエストを送信して、json形式のレスポンスを受け取ることで情報を取得できるのですが、
Rubyでそこらへんをやろうとするとちょっとめんどうだったので、誰が使っても使えるようにクラス化しました。

一応、下にあるクラスをコピーして「chatworkapi.rb」とかで保存してrequireすれば使えるはずです。。たぶん(笑)
使い方も下に。
まあ個人的に残しておきたってのが一番の理由だから、使うAPI用のメソッドしか定義してないんだよね。
拡張性はあるはずなので、使いたいAPIが定義されてない場合は簡単に拡張できるはず。

require 'net/https'
require 'json'
require 'uri'

class ChatworkAPI
    @@endpoint_base_uri = "https://api.chatwork.com/v1"
    def initialize(api_token)
        @api_token = api_token
    end

    # 自分自身の情報を返す
    def get_me
        endpoint_uri = "/me"
        me =  connection_chatwork(endpoint_uri)
    end

    # 自分の未読数、未読To数、未完了タスク数を返す
    def get_my_status
        endpoint_uri = "/my/status"
        my_status = connection_chatwork(endpoint_uri)
    end

    # チャットのメッセージ一覧(最新100件)を返す
    def get_room_messages(room_id, force)
        endpoint_uri = "/rooms/#{room_id}/messages?force=#{force}"
        messages = connection_chatwork(endpoint_uri)
    end

    # httpsリクエストからレスポンスを取得
    def connection_chatwork(endpoint_uri)
        uri = URI.parse("#{@@endpoint_base_uri}#{endpoint_uri}")
        https = get_https_no_ssl(uri)
        return get_response_body(https, get_get_request(uri))
    end

    # 証明証を検証しないhttpsインスタンスを取得
    def get_https_no_ssl(uri)
        https = Net::HTTP.new(uri.host, uri.port)
        https.use_ssl = true;
        https.verify_mode = OpenSSL::SSL::VERIFY_NONE
        return https
    end

    # GETリクエストインスタンスを取得
    def get_get_request(uri)
        req = Net::HTTP::Get.new(uri)
        req["X-ChatWorkToken"] = @api_token
        return req
    end

    # HTTPSレスポンスボディを取得
    def get_response_body(https, req)
        json = https.request(req)
        messages = JSON.parse(json.body)
        return messages
    end

end

使い方

require './chatworkapi'

# new引数にAPIトークンを指定
chatworkapi = ChatworkAPI.new("ここにAPIトークン")

me = chatworkapi.get_me
my_status = chatworkapi.get_my_status
room_message = chatworkapi.get_room_messages("room_idを指定, forceを指定")

基本的にはチャットワークAPIドキュメントのページを観てもらうと、何を取得してるのかわかると思う。
使う側としては、インスタンス生成時にAPIトークンだけ指定して貰えばあとは何もしなくても、
メソッド呼び出しで値が受け取れるはず。

APIトークンがなんなのかは、APIドキュメントのトップページにあるので参照。

get_room_messagesの引数のforceは0を指定すると未取得の先着100件のメッセージを取得します。1にすると未取得に関わらず先着100件取ってきます。

受け取った値はハッシュにしてあります。

chatworkapi = ChatworkAPI.new("APIトークン")
me = chatworkapi.get_my_status

これで取ったme変数には、

{"accont_id" => 123},
{"room_id" => 123},
{"name" => yasu}

Rubyのハッシュに変換して返しているので、ハッシュ指定で値をとれます。

name = me["name"] #=> yasu


メッセージ取得など、複数のデータが撮れる場合は、
ハッシュが配列の中に入っているので気をつけてください。
以上!