54
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonでslack apiを使ってみた

Last updated at Posted at 2018-02-22

メモ程度にまとめます.
以下python3を用いた.

#目次

  1. 参考にしたサイト
  2. 環境
  3. 初期設定
  4. チャンネルリスト取得
  5. メッセージを送る
  6. 最後に

#参考にしたサイト

#環境

  • pyenv 3.6.3

#初期設定

python-slackclient
https://github.com/slackapi/python-slackclient

$ pip install slackclient

slack APIを使用するにはslackのトーケンが必要になってくる.

$ export SLACK_TOKEN='your token'

チャンネルリスト取得

slack APIを使ってメッセージやファイルを送るのにはIDが必要になってくるのでとりあえず初めにチャンネルIDを取得するためにチャンネルリストを返すプログラムを作った.

import os

from slackclient import SlackClient

slack_token = os.getenv("SLACK_TOKEN")
client = SlackClient(slack_token)

これでslack APIが使用できる環境ができた.
そこでチャンネルリストを返す関数を作って見た.

def channel_list(client):
    channels = client.api_call("channels.list")
    if channels['ok']:
        return channels['channels']
    else:
        return None

これでうまくいけばJSON形式で以下のようになる

[{'id':'channel id', 'name':'channel name', 'is_group':True, ...,}]

ただし上記はpublicチャンネルだけであるので、privateチャンネルのidを得るためにはchannels.listではなくgroups.listを使用するべき.

メッセージを送る

idを取得できたので早速メッセージを送る関数を作ってみた


def send_message(client, channel_id, message):
    client.api_call(
        "chat.postMessage",
        channel=channel_id,
        text=message

他にも色々条件をつけることができるらしいが、とりあえず一番簡単な形式がこれだと思う.
でも文章長すぎたりするとあれかなって思ったのでsnippetも試してみた.


def send_file(client, channel_id, content, title):
    client.api_call(
        "files.upload",
        channels=channel_id,
        content=content,
        title=title

デフォルトだとtextファイルになるらしいけど、filetypeでいじれるらしい.
あと、contentの代わりにfileを設定すればファイルをアップロードできるらしい.

最後に

一通りやってみたところ結構簡単で色々できるんだなって感じです.

54
51
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?