Pythonでslack-sdkを用いてSlackにファイルを送信する

スポンサーリンク

Pythonでslack-sdkを用いてSlackにファイルを送信してみます。

今回はslack-sdkを用います。このライブラリは、Pythonの標準ライブラリではありませんので、事前にインストールする必要があります。また、Slack APIを呼び出す場合には、OAuthトークンが必要となりますので、事前に取得しておく必要があります。

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)

■OAuthと権限の確認をする

slack-sdkを用いてSlackにファイルを送信してみますが、その前にOAuthと権限の確認をします。確認を行うために、「Slack API | Slack(https://api.slack.com/)」に取得したアカウント情報でログインし、「Your Apps – Slack API(https://api.slack.com/apps)」に移動し、作成したアプリを選択すると、作成したアプリの「Basic Information」が表示されます。表示後、左メニューから「Features」の「OAuth & Permissions」に移動します。

移動後、「OAuth & Permissions」の「Scopes」を確認すると、今回は「Bot Token Scopes」と「User Token Scopes」の2つの「OAuth Scope」が「chat:write」と設定されています。このままの状態では、ファイルを送信することができないので、スコープの変更を行います。

変更するために、「Add an OAuth Scope」ボタンをクリックします。

クリックすると、プルダウンメニューが表示されますので、この中から「files:write」を選択します。

選択すると、現段階では「Bot Token Scopes」の「OAuth Scope」に「files:write」が選択された状態となります。次に「User Token Scopes」の方も同じように変更します。「You’ve changed the permission scopes your app uses. Please reinstall your app for these changes to take effect (and if your app is listed in the Slack App Directory, you’ll need to resubmit it as well).(アプリが使用する権限スコープを変更しました。この変更を有効にするには、アプリを再インストールしてください(アプリがSlack App Directoryに掲載されている場合は、再投稿も必要です)。)」と表示されていますが、再インストールはあとで行うので、今は一旦無視します。

変更後、確認を行います。

変更後、「OAuth & Permissions」の「OAuth Tokens for Your Workspace」の「Reinstall to Workspace」ボタンをクリックします。

クリックすると、「***(アプリ名) が *** Slack ワークスペースにアクセスする権限をリクエストしています」と表示されたページに移動します。ページ内の「チャンネルと会話でアクションを実行する」を確認すると「***としてファイルをアップロード、編集、削除する」という項目が追加されていますので、この権限を許可するために「許可する」ボタンをクリックします。

クリックすると権限が与えられ、許可が成功します。これでOAuthと権限の変更と確認は完了です。

■送信するファイルを用意する

OAuthと権限の変更と確認後、送信するファイルを用意します。

今回用意したのはGoogleスプレッドシートで作成した上記のデータです。このデータを上部メニューの「ファイル」から「ダウンロード」をクリックします。さらに「カンマ区切り形式(.csv)」をクリックします。クリックすると、Webブラウザで指定された保存場所に「.csv」形式のデータが保存されます。

保存されたデータを「data_test.csv」と名前変更し、わかりやすいように「C:\Users\user_\test(フォルダパス)」に移動させます。

■slack-sdkを用いてSlackにファイルを送信する

移動後、slack-sdkを用いてSlackにファイルを送信するスクリプトを書いていきます。

■コード

import os
from slack_sdk import WebClient

def file_upload():
    client = WebClient(token=os.environ['SLACK_BOT_TOKEN'])
    filepath= r"C:\Users\user_\test\data_test.csv"
    response = client.files_upload(channels='#テスト投稿', file=filepath)
    return print(response)

if __name__ == "__main__":
    file_upload()

「import」でPythonの標準ライブラリであるosモジュールを呼び出します。その後、「from import」でslack_sdkのWebClientを呼び出します。

その後、def文を用いて、file_upload()という関数を定義します。定義した関数が呼び出された時に実行される処理としては、clientという変数を定義し、その中でWebClient()を用います。括弧内には、引数,パラメータを渡します。この時にosモジュールを用いてOAuthトークンを環境変数として渡す。なお、今回は「User OAuth Token」を用います。これでファイルを送信することができるようになります。

token = 'xoxb-***-***-****'

ちなみに上記のように変数を定義して、OAuthトークンを渡す方法は推奨されていません。

ファイルの送信をできるようにした後は、filepathという変数を定義し、その中に今回用意したファイルの名前と場所を格納します。格納後、responseという変数を定義し、その中でfiles_upload()を用います。括弧内には、第1の引数,パラメータ(channels=)としてファイルを送信するチャンネルを渡します。今回は事前に作成しておいた「#テスト投稿」を引数,パラメータとして渡します。なお、引数,パラメータが「channels=」となっていますが「channel=」で渡してしまうと、ファイルの送信がうまくいきませんのでご注意ください。次に第2の引数,パラメータとして送信するファイルを渡します。今回はfilepath変数を渡します。これでファイルが送信されます。最後にreturnとしてresponseを返します。返されたresponseの情報をprint()で出力される処理となります。

最後に「if __name__ == “__main__”:」を用い、files_upload()を呼び出します。

■実行・検証

このスクリプトを「sla_file_upload_test.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

実行してみると、上記のメッセージが出力されます。

出力後、Slackを確認すると、指定したチャンネルに指定したファイルが送信されていることが確認できました。なお、送信されたファイルを「ダウンロード」することもできました。

コメント

タイトルとURLをコピーしました