Python Slack APIの使い方

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

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

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でインストールする。

pip install slacker

 

 

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

 

Slackクラスを作る

次のようにSlackerクラスを定義する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")

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

 

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

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

# -*- 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 slack_bot.py
[{'channel_name': 'general', 'channel_id': 'C04KS0VMA'}, {'channel_name': 'hatebu', 'channel_id': 'C04PH0TL1'}, {'channel_name': 'random', 'channel_id': 'C04KS0VMC'}]

 

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

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

# -*- 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", "テストととととと")

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

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

 

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

Follow me!

Python Slack APIの使い方” に対して 7 件のコメントがあります

  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でしょうか?

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です