Chatwork 複数の ROOM_ID をまとめて取得して、ルーム名付きでコンソールに表示しつつ同時にテキストファイルに保存

[Python]

import requests
from datetime import datetime, timezone, timedelta
import os

# ===== 設定 =====
API_TOKEN = "YOUR_CHATWORK_API_TOKEN"
ROOM_IDS = [
    "123456789",  # ルームID1
    "987654321",  # ルームID2
]
BASE_URL = "https://api.chatwork.com/v2"
SAVE_DIR = "chatwork_logs"  # 保存先ディレクトリ

# 保存ディレクトリ作成
os.makedirs(SAVE_DIR, exist_ok=True)

headers = {
    "X-ChatWorkToken": API_TOKEN
}

# ===== 各ルームの処理 =====
for room_id in ROOM_IDS:
    # ルーム情報(名前取得)
    room_info_url = f"{BASE_URL}/rooms/{room_id}"
    r_info = requests.get(room_info_url, headers=headers)
    if r_info.status_code != 200:
        print(f"Room {room_id} 情報取得エラー: {r_info.status_code}")
        continue
    room_name = r_info.json().get("name", f"Room-{room_id}")

    # 出力ファイルパス
    file_path = os.path.join(SAVE_DIR, f"chatwork_{room_id}.txt")

    print(f"\n=== {room_name} (ID: {room_id}) ===")

    with open(file_path, "w", encoding="utf-8") as f:
        f.write(f"=== {room_name} (ID: {room_id}) ===\n")

        # メッセージ取得
        msg_url = f"{BASE_URL}/rooms/{room_id}/messages"
        params = {"force": 1}
        r_msg = requests.get(msg_url, headers=headers, params=params)
        if r_msg.status_code != 200:
            err_msg = f"メッセージ取得エラー: {r_msg.status_code}"
            print(err_msg)
            f.write(err_msg + "\n")
            continue

        messages = r_msg.json()

        for idx, msg in enumerate(messages, start=1):
            sender = msg.get("account", {}).get("name", "不明")
            body = msg.get("body", "")
            ts = datetime.fromtimestamp(msg["send_time"], tz=timezone.utc) \
                          .astimezone(timezone(timedelta(hours=9)))  # 日本時間
            msg_line = f"[{idx}] {sender} ({ts.strftime('%Y-%m-%d %H:%M:%S')})\n{body}\n" + "-" * 40

            # コンソール出力
            print(msg_line)

            # ファイル保存
            f.write(msg_line + "\n")