Python Slack APIの使い方

Facebook にシェア
Pocket
LINEで送る
このエントリーを Google ブックマーク に追加

Slackについては manapiさん のあたりで。

[amazonjs asin=”4774173207″ locale=”JP” title=”Pythonエンジニア養成読本[いまどきの開発ノウハウ満載!] (Software Design plus)”]

Slackで用意されているAPIは豊富。
PythonのSDKも豊富に用意されている。

その中で今回はシンプルなSDKのように思えたSlacker を利用した。

 

Slack APIのTokenを取得する

ブラウザでSlackにアクセスした状態で ここの一番最後を見ると、「Create Token」ボタンがある。

スクリーンショット 2015-05-25 23.14.02

「Create Token」ボタンをクリックすることで、Tokenが発行されるので、控えておく。

スクリーンショット 2015-05-25 23.14.17

 

 

Slackerのインストール

pipでインストールする。

[shell title=”Slackerのインストール”] pip install slacker
[/shell]

 

 

以降のサンプルコードはこちら

 

Slackクラスを作る

次のようにSlackerクラスを定義するslack_bot.pyファイルを作成する。

[python title=”slack_bot.py”] # -*- coding: utf-8 -*-
from slacker import Slacker

class Slack(object):

__slacker = None

def __init__(self, token):
self.__slacker = Slacker(token)

# このソースを直接実行した場合のみ実行される。
if __name__ == "__main__":

slack = Slack("上で取得したToken")

[/python]

見ての通り、上のslack_bot.pyを実行しても何も起こらない。

 

Slackクラスをチャンネル一覧を取得できるようにする

SlackクラスにSlackチーム内のチャンネル一覧を取得する get_channel_listメソッドを実装する。

[python title=”slack_bot.py”] # -*- coding: utf-8 -*-
from slacker import Slacker

class Slack(object):

__slacker = None

def __init__(self, token):

self.__slacker = Slacker(token)

def get_channnel_list(self):
"""
Slackチーム内のチャンネルID、チャンネル名一覧を取得する。
"""

# bodyで取得することで、[{チャンネル1},{チャンネル2},…,]の形式で取得できる。
raw_data = self.__slacker.channels.list().body

result = [] for data in raw_data["channels"]:
result.append(dict(channel_id=data["id"], channel_name=data["name"]))

return result

if __name__ == "__main__":

slack = Slack("上で取得したToken")

print(slack.get_channnel_list())
[/python]

実行すると、チャンネル一覧が取得できることがわかる。

[shell title=”slack_bot.pyの実行結果”] # python slack_bot.py
[{‘channel_name’: ‘general’, ‘channel_id’: ‘C04KS0VMA’}, {‘channel_name’: ‘hatebu’, ‘channel_id’: ‘C04PH0TL1’}, {‘channel_name’: ‘random’, ‘channel_id’: ‘C04KS0VMC’}] [/shell]

 

Slackクラスの任意のチャンネルに投稿する

Slackクラスに、任意のチャンネルに投稿するpost_message_to_channelメソッドを実装する。

[python title=”slack_bot.py”] # -*- coding: utf-8 -*-
from slacker import Slacker

class Slack(object):

__slacker = None

def __init__(self, token):

self.__slacker = Slacker(token)

def get_channnel_list(self):
"""
Slackチーム内のチャンネルID、チャンネル名一覧を取得する。
"""

# bodyで取得することで、[{チャンネル1},{チャンネル2},…,]の形式で取得できる。
raw_data = self.__slacker.channels.list().body

result = [] for data in raw_data["channels"]:
result.append(dict(channel_id=data["id"], channel_name=data["name"]))

return result

def post_message_to_channel(self, channel, message):
"""
Slackチームの任意のチャンネルにメッセージを投稿する。
"""

channel_name = "#" + channel
self.__slacker.chat.post_message(channel_name, message)

if __name__ == "__main__":

slack = Slack("上で取得したToken")
slack.post_message_to_channel("general", "テストととととと")
[/python]

実行すると、指定したチャンネルに投稿される。

スクリーンショット 2015-05-26 0.13.56

 

後日、Bottleと組み合わせたツールの作り方をまとめる・・・?

Related posts

8 Thoughts to “Python Slack APIの使い方”

  1. 西遊記

    slack_bot.pyファイルはどこに作成すればよいのでしょうか

    1. umentu_blog

      実行したいディレクトリであれば、どこに作成しても良いかと思います。

      例えば。

      「/Users/saitenntaisei/Project/slack_bot.py」に設置したら、
      実行時に

      「python /Users/saitenntaisei/Project/slack_bot.py」

      とすれば実行できます。

      slackerライブラリはpipでインストールしているため、実行する分には特に
      slack_boy.pyを設置する場所を気にする必要はありません。

  2. 西遊記

    有難うございます 分かりました

  3. Tanaka

    あれ。テストとととととだけですか。上に2つのbotをどう作ればいいでしょうか。

    1. umentu_blog

      「上に2つのbot」とは、どのようなものでしょうか?

      slack.post_message_to_channel(“general”, “テストととととと”)
      という部分で投稿を行っています。

      “テストととととと”の部分を書き換えることで、好きなワードを投稿することができます。

      1. Tanaka

        hatenablogからニュースを送ったbotですよ。そのbotの作り方を教えていただけませんか。

  4. umentu_blog

    コメントが遅くなってしまい、すみません。
    hatenablogではなく、hatena bookmarkでしょうか?

    何をどうしたいのかを明確にしてコメントをいただければ、アドバイスできるかと思いますので、
    今一度何をしたいかをコメントに残していただけませんでしょうか?

  5. […] 実装の際にはチャンネルIDを取得するため、この記事にお世話になりました。 […]

コメントを残す