こんにちは。
タダケン(@tadaken3)です。
Pythonでチャットワークにメッセージを送る方法をご紹介します。
本ブログでは、Google Apps Scirptでチャットワークにメッセージを送る方法を何度かご紹介していますが、Pythonでチャットワークにメッセージを送る方法も仕組みとしては同じです。
チャットワークが提供しているWEB APIに所定の方法でアクセスすることで、Pythonからチャットワークにメッセージが送れます。
Requestsモジュールをインストールする
APIにアクセスするにはRequestsモジュールを使用します。
Requestsモジュールはpipでインストールできます。
コマンドプロンプトを立ち上げて、以下のコマンドを実行するとインストールが開始されます。
pip install requests
API KeyとRoom IDをセットする
チャットワークにメッセージを送るには、メッセージ本文とは他に以下の2つの情報が必要です。
–通知を送るルームを指定するためのルームID
–チャットワークの認証するAPIのアクセストークン
チャットワークのAPIを取得する方法はこちらの記事です。
ルームIDの取得方法はこちらにまとまっています。わからない方はぜひご覧になってみてください。
チャットワークのAPIではヘッダーにAPIキー、URLにルームIDを指定します。
Pythonのコードは以下のようになります。
#coding=UTF-8
import requests
BASE_URL = 'https://api.chatwork.com/v2'
#Setting
roomid = 'YOUR ROOM ID' #ルームIDを記載
message = 'にゃんぱすー'
apikey = 'Your API KEY' #APIのKeyを記載
post_message_url = '{}/rooms/{}/messages'.format(BASE_URL, roomid)
headers = { 'X-ChatWorkToken': apikey}
params = { 'body': message }
formatメソッドを使って、ルームIDを付与したURLを生成しています。APIキーはディクショナリ形式でヘッダーに、メッセージ本体はパラメターとして設定します。
実際にPythonからメッセージを送ってみる
requestsモジュールでPOSTメソッドを実行するには以下のように書きます。
今回はヘッダーとパラメーターをオプションで指定します。
#coding=UTF-8
import requests
BASE_URL = 'https://api.chatwork.com/v2'
#Setting
roomid = 'YOUR ROOM ID' #ルームIDを記載
message = 'にゃんぱすー'
apikey = 'Your API KEY' #APIのKeyを記載
post_message_url = '{}/rooms/{}/messages'.format(BASE_URL, roomid)
headers = { 'X-ChatWorkToken': apikey}
params = { 'body': message }
r = requests.post(post_message_url,
headers=headers,
params=params)
print(r)
ステータスコードが200が返ってきていれば成功です。ステータスコードは、Webサーバからのレスポンスの意味を表しています。
まとめ
今回はRequestsモジュールを使って、チャットワークにメッセージを送る方法をご紹介しました。
RequestsはWEB APIを利用する際によく使われるモジュールなので、使い方を覚えると応用範囲が広がります。
次回もPythonに関するテクニックをご紹介していきますね。
どうぞ、お楽しみに!
日々、仕事効率化やプログラミングに関することをツイートしています。よろしければ、こちらからTwitterアカウントのフォローをお願い致します。
コメント
この方法だと、本文がURLのクエリパラメータとしてエンコードされてしまいます。
すると、長い文章を送ろうとしたときに、414 Request URI too longになり、投稿できません。
またURLのクエリパラメータに本文をエンコードするのはセキュリティ的にも不安があります。
そこで、
r = requests.post(post_message_url,
headers=headers,
params=params)
ではなく、
r = requests.post(post_message_url,
headers=headers,
data=params) # 訂正
とすれば、リクエストのボディ部分に本文がエンコードされ、長い文章も送れますし、セキュリティ的にも安心なのではないか、と思います。
淡中圏さん
アドバイスありがとうございます!
確かに…検証しつつ、必要に応じて記事内容を変更させていただきます。
今後とも、弊ブログをどうぞよろしくお願いいたします。