[Python] ChatworkをAPI経由で利用する
こんにちは、@yoheiMuneです。
現在一部のコミュニケーションでChatworkを使っているのですが、Chatwork APIを使ってbotが喋るプログラムを書いたので、ブログでも紹介させていただきたいと思います。
- http://developer.chatwork.com/ja/index.html
現在のAPIは、APIトークンを用いた認証を行っていて、事前にAPIを利用するアカウントでAPIトークンを発行する必要があります。以下のページの手順を見ながらAPIトークンを入手してください。

- http://developer.chatwork.com/ja/endpoints.html
本ブログでは、フロントエンド・Python・機械学習を中心に発信していきます。気になった方はぜひ、本ブログのRSSやTwitterをフォローして頂けると幸いです ^ ^。
最後までご覧頂きましてありがとうございました!
現在一部のコミュニケーションで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・機械学習を中心に発信していきます。気になった方はぜひ、本ブログのRSSやTwitterをフォローして頂けると幸いです ^ ^。
最後までご覧頂きましてありがとうございました!






