Pythonを使ってChatWorkに発言してみた

2016.05.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

サーモン大好き横山です。

今回はPythonを使って、ChatWorkに発言する所まで紹介したいと思います。

はじめに

実はドキュメントを見ると、 curl コマンドを使って発言する方法が書いてあります。
「ならShellの方がいいじゃん!」って思いますが、複雑な処理と一緒にセットとした場合、Pythonを使って書いたほうが何かと便利です。
(※個人の感想です)

準備

ChatWork側編

プログラムからChatWorkの部屋に書き込む上で必要な情報は以下の3つあります。

  • APIKEY
  • ENDPOINT
  • ROOMID

APIKEY

ChatWorkドキュメントページの言葉をそのままお借りして説明しますと。

チャットワークにログインし「動作設定」から「API発行」タブを選択し、開発用のAPIトークンを取得してください。 APIトークンは使用することでチャットワークの利用データを自由に閲覧、編集、操作できるため、第三者に開示しないよう取り扱いには十分ご注意ください。

APIトークンは再発行できますので、もし不正利用の可能性がある場合は再発行を実行してください。再発行を実行した場合は、以前のAPIトークンはすべて無効となります。

post_chatwork_using_python_01

ChatWork APIドキュメント - 認証方法

ただし、ユーザの権限によってはAPIの発行が出来ないことも有りますので、その場合はChatWorkを管理している人にAPIKEYを発行してもらいましょう。

ENDPOINT

ChatWorkドキュメントページの言葉をそのままお借りして説明しますと。

チャットワークAPIはRESTの原則に基づいてAPI設計されています。RESTではチャット、タスクといったそれぞれのリソースに対して固有の一意なURIが与えられており(エンドポイントと呼ぶ)、そのエンドポイントに対してGETやPOST、PUT、DELETEといったHTTPメソッドでパラメータを送ることで投稿や削除などリソースの操作を行います。

エンドポイントのベースURIは、https://api.chatwork.com/v1 となっています。このあとに、各エンドポイントのパスを記述してください。(例:/me の場合は https://api.chatwork.com/v1/me)

今後、APIのバージョンが上がった場合は/v1のバージョン部分が変更され、旧バージョンのAPIは一定の移行期間の間維持されます。

ChatWork API ドキュメント - エンドポイント

とどのつまり、リクエストURL先のことです。今後ChatWork側でバージョンアップするかもしれませんが、2016年5月10日現在 https://api.chatwork.com/v1 を指定しておけば間違いないです。

追記 (2017/05/23時点)

2017/01/26 - チャットワークAPIバージョンアップのお知らせ より 2017年05月15日 をもちまして、 https://api.chatwork.com/v1 のエンドポイントが使用できなくなりました。

それに伴い今後は、https://api.chatwork.com/v2 のエンドポイントをご活用ください。

ROOMID

ChatWorkで会話してる部屋のIDです。 ルームIDの調べ方は、ブラウザのURLの末尾の部分にある「rid」以降の数字の部分です。

post_chatwork_using_python_02

Python側編

今回の準備は、requestsだけ用意します。
virtualenvの準備は過去記事を参考にしてください。→ virtualenvを使っていろいろなライブラリを手軽にためそう

$ mkdir -p /tmp/work/
$ cd /tmp/work
$ virtualenv -p `which python2.7` venv
$ . venv/bin/activate
(venv)$ pip install -U pip #pipのアップデート
(venv)$ pip install requests #requestsのインストール

コード

今回はこちら

今回は、 POSTメソッドの /rooms/{room_id}/messages を利用して発言するサンプルが以下になります。

リクエストヘッダーにAPIKEYを仕込み、リクエストURLに先ほど説明した、ENDPOINTとROOMIDを指定し、paramsに発言したいbodyの内容を書き込んで実行すれば実行出来ます。

#!/usr/bin/env python
# -*- encoding: utf-8 -*-

from __future__ import print_function, unicode_literals
import requests
import pprint

APIKEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
ENDPOINT = 'https://api.chatwork.com/v1'
ROOMID = '27xxxxxx'

post_message_url = '{}/rooms/{}/messages'.format(ENDPOINT, ROOMID)

headers = { 'X-ChatWorkToken': APIKEY }
params = { 'body': '今日も一日がんばるめそ' }

resp = requests.post(post_message_url,
                     headers=headers,
                     params=params)

pprint.pprint(resp.content)

実行結果

今回はくらめそちゃんに発言してもらいました。

$ python post_cw.py
'{"message_id":1197655778}'

post_chatwork_using_python_03

まとめ

いかがだったでしょうか?
ChatWorkへの発言も意外と簡単に出来ました。

ChatWorkで何か通知したいとかの用途の参考になれば幸いです。