これはなに?
チャットワークの部屋のログをすべて取得できるスクリプトの紹介です。
モチベーション
チャットワークのログをテキストデータとして取得できないかという相談がありました。
チャットワークの API だと最新100件までしか取得できないため、なんとかできないか試行錯誤しました。
https://developer.chatwork.com/ja/endpoint_rooms.html#GET-rooms-room_id-messages
同じ目的のものとして goodbye_chatwork があったが、自分のログイン方法が SSO だったためか、issue があった reCAPTCHA の影響か 、直接は利用できなかった。スクリプトを参考にした。
スクリプトは?
以下の gist に上げています。
コンソールを使って指定のチャットワーク部屋のメッセージをすべて取得する。
https://gist.github.com/junjanjon/8ce62c1cb90e817b1247de672bf93116
使い方
以下を書き換えればどの部屋でも利用できます。
// 取得したいチャットルームのルームID。先頭のridを除いた数字のみ。
// [] を指定すると、アクセスできる全ルームの情報をダウンロードします。
var TARGET_ROOM_IDS = []
// var TARGET_ROOM_IDS = [123456789, 987654321]
// 取得したくないチャットルームのルームID。
// ログ用ルーム等のダウンロードを除外するのに利用します
var EXCEPT_ROOM_IDS = []
// var EXCEPT_ROOM_IDS = [123456789]
// 通信間隔[ミリ秒]。ダウンロードするデータの規模が大きい場合は、1000(1秒)ぐらいに指定してください。
var INTERVAL_TIME = 300;
// チャットワークのホスト. 企業用の場合は適宜修正ください
var HOST_URL = "www.chatwork.com"
// var HOST_URL = "kcw.kddi.ne.jp"
どうやって使うの?
Google Chrome のデベロッパーツールの中の機能、コンソールを利用します。ほかのブラウザにも同等の機能があるので読み替えてください。
20件のメッセージごとにINTERVAL_TIME[ms]待ちます。
どんな結果が来るの?
ダウンロードディレクトリに {部屋ID}_messages.json
がダウンロードされます。
ダウンロードディレクトリに添付ファイルが {部屋ID}_{ファイル名}
でダウンロードされます。
_messages.json
の内容について
最上位が配列のデータです。配列内の各要素がメッセージです。
普通のテキストメッセージの例を以下に表します。
[
...,
{
"id": "123451234512345",
# ユーザID
"aid": 1234567,
# メッセージ内容
"msg": "Hello World",
# メッセージタイプ: テキストメッセージ、部屋作成、部屋参加、アップロードなどがある
"type": "text_message_type",
"tm": 1234567,
"utm": 0,
# 部屋内のメッセージのインクリメントの値
"index": 12,
# リアクション: 絵文字とリアクションしたユーザIDが記録される
"reactions": [],
# 投稿時間
"datetime": "2024/12/12 12:12:12",
# ユーザ名
"aid_name": "田中太郎"
},
実績は?
約3万件のメッセージがある bot 部屋(ニュースを流し続けていた部屋)のログをすべて収集できました。テキストで約 60[MB] でしたが、問題なくテキストエディタへコピペできました。
注意
攻撃のようなリクエストにならないよう注意してください。
開発者コンソールは強力なことができてしまうため注意してください。
追記(2025/2/4)
この記事のコメントにさらに高機能なスクリプトを書いていただき、動作確認したため gist と記事にも反映させていただきました。
ありがとうございます!