🐍

Slackに画像を投稿する最小限度のPythonスクリプトの作り方

2022/01/06に公開

この記事では、Slackの特定のチャンネルに画像を投稿するシンプルなPythonスクリプトを作成するための基礎知識を共有します。

この記事で利用しているスクリプトで、以下の記事で利用している Google Photos へアップロードするスクリプトを置き換えると、Slack へ撮影した画像を定期的に投稿する簡易 Network カメラが作成できます。

https://zenn.dev/aikige/articles/cloud-cam-by-sbc

利用するもの

実行に必要な準備

1. Slack Webサイトでの処理: アプリケーションとTokenの作成

  1. Your Apps にアクセスし、"Create New App" ボタンから新シアプリケーションを作成します。

  2. "Create an app" の画面で "From an app manifest" を選択してください(処理が簡単なので)。

  3. 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
    
  4. "Image Uploader" という名前のアプリケーションに、 files:write のパーミッションが付与されるので、"Review summary & create your app" の画面で "Create" ボタンを押してアプリケーショの作成を終了してください。

  5. 作成されたアプリケーションの管理画面の "Features" 以下にある "OAuth & Permissions" のページに移動し、"OAuth Tokens for Your Workspace" の部分にある "Install to Workspace" というボタンを押して、投稿対象の Workspace に作成したアプリケーションをインストールします。

  6. インストールが終わると、先程のページの "Bot User OAuth Token" の欄に Bot 用の OAuth Token が表示されますので、この値を記録してください。

2. Slack のアプリケーション上での処理: 投稿先チャンネルIDの取得

  1. Slack アプリ(例:Mac向けのSlackクライアント)投稿先のチャンネルを選択し、チャンネル情報を表示して、最下部に記載されているチャンネルIDを取得してください。

3. スクリプトの準備

  1. aikige/slack-photo-uploader を Clone します。

  2. レポジトリにある、requirements.txt を用いて、依存ライブラリをインストールします(slack_sdk が必要です):

    pip install -r requirements.txt
    
  3. config.json というファイルに、取得した OAuth Token と 投稿先のチャンネルIDを記載します。

    {
        "bot_token": "xoxb-xxxxxxxxxxxxx-yyyyyyyyyyyyy-zzzzzzzzzzzzzzzzzzzzzzzz",
        "channel_id": "12345678901"
    }
    

スクリプトの実行

以下のように実行して、画像が投稿されれば成功です。

python slack_photo_uploader.py SOMEIMAGE

スクリプトの解説

ユーザとやり取りしない、投稿専用のボットの作成は非常に簡単です。

  1. 基本的に、Bot 用の OAuth Token を引数として与えて、WebClient オブジェクト(以下では client)を生成します。
  2. 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

Discussion