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")
コメントを残す