2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-01-10

アプリ作成

ここからCreate an app > From scratch を選択し、アプリ名とslackのどのワークスペースを使うか選択する。

スコープ

App Manifestに

oauth_config:
  scopes:
    bot:
      - channels:history
      - groups:history
      - im:history
      - mpim:history

を追加して
以下に変える

_metadata:
  major_version: 1
  minor_version: 1
display_information:
  name: APP_NAME
features:
  bot_user:
    display_name: APP_NAME
    always_online: false
oauth_config:
  scopes:
    bot:
      - channels:history
      - groups:history
      - im:history
      - mpim:history
settings:
  org_deploy_enabled: false
  socket_mode_enabled: false
  token_rotation_enabled: false

※ OAuth & Permissions > Scope > User Token Scopes > Add an OAuth Scopeから追加することもできる

トークン作成

OAuth & Permissions > OAuth Tokens for Your Workspace から Install to Workspace を押して
トークンを発行する。

コード

import requests


SLACK_CHANNEL_ID = 'SLACK_CHANNEL_ID'
SLACK_URL = "https://slack.com/api/conversations.history"
TOKEN = "TOKEN"



def main():
    payload = {
        "channel": SLACK_CHANNEL_ID
    }
    headersAuth = {
    'Authorization': 'Bearer '+ str(TOKEN),
    }
    response = requests.get(SLACK_URL, headers=headersAuth, params=payload)
json_data = response.json()
    msgs=[]
    for i in range(len(response.json()['messages'])):
        msgs.append(json_data['messages'][i]["text"])

    msgs.reverse()
    return print(msgs)


if __name__ == "__main__":
    main()
  • slackの該当チャンネルまで行ってURLを確認すると
    https: //app.slack.com/client/T0123456789/C0123456789
    といった感じになっており、
    SLACK_CHANNEL_IDは 一番最後にある、ここで言う "C0123456789"である。

  • TOKENは先ほど発行したものであり、xoxbからスタートしている。

  • msgs.reverse()はmsgsでslackでのテキストメッセージを最新のものから取得するため、リスト内を時系列順に戻すためである。

メッセージの取得

ターミナルで このファイルを実行すると

{'ok': False, 'error': 'not_in_channel'}

とでた。
Slack api conversations.history returns error: not_in_channel
によるとSlackの該当チャンネルにAPPを追加する必要があるようだったので、
slackの該当チャンネルの右上の人のマークを押し、インテグレーション>APPからアプリ追加を選択し、先ほど作ったアプリ名を追加し、再度ファイルを実行すると
メッセージをリストで取得することができた。

展望

このコードでは返信をしたときのメッセージを取得することができないので、次は試みたい。

参考

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?