ラズベリーパイからSlackへテキスト投稿・画像投稿
ラズベリーパイからPythonプログラムでSlackにテキストや画像を投稿する方法の紹介です。
テキストのみを投稿する場合や、テキストに加えてどこかのオンラインストレージにアップロードした画像のURLを投稿し、Slackアプリで展開して画像を表示したい場合、Webhook URLとslackwebモジュールを使用する簡単な方法があります。
Slackそのものに画像を投稿してメッセージに画像を埋め込みたい場合、Slack Python SDKを使用してfiles_upload()メソッドを使用する、より汎用的な方法があります。
この記事では両方紹介します。
Slackを使用する準備
Slackアカウントの作成
以下のURLにアクセスしてメールアドレスを入力し、続行するをクリックします。GoogleやAppleのアカウントを使用することもできます。
https://slack.com/intl/ja-jp/get-started#/createnew
メールを確認し、確認コードを入力します。
画面が切り替わるので、ワークスペースを作成するをクリックします。この際、チェックボックスのチェックは外しておくといいでしょう。
好きなワークスペース名を入力し、次へをクリックします。
右下の「この手順をスキップする」をクリックします。
ステップをスキップをクリックします。
ここで入力した名前がSlackの「チャンネル名」になります。好きな名前を入力しましょう。
ソフトのダウンロードをうながされるので、後でをクリックします。
以上でアカウントの作成は完了です。
チャンネルの作成
上記ステップ「Slackアカウントの作成」から行った場合、「カメラ」というチャンネルをすでに作成していますので特にやることはありません。作成が必要な場合は、すでにSlackを使用していて、既存のgeneralなどのチャネル以外に、ラズベリーパイからの投稿を表示するチャンネルを新たに作りたい場合です。
チャンネルを作成する場合、チャンネルの一覧の1番下にある +チャンネルを追加する → 新しいチャンネルを作成する の順にクリックします。
名前に好きなチャンネル名を入力し、作成ボタンをクリックします。
後でする をクリックします。これでチャンネルの作成は完了です。
Webhook URLを使用する場合
Webhook URLの作成
Slackにプログラムから投稿を行うにはWebhook URLが必要です。まずは以下のURLにアクセスします。
https://my.slack.com/services/new/incoming-webhook/
チャネルへの投稿セクションで、ラズベリーパイから投稿したチャネルをプルダウンから選び、Incoming Webhookインテグレーションの追加 をクリックします。
Webhook URLは後で使用しますのでコピーしておきます。なお、このURLは他人に知られないようにしてください。
名前をカスタマイズのセクションで、好きな名前を入力します。ここで入れた名前が投稿者になります。
最後にアイコンを設定したい場合は画像ファイルを用意して設定し、最後に設定を保存するボタンをクリックします。
指定したチャネルにWebhookが追加された旨のメッセージが自動投稿されます。
slackwebモジュールのインストール
まず、必要なモジュールを以下のコマンドでインストールしておきます。
pip install slackweb
テキスト投稿用サンプルプログラム
webhook_urlはご自身のものに置き換えてください。
import slackweb
webhook_url = "https://hooks.slack.com/services/T0467P6R2/B045C10ES/KDSP9rkEN4iteOpphLD"
slack = slackweb.Slack(url=webhook_url)
slack.notify(
text="投稿です!"
)
実行すると以下のように表示されます。
テキスト+画像投稿用サンプルプログラム
画像はURLでアクセスできる場合表示されます。webhook_urlはご自身のものに置き換えてください。
import slackweb
webhook_url = "https://hooks.slack.com/services/T0467P6R2/B045C10ES/KDSP9rkEN4iteOpphLD"
image_url = "https://raspi-school.com/wp-content/uploads/2022/10/slack-test-image.jpg"
slack = slackweb.Slack(url=webhook_url)
slack.notify(
text="投稿です!",
attachments = [{
"fields": [{
"title": "タイトル",
"value": "本文",
}],
"image_url": image_url
}]
)
実行すると以下のように表示されます。
Slack Python SDKを使用する場合
Slackアプリの作成
https://api.slack.com/apps にアクセスします。
Create New Appというボタンがありますので、クリックします。
From an app manifest をクリックします。
Nextをクリックします。
YAMLのセクションに以下のテキストを貼り付けてNextをクリックします。
display_information:
name: Camera App
features:
bot_user:
display_name: Raspi Camera
oauth_config:
scopes:
bot:
- chat:write
- files:write
Createをクリックします。
Install to Workspaceをクリックします。
許可するをクリックします。
1番下までスクロールすると、アプリの名前やアイコン、色を設定できます。必要に応じて変更し、Save Changesボタンをクリックします。
左メニューからInstall Appをクリックし、右に表示されたBot User OAuth Tokenをコピーしておきます。なお、このTokenは他人に知られないようにしてください。
チャンネルにアプリを追加
画像を投稿したいチャンネルで、投稿欄に@Raspi CAmera とだけ入力し、右下の緑の投稿ボタンをクリックします。
チャンネルに追加する をクリックします。
チャンネルにアプリが追加された旨のメッセージが表示されます。
Slack Python SDKのインストール
以下のコマンドでインストールしておきます。
pip install slack_sdk
テキスト+画像投稿用サンプルプログラム
slack_tokenはご自身のものに置き換えてください。プログラムあるディレクトリに投稿したい画像ファイルpic.jpgを用意しておきます。
from slack_sdk import WebClient
slack_token = 'xoxb-370459413493-4261343288625-qeUpMgWiLsptdMwXlZ9qjNAA'
client = WebClient(slack_token)
client.files_upload(
channels="カメラ",
title="本文",
file="./pic.jpg",
initial_comment="投稿です!",
)
実行すると以下のように表示されます。
おわりに
いかがだったでしょうか? 思ったより簡単なプログラムでできますので、ぜひラズパイにつないだ専用カメラなどと組み合わせて、ラズベリーパイからの通知に活用してみてくださいね😊