<目次>
(1) Slack APIで投稿一覧を取得する方法をご紹介(Python)
(1-0) やりたいこと
(1-1) STEP1:Slackアプリの準備
(1-2) STEP2:サンプルプログラム
(1) Slack APIで投稿一覧を取得する方法をご紹介(Python)
(1-0) やりたいこと
●アウトプットイメージ

●処理の流れ

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


(1-2) STEP2:サンプルプログラム
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()

URL='https://xxxxxxx.slack.com/api/conversations.history' SLACK_BOT_TOKEN='xoxb-xxxxx' CHANNEL = '[取得対象のチャンネルID]' ↓

↓
{
"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
}