この記事では、Slackの特定のチャンネルに画像を投稿するシンプルなPythonスクリプトを作成するための基礎知識を共有します。
この記事で利用しているスクリプトで、以下の記事で利用している Google Photos へアップロードするスクリプトを置き換えると、Slack へ撮影した画像を定期的に投稿する簡易 Network カメラが作成できます。
利用するもの
- Python Slack SDK の WebClient 機能
- Slack Webサイトのアプリケーション管理画面(Your Apps)
- サンプルスクリプト(aikige/slack-photo-uploader)
- サンプルスクリプトの内容は、Slack SDKの files.upload の Sample Code とほぼ同様です。
実行に必要な準備
1. Slack Webサイトでの処理: アプリケーションとTokenの作成
-
Your Apps にアクセスし、"Create New App" ボタンから新シアプリケーションを作成します。
-
"Create an app" の画面で "From an app manifest" を選択してください(処理が簡単なので)。
-
Workspace を選択し、"Enter app manifest below" の画面で以下の Manifest を貼り付けます:
_metadata: major_version: 1 minor_version: 1 display_information: name: Image Uploader description: Upload image from python scripts. background_color: "#880000" features: bot_user: display_name: Image Uploader always_online: false oauth_config: scopes: bot: - files:write settings: org_deploy_enabled: false socket_mode_enabled: false token_rotation_enabled: false
-
"Image Uploader" という名前のアプリケーションに、
files:write
のパーミッションが付与されるので、"Review summary & create your app" の画面で "Create" ボタンを押してアプリケーショの作成を終了してください。 -
作成されたアプリケーションの管理画面の "Features" 以下にある "OAuth & Permissions" のページに移動し、"OAuth Tokens for Your Workspace" の部分にある "Install to Workspace" というボタンを押して、投稿対象の Workspace に作成したアプリケーションをインストールします。
-
インストールが終わると、先程のページの "Bot User OAuth Token" の欄に Bot 用の OAuth Token が表示されますので、この値を記録してください。
2. Slack のアプリケーション上での処理: 投稿先チャンネルIDの取得
- Slack アプリ(例:Mac向けのSlackクライアント)投稿先のチャンネルを選択し、チャンネル情報を表示して、最下部に記載されているチャンネルIDを取得してください。
3. スクリプトの準備
-
aikige/slack-photo-uploader を Clone します。
-
レポジトリにある、
requirements.txt
を用いて、依存ライブラリをインストールします(slack_sdk が必要です):pip install -r requirements.txt
-
config.json
というファイルに、取得した OAuth Token と 投稿先のチャンネルIDを記載します。{ "bot_token": "xoxb-xxxxxxxxxxxxx-yyyyyyyyyyyyy-zzzzzzzzzzzzzzzzzzzzzzzz", "channel_id": "12345678901" }
スクリプトの実行
以下のように実行して、画像が投稿されれば成功です。
python slack_photo_uploader.py SOMEIMAGE
スクリプトの解説
ユーザとやり取りしない、投稿専用のボットの作成は非常に簡単です。
- 基本的に、Bot 用の OAuth Token を引数として与えて、
WebClient
オブジェクト(以下ではclient
)を生成します。 -
client.files_upload
メソッドに投稿先のチャンネルIDと、画像のファイル名を指定して呼び出すと投稿されます。
動作確認した環境について
この記事の内容は Raspberry Pi OS Lite で動作確認しました。
$ uname -a
Linux raspberrypi 5.10.63-v7l+ #1459 SMP Wed Oct 6 16:41:57 BST 2021 armv7l GNU/Linux
$ python --version
Python 3.9.2
$ pip list | grep slack
slack-sdk 3.13.0