本記事はPython+SlackbotでファイルをSlackにアップロードする方法について紹介します。
Slackbotはコメントによる応答が可能ですが、コメントだけだと伝えづらく理解しにくい内容もあると思います。
また、コメントだけで伝えようとすると長い文章が必要となる場合も多いです。
SlackbotとPythonを活用すればファイルのアップロードができるので活用しましょう。
コメントだけでは伝えづらい内容についてもCSVファイルや画像としてアップロードすることで、柔軟な方で伝えることが可能です。
Slack上に長い説明を表示することも無くなります。
Pythonで作るSlackbotの基本については「SlackbotをPythonで作成しよう」をお読みください。
目次
Python+SlackAPIでファイルをアップロードする方法
Slackにファイルをアップロードするためには、SlackAPIを操作する必要があります。
SlackAPIを操作する方法はいくつかありますが、今回は「slackerライブラリ」を使用する方法と「requestライブラリ」を使用する方法を紹介します。
slackerライブラリの方が簡単なのでslackerライブラリで実装するのがおすすめです。
SlackAPIの公式ドキュメント>>files.upload
slackerライブラリでAPIを操作する方法
slackerライブラリを使う手順について説明します。
◆準備
まずはpipコマンドでslackerライブラリをインストールしましょう。
ライブラリに「slackbot」を指定すると「slackbot」ライブラリでだけでなく「slacker」などSlackbot作成に必要なライブラリが全てインストールされます。
slackerのみをインストールしたい場合はSlackerを指定します。
◆slackerでのアップロード方法
インスタンス生成にはAPIトークンを指定します。
最低限のオプションとして「channels」と「file_」を指定すればアップロード可能です。
slackerの使用例は以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from slacker import Slacker def main(): # APIトークンを指定 token = 'xxxxapi_token' # アップロードするチャンネルを指定 channel = 'channel' # 絶対パスを指定 file = '/home/user/xxx/sample.txt' slacker = Slacker(token) slacker.files.upload(file_=file, channels=channel) if __name__ == "__main__": main() |
関連記事>>Python+slackerでファイルをSlackにアップロードする
requestsライブラリでSlackAPIを操作する方法
Pythonでファイルをアップロードする基本的な方法です。slackerも内部的にはrequestsライブラリを使用しています。
標準ライブラリなのでpipインストールなしに使うことが可能です。
◆requestsの使い方
「token」、「channel」、「ファイル名」、「アップロード時のコメント」、「タイトル」の5つをオプションとして指定します。
slackerと比較すると指定方法が複雑です。
ファイルはパスを指定するのではなくopen()で開いたものを指定する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import requests def main(): token = 'xxxxapi_token' # アップロードするチャンネルを指定 channel = 'channel' # 絶対パスを指定 file = '/home/user/xxx/sample.txt' # ファイル名 filename = 'test' files = {'file': open(file, 'rb')} param = { 'token': token, 'channels': channel, 'filename': filename, # Botのメッセージ 'initial_comment': "test upload", # Slack上のタイトル 'title': "test_title" } requests.post(url="https://slack.com/api/files.upload", params=param, files=files) if __name__ == "__main__": main() |
Slackbotでファイルをアップロードする処理の実装方法
slackerを使用した場合の実装例について紹介します。
アップロード処理を@respond_to内に記述すればOKです。
1 2 3 4 5 6 7 8 9 10 11 12 13 | from slacker import Slacker from slackbot.bot import respond_to import slackbot_settings @respond_to('^ファイルアップロードテスト$') def todoist_today_list(message): slacker = Slacker(slackbot_settings.API_TOKEN) channel = 'channel' file = '/home/user/xxxxx/sample.txt' slacker.files.upload(file_=file, channels=channel) message.send('ファイルをアップロードしました') |
以上、SlackbotでSlackにファイルをアップロードする方法でした。
Slackbot+PythonまとめTOP>>Slackbotの作り方マニュアル〜Python編〜