3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PythonでSlackチャンネルのメッセージを取得する

Posted at

1.はじめに

本記事は、Microsoft FabricなどのntebookにいるPythonのプログラムが、Slack APIを使用して、Slack チャンネルのメッセージを取得する方法を検証した記事になります。
2.Slack APIの使用準備、3.Pythonプログラムの実行、の構成で記述しております。Slack APをはじめて使用する方は、2章から、すでにSlack APIの登録の使用方法をご存知のかたは 2章を飛ばして3章を読んでいただけると幸いです。

2. Slack APIの使用準備

個人で使用しているフリープランのSlackを使用して本件の検証を行いました。個人的なアカウントを作成しました。
筆者は、個人的なアカウントメールにniftyメールを使っていましたので、
slack に、niftyという名前のワークグループを作成し、そこに検証用のチャネルとして「slackapi開発」というチャンネルを作成しました。
なお、本記事では、Slack アプリ 4.45.64 64-bit版を使用しています。リビジョンによって画面の差異がある場合があることにご留意ください。

Slackのワークスペースに参加しているアカウントで(管理者権限がある前提です)Slack APIサイト(以下)にログイン済みのところから説明していきます。
https://api.slack.com/apps

2.1. ワークスペースの選択

Pyhonのプログラムをnotebook上で実行する場合でも、アプリとして登録をすることで、実行に必要なトークンを入手する必要があります。そのためにまず、アプリを開発するワークスペースを選択します。。

03_app.png

次にマニフェストからアプリを作成します。
「Demo App」という名前でアプリを作成することにしました。JSONで一旦既定値ですすめます。
04_app.png

作成したデモアプリの概要を確認して、「作成」をクリックし、アプリを作成します。
05_app.png

ブラウザから、api.slack.com/apps にアクセスし、作成したアプリ「デモアプリ」 を選択し、左ペインにある「OAuthと権限」を選択します。
画面の右ペインにある「OAuthトークン」の「(ワークグループ名)Niftyにインストール」の文字列のところをクリックします。

06_app.png

画面が切り替わり、「アクセスする権限をリクエストしています」の画面になりましたら、「許可する」をクリックします。

10_app.png

先ほどのOAuthトークンに、簿っとユーザ「OAuthトークン」に「xoxb-」で始まるトークンの文字列が生成されていますので、「コピー」をクリックし、文字列をコピーし、自分が作成するPythonのコードに使用します(後述)。

11a_app.png

さて、Slackに戻り、ワークグループ「Nifty」のチャンネルの「# slackapi開発」のチャンネルにテストメッセージを投稿しておきます。
また、画面は割愛しますが、「# slackapi 開発」を右クリックで開いてチャンネルのIDの文字列もコピーしておきます。
トークンと、チャンネルのIDを使うことで、Pythonのプログラムからこのメッセージが取得できるようになります。

01_slackapi_message.png

3.Pythonプログラムの実行

3.1 プログラムの記述

以下のようなPythonコードを記述します。Pythonのライブラリ requestsをインポートし、conversation.historyのURLに、リクエストのヘッダ部に取得したトークンを埋め込み、payloadにチャンネルIDを指定したリクエストメッセージを投げて、その結果 res からメッセージを取り出す、といった内容になります。

import requests

url = "https://slack.com/api/conversations.history"
header = {
    "Authorization": "Bearer xoxb-取得したトークンをここに記述",
}

payload  = {
    "channel" : 'チャンネルIDをここに記述'
}
res = requests.get(url, headers=header, params=payload)
data = res.json()

# メッセージの"text"だけ取り出してprint
if data.get("ok") and "messages" in data:
    for message in data["messages"]:
        text = message.get("text", "")
        print(text)
else:
    print("APIエラー:", data.get("error"))

Microsoft Fabricのnotebookに、上述のPythonコードを記述し、実行ボタンをクリックし実行します。

fbric_notebook.png

pythonコードが実行されると、画面の下のところに「testmessage」の部分が取得できていることがわかります。

3.2 エラーの場合の調査

エラーが返ってきた場合の例を以下に記載します。

  'ok': False,
  'error': 'missing_scope',
  'needed': 'channels:history,groups:history,mpim:history,im:history',
  'provided': 'identify,app_configurations:read,app_configurations:write'

上記のような結果になった場合、'ok'の項目の値を調べることでエラーの原因がわかります。
上記の場合ですと
「missing_scope: 権限が足りない」
となりますので、権限のところ、読み取りの権限がついているかどうかを確認する、などの調べて実際に権限がなければ追加して、再実行をしてみます。

なお、needed: APIの実行に必要なスコープ(いずれか)には以下のようなものがあります。

channels:history(パブリックチャンネルの履歴)
groups:history(プライベートチャンネルの履歴)
mpim:history(複数人DMの履歴)
im:history(1対1 DMの履歴)
provided: 現在トークンが持っているスコープ

以上、ここまでが、今回の記事になります。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?