見出し画像

Slackの過去データが順次削除になると聞いたので、API経由でExportしてみた

「Slack」、無料版のワークスペースで1年以上経過したメッセージやファイルを削除へ/8月26日から順次削除 というニュースがあったので、Freeプランでずっと使っているデータがいよいよ消えてしまったら、何となく困るなぁと思ったので、吸い出してみました。

吸い出すためには一時的にトライアルか有料プランにする必要があります。

Slackで以下のスコープを与えて


その後、pythonで実行します。(tokenにはUser OAuth Tokenを記入します。)


import requests
import json

token = 'xxx'

url = 'https://slack.com/api/conversations.list'
headers = {
    'Authorization': f'Bearer {token}'
}

params = {
    'types': 'private_channel'  # Privateチャンネルのみを取得する
}

response = requests.get(url, headers=headers, params=params)
channels = response.json().get('channels', [])

for channel in channels:
    print(f"Name: {channel['name']}, ID: {channel['id']}")

    url = 'https://slack.com/api/conversations.history'
    headers = {
        'Authorization': f'Bearer {token}'
    }
    params = {
        'channel': channel['id'],
        'limit': 1000,  # 取得するメッセージ数を設定(最大1000まで)
        'inclusive': True,
        'oldest': 0  # 取得開始時間(UNIXタイムスタンプ)
    }

    page_number = 1

    while True:
        # APIリクエストを送信
        response = requests.get(url, headers=headers, params=params)
        data = response.json()

        # レスポンスの内容を確認
        if not data['ok']:
            print(f"Error: {data.get('error', 'Unknown error')}")
            break

        # メッセージを保存
        with open(f'slack_messages_{channel["name"]}_page_{page_number}.json', 'w', encoding='utf-8') as f:
            json.dump(data, f, ensure_ascii=False, indent=4)

        print(f"Page {page_number} saved.")

        # next_cursorがある場合は、次のページを取得
        next_cursor = data.get('response_metadata', {}).get('next_cursor')
        if next_cursor:
            params['cursor'] = next_cursor
            page_number += 1
        else:
            break

これで、jsonに書き出されます。

この記事が気に入ったらサポートをしてみませんか?