Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Slack

Slack APIで投稿一覧を取得する方法をご紹介(Python)

投稿日:2023年4月6日 更新日:

 

<目次>

(1) Slack APIで投稿一覧を取得する方法をご紹介(Python)
 (1-0) やりたいこと
 (1-1) STEP1:Slackアプリの準備
 (1-2) STEP2:サンプルプログラム

(1) Slack APIで投稿一覧を取得する方法をご紹介(Python)

(1-0) やりたいこと

●アウトプットイメージ

Slack APIで、指定したチャンネルの投稿一覧を照会した結果(JSON)を、表形式に整形したのち、csvに出力する。
(図111)

●処理の流れ

Slack Appを作成し、そのApp経由で投稿一覧のAPIを照会します。
(図112)

(1-1) STEP1:Slackアプリの準備

APIの処理はSlackボットを経由して行うため、事前にSlackボットを準備しておきます。
 
(作成手順)
 
その際、ボットには必要な権限を割り当てておきます。
 
・①必要な権限
channels:history
groups:history
im:history
mpim:history
 
(図122)
・②OAuth & Permissionsを選択
(図123)

・③割り当て
(図124)

また、Bot User OAuth Tokenはプログラムの中で指定が必要なため、控えておきます。
(図121)

(1-2) STEP2:サンプルプログラム

(サンプルプログラム)
slack_get_conversation_list.py
import json
import pandas as pd
import requests
import os
from pathlib import Path
from dotenv import load_dotenv

# 親フォルダパスを取得
file_path = Path(__file__).parent
# 「.env」ファイルのパスを設定
env_path = file_path/'.env'
# 「.env」ファイルのロード
load_dotenv(dotenv_path=env_path)

def main():

    # APIのURL
    url = os.environ['URL']
    channel = ("?channel="+os.environ['CHANNEL']) if os.environ['CHANNEL'] != "" else ""
    url = url + channel
    print(url)

    # ヘッダー部
    headers = {
        "Content-Type":"application/x-www-form-urlencoded",
        "User-Agent":"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)",
        "Authorization":"Bearer "+os.environ['SLACK_BOT_TOKEN']
    }
    
    # POSTリクエスト
    response = requests.post(url, headers=headers)
    
    # レスポンスの内容をtext形式で取得
    result = response.text

    # レスポンスのJSONを表形式データ(DataFrame)に変形する
    # JSONライブラリを用いて、JSONファイルのデータをJSONオブジェクトとしてロード
    json_object = json.loads(result)
    # pandasの「json_normalize」関数を用いてデータを正規化
    # 第1引数:json形式のオブジェクト
    # 第2引数:分解対象のデータのkey
    # 第3引数:その他、分解した明細に付与するデータ
    df = pd.json_normalize(json_object, record_path =['messages'])
    # df = pd.json_normalize(json_object, record_path =['students'],meta=['school_name', 'class'])
 
    # 表形式データ(DataFrame)をcsv出力する
    df.to_csv('./slack_get_conversation_history.csv', sep=',', encoding='shift-jis', header=True)

if __name__ == "__main__":
     main()
(図131)
.env
URL='https://xxxxxxx.slack.com/api/conversations.history'
SLACK_BOT_TOKEN='xoxb-xxxxx'
CHANNEL = '[取得対象のチャンネルID]'
↓
実行するとプログラムと同じ階層に、csvが生成されます。
(図133)

Csvはユーザー単位でデータが出力されています。
(json形式のデータを表形式に整形している)
 
(図134)

ちなみに、元々のJSON形式のレスポンスはこんな感じです。
ネストになっている「”profile”: { ・・・ }」の部分も、csvの右側に列がちゃんと存在している事が確認できています。
 
(参考)
{
    "ok": true,
    "messages": [
        ~中略~
        {
            "client_msg_id": "e3b57d70-c67f-4479-bfd8-cbb047a043eb",
            "type": "message",
            "text": "<@U02T3FS7FD4>\nはじめまして、本日より参画しているRainbow Planet04です。\nよろしくお願いいたします。",
            "user": "U02TA7J1DEX",
            "ts": "1664089469.822699",
            "blocks": [
                {
                    "type": "rich_text",
                    "block_id": "D=Ov",
                    "elements": [
                        {
                            "type": "rich_text_section",
                            "elements": [
                                {
                                    "type": "user",
                                    "user_id": "U02T3FS7FD4"
                                },
                                {
                                    "type": "text",
                                    "text": "\nはじめまして、本日より参画しているRainbow Planet04です。\nよろしくお願いいたします。"
                                }
                            ]
                        }
                    ]
                }
            ],
            "team": "T02TA6EUXSN"
        },
        {
            "type": "message",
            "subtype": "channel_join",
            "ts": "1664089185.724989",
            "user": "U02TA7J1DEX",
            "text": "<@U02TA7J1DEX>さんがチャンネルに参加しました"
        }
    ],
    "has_more": false,
    "is_limited": true,
    "pin_count": 0,
    "channel_actions_ts": null,
    "channel_actions_count": 0
}
(参考)

Adsense審査用広告コード


Adsense審査用広告コード


-Slack
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Slack AppのWorkflow Stepsの使い方

  <目次> (1) Slack AppのWorkflow Stepsの使い方  (1-0) やりたいこと  (1-1) STEP1:Slackボットの開発(所要時間:60分)  (1-2) …

Slack APIで返信を一覧で取得する方法をご紹介(Python)

  <目次> (1) Slack APIで返信を一覧で取得する方法をご紹介(Python)  (1-0) やりたいこと  (1-1) STEP1:Slackアプリの準備  (1-1) STE …

SlackのAPIでユーザー一覧を取得する方法をご紹介

  <目次> (1) SlackのAPIでユーザー一覧を取得する方法をご紹介  (1-0) やりたいこと  (1-1) STEP1:Slackボットの作成  (1-2) STEP2:サンプル …

Slackでコマンドを作る方法をご紹介(自作スラッシュコマンド)

  <目次> (1) Slackでコマンドを作る方法をご紹介(自作スラッシュコマンド)  (1-0) やりたいこと  (1-1) STEP1:Slackボットの開発(所要時間:60分)  ( …

  • English (United States)
  • 日本語
Top