2024年4月12日金曜日

Slack の Python SDK で指定の日付範囲のメッセージの一覧を取得する方法

Slack の Python SDK で指定の日付範囲のメッセージの一覧を取得する方法

概要

conversations.history で oldest と latest を指定します

環境

  • macOS 11.7.10
  • Python 3.11.6
  • slack-sdk 3.27.1

サンプルコード

oldest と latest はエポックタイム形式で指定します
最終的には文字列として API はコールします   もし指定した範囲内のメッセージが 100 件を超える場合は has_more=true が返ってくるのでページネイトする必要があります

from datetime import datetime, timedelta
from zoneinfo import ZoneInfo

from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError

client = WebClient(token="xoxb-xxxxxx")
channel_id = "C0123456789"

try:
    # 会話情報の取得、oldestとlatestで範囲指定、前日分の最新100件を取得する
    now = datetime.now(ZoneInfo("Asia/Tokyo")).replace(
        hour=0, minute=0, second=0, microsecond=0
    )
    oldest = now - timedelta(days=1)
    latest = now - timedelta(days=0)
    # print(oldest)
    # print(latest)
    # メッセージの一覧の取得、oldest,latestのタイムスタンプ(float)は文字列(str)に変換
    result = client.conversations_history(
        channel=channel_id,
        oldest=str(oldest.timestamp()),
        latest=str(latest.timestamp()),
        inclusive=True,
    )
    conversation_history = result["messages"]
    # メッセージの表示
    for msg in conversation_history:
        print(msg["text"])
        print(msg["ts"])
except SlackApiError as e:
    print(e)

最後に

サンプルではページネイトに関しては考慮していないので注意してください
最新100件なので古いものが含まれないケースがあります

参考サイト

0 件のコメント:

コメントを投稿