コンソールを使って指定のチャットワーク部屋のメッセージをすべて取得する。


これはなに?

チャットワークの部屋のログをすべて取得できるスクリプトの紹介です。

モチベーション

チャットワークのログをテキストデータとして取得できないかという相談がありました。

チャットワークの API だと最新100件までしか取得できないため、なんとかできないか試行錯誤しました。
https://developer.chatwork.com/ja/endpoint_rooms.html#GET-rooms-room_id-messages

同じ目的のものとして goodbye_chatwork があったが、自分のログイン方法が SSO だったためか、reCAPTCHA の影響か 、直接は利用できなかった。スクリプトを参考にした。

スクリプトは?

以下の gist に上げています。

コンソールを使って指定のチャットワーク部屋のメッセージをすべて取得する。
https://gist.github.com/junjanjon/8ce62c1cb90e817b1247de672bf93116

以下の3行だけ書き換えればどの部屋でも利用できます。

// 取得したいチャットルームの最新のチャット ID
var target_chat_id = 1274532567885807616;
// 取得したいチャットルームのルーム ID
var target_room_id = 12345678;
// 最大再帰回数. 本番時は 10000 程度を指定してください.
var LIMIT_COUNT = 3;

どうやって使うの?

Google Chrome のデベロッパーツールの中の機能、コンソールを利用します。ほかのブラウザにも同等の機能があるので読み替えてください。

約 400 件のメッセージごとに1秒かかるようにしています。

どんな結果が来るの?

コンソールにすべてのメッセージがテキストとして出力されます。コピーボタンをクリックすればコピーできます。

実績は?

約3万件のメッセージがある bot 部屋(ニュースを流し続けていた部屋)のログをすべて収集できました。テキストで約 60[MB] でしたが、問題なくテキストエディタへコピペできました。

参考

ChatWorkからファイルも含めてログをエクスポートしたいならgoodbye_chatworkだ!KDDI ChatWork対応
https://qiita.com/hirokishirai/items/29bfdfc6d61b911aacc1