<目次>
(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 }