Chatworkのメッセージをスプレッドシートに保存する方法 | 独学プログラマーHiroのパーツボックスblog

Chatworkのメッセージをスプレッドシートに保存する方法

chatwork-archive-eye-chach Chatwork
スポンサーリンク

2022/10/06(予定)からフリープランにおいて、グループ数の上限が撤廃される代わりに、40日経過後のメッセージは確認できなくなりました。

2022/10/06 – フリープラン サービス内容変更に伴うモバイル版アプリ アップデートのお願い

フリープランを使い続けたい方で、「どうしても過去のメッセージを残したい!」という方のためにグーグルスプレッドシートに自動的にメッセージ一覧をアーカイブする方法を説明します。

(注意)Chatwork APIの仕様では最新100件のメッセージを取得できます。前回取得から100件を超える前に定期実行すれば切れ目なくメッセージを自動的にアーカイブすることができます。すでに100件以上のメッセージが投稿されているルームは100件より前のデータは保存されませんのでご注意ください。

必要なもの

  • Chatwork APIトークン
  • Chatwork room ID (メッセージ一覧を残したいチャットルームのID)
  • GoogleスプレッドシートID

Chatwork APIトークンとroom IDの取得方法

Chatwork APIトークンはデスクトップアプリの右上ユーザー名をクリックすると表示されるサービス連携をクリックします。

APIトークンを選択すると表示できます。スクリプト内に記述する必要があるのでメモしておいてください。(メモ帳のアプリケーションにコピペしておいてください)

chatwork-api-token

続いてメッセージを保存したいチャットルームのIDを調べます。

デスクトップアプリの右上のチャットワークのマークをクリックするとメニューが開き、URLが表示されます。URLのridのあとの数字がルームIDとなります。

こちらも後でスクリプトに記述する必要があるので、メモしておいてください。

Chatwork-roomID

Googleスプレッドシートの用意&スプレッドシートIDの取得

googleアカウントは作成済み前提で進めます。持っていない方はアカウントを作成してください。

アカウントログイン状態であればchromeの右上に九つの丸ボタンのようなマークがあるので押します。メニューが開きますのでドライブを選択します。

googleドライブの画面になりますので、新規作成を押して、googleスプレッドシートを選択します。

新しいスプレッドシートが作成されますので、ファイル名(題名)を変更します。

シート名を「log」に変更します。

1行目に自分のわかりやすい項目名を入力しておいてください。2行目以降にデータが保存されます。

次にスプレッドシートのIDを取得します。WEBブラウザのURLに含まれている文字列です。

https://docs.google.com/spreadsheets/d/ ここがスプレッドシートのIDです /edit#gid=0

このIDもスクリプトに記述するのでメモしておいてください。

Google Apps Scriptの記述

GASの実行スクリプトを用意します。

グーグルドライブの画面から「新規」「その他」「Google Apps Script」の順に選択します。

コードを記述する画面が表示されるので、ファイル名(題名)を変更してください。

この下のコードをコピーして貼り付けて「Chatwork API トークン」「room ID」「スプレッドシートID」の3つを書き換えてください。

function chatwork_archive() {
  var api_token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; //ここにapiトークンを入力してください。
  var room_id="xxxxxxxxxx"; //ここにメッセージ一覧を取得したいroom_idをいれてください
  var spreadsheetId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; //スプレッドシートidを入力してください
  
  var params = {
    headers : {"X-ChatWorkToken" : api_token},
    method : "get"
  };  
     
  var url = "https://api.chatwork.com/v2/rooms/" + room_id + "/messages?force=0"; //force=0は前回取得後に追加されたメッセージのみを取得
  var response = UrlFetchApp.fetch(url, params);
  
  if(response.getContentText()){
    const res_data= JSON.parse(response.getContentText());
    var mySheet=SpreadsheetApp.openById(spreadsheetId).getSheetByName("log")
    var lastRow= mySheet.getLastRow()+1;
    for(let i=0;i<res_data.length;i++){
      mySheet.getRange(lastRow,1).setValue(res_data[i]["message_id"]);
      mySheet.getRange(lastRow,2).setValue(res_data[i]["account"]["name"]);
      mySheet.getRange(lastRow,3).setValue(res_data[i]["body"]);
      mySheet.getRange(lastRow,4).setValue(Utilities.formatDate(new Date(res_data[i]["send_time"]*1000),"Asia/Tokyo", "yyyy/MM/dd: HH:mm:ss"));
      mySheet.getRange(lastRow,5).setValue(Utilities.formatDate(new Date(res_data[i]["update_time"]*1000), "Asia/Tokyo", "yyyy/MM/dd: HH:mm:ss"));
      lastRow++;
    };
  };
};

動作するか確認します。

実行ボタンを押します。

次のようなセキュリティ通知が届きますので、許可設定を行います。

権限を確認ボタンを押します。

ユーザー名をクリックします。

詳細をクリックします。

安全ではないページに移動をクリック

許可をクリック

最後にスマホなどのアカウントを管理しているデバイスに通知が届きますので、「心当たりがあります」の回答をお願いします。

上記手順を踏むと実行されスプレッドシートにデータが抽出されます。

エラーが出る場合にはIDやセキュリティ許可の設定が間違っていないか確認してください。

(スクリプトのデバッグを使えばどこでエラーが発生しているかの確認ができる可能性があります。)

自動化するためにトリガーを設定する

スクリプトのページに戻ってトリガーを選択します。

右下の「トリガーを追加」を押します。

トリガーの詳細設定ができる画面が表示されますので、メッセージの投稿される数を考慮してどれくらいのペースで自動実行するかを選択して下さい。設定出来たら右下の「保存」ボタンを押してください。

以上で自動的にスプレッドシートへ保存されます。

投稿数が多い場合には、行数がオーバーフローしないように定期的にチェックしてください。

最後に

今回は1つのチャットルームのメッセージをgoogleスプレッドシートに自動的に保存する方法でした。

シートを増やして複数のルームに対応するように改造してもらっても良いと思います。

Chatworkの利点「検索窓に検索キーワードを入力すると高速で結果が表示される」という恩恵をうけるために、有料プランへ変更することをお勧めします。

コメント

タイトルとURLをコピーしました