2016/03/07更新

[Python] ChatworkをAPI経由で利用する

このエントリーをはてなブックマークに追加      

こんにちは、@yoheiMuneです。
現在一部のコミュニケーションでChatworkを使っているのですが、Chatwork APIを使ってbotが喋るプログラムを書いたので、ブログでも紹介させていただきたいと思います。

画像


目次




Chatwork APIについて

ChatworkのAPI仕様については、以下に詳しくまとまっています。これらのAPIを用いることで、グループスレッドにメッセージを送信したり、また話しかけられた際に応答するといったことができるようになります。

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

現在のAPIは、APIトークンを用いた認証を行っていて、事前にAPIを利用するアカウントでAPIトークンを発行する必要があります。以下のページの手順を見ながらAPIトークンを入手してください。

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




Chatwork APIを利用する

ここからは上記で得たAPIキーを使って、ChatworkのAPIを利用してみたいと思います。


共通処理

以下でいくつかのAPI利用を紹介しますが、ここでは共通的な関数を作ってそれを利用する形にしたいと思います。
# APIのエンドポイント
ENDPOINT = "https://api.chatwork.com/v1"

# APIキー
apikey = "*** YOUR API KEY ***"

# ChatworkのAPIをコールする関数
# @params path(必須): APIのパス
# @params data(任意): 送信するデータ
def api (path, data=None):
    # 送信データがある場合にはURLエンコードする
    if data != None:
        data = urllib.parse.urlencode(data)
        data = data.encode('utf-8')
    # APIキーをヘッダーに付与する
    headers = {"X-ChatWorkToken": apikey}
    # リクエストの生成と送信
    req = urllib.request.Request(ENDPOINT + path, data=data, headers=headers)
    with urllib.request.urlopen(req) as res:
        # API結果
        result = json.loads(res.read().decode("utf-8"))
        # レスポンスヘッダ(残利用可能数などが入っている)
        info = dict(res.info())
        return (result, info)
このapi関数をコールすることで、様々なChatwork APIを呼び出すことができます。


つぶやく

http://developer.chatwork.com/ja/endpoint_rooms.html#POST-rooms-room_id-messages

もっともニーズがあるのは、ボットにビルド結果などをつぶやかせることではないでしょうか。API経由でつぶやく場合には、以下のように行います。
# つぶやく
roomid = "[つぶやきたい部屋のID]"
path = "/rooms/%s/messages" % roomid
data = {"body": "こんにちは、初めてのツイート!!!"}
result, info = api(path, data)
print(result)
# {
#   "message_id": 1234
# }

# 特定のユーザーにTOでつぶやく
roomid = "[つぶやきたい部屋のID]"
memberid = "[TOでつぶやきたいメンバーのID]"
path = "/rooms/%s/messages" % roomid
data = {"body": "[To:%s]こんにちは、初めてのツイート!!!" % memberid}
api(path, data)


自分の情報を取得する

http://developer.chatwork.com/ja/endpoint_my.html#GET-my-status

未読数やメンションされている数など、自分の情報を取得することができます。以下のような実装を行います。
# Get My Status.
mystatus, info = api("/my/status")
pprint(mystatus)
# """
# {
#   "unread_room_num": 2,
#   "mention_room_num": 1,
#   "mytask_room_num": 3,
#   "unread_num": 12,
#   "mention_num": 1,
#   "mytask_num": 8
# }
# """

# ヘッダー情報には、以下のようにAPIの残利用回数などの情報も含まれています。
pprint(info)
# """
# HTTP/1.1 200 OK
# Content-Type: application/json
# X-RateLimit-Limit: 100
# X-RateLimit-Remaining: 44
# X-RateLimit-Reset: 1390941626
# """


その他にも

他にもダイレクトメッセージ送信や、グループへの参加メンバー一覧取得など、様々な情報を取得することができます。本家Developerサイトでは、curlサンプル付きで説明がありますので、非常にわかりやすいです。ぜひ以下から色々と探してみてください。

- http://developer.chatwork.com/ja/endpoints.html



僕のChatworkAPIの利用シーン

このAPIをどのように使うかというと、以下のようなことで使っています(または使う予定です)。
  • 日次の数値報告(デイリー売上やユーザー数など)
  • 異常検知(新規登録者数が非常に少ない場合はアラートを出すなど)
  • ビルド処理結果の通知(失敗した場合にはログへのリンク付きで)
  • 話しかけたらサーバーを増やしてくれる
  • など
簡単な自然言語処理を入れれば、できることが無限大で楽しいですね。



最後に

今回はChatwork APIの使い方をブログに書きました。上述の様々なユースケースを満たすことができて非常に快適です。またChatworkのDeveloperページは、curlサンプルがあって非常にわかりやすくてありがたかったです。よき情報をありがとうございます。

本ブログでは、フロントエンド・Python・機械学習を中心に発信していきます。気になった方はぜひ、本ブログのRSSTwitterをフォローして頂けると幸いです ^ ^。

最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。