![見出し画像](https://assets.st-note.com/production/uploads/images/82761466/rectangle_large_type_2_457529097d34d2860bcbf152f98bfc9b.png?width=1200)
[GAS] Chatworkのチャット一覧を取得し、Googleスプレッドシートに出力する
はじめに
以前、GASでChatworkで複数のルームに一斉にメッセージを送信するツールを作成しました。
送信先のグループチャットのルームIDを設定する場合、ルームIDを確認するのに、Chatworkアプリを開いて、対象のルームに移動して確認する、という作業をしていました。
この方法だと、数が多いと、時間が掛かってしまうため、事前にチャット一覧を、Googleスプレッドシートに出力しておきたいと思います。
今回は、GASでChatwork API を使って、チャット一覧を取得し、Googleスプレッドシートに出力する処理についてまとめます。
事前準備
1.Chatwork APIトークンの発行
Chatwork APIを使用するには、APIトークンを発行しておく必要があります。
APIトークンを発行する
この手順で取得したAPIトークンを、メモっておきます。
2.Chatwork APIトークンを、スクリプトプロパティに設定
Apps Scriptエディタから、「プロジェクトの設定」ボタンをクリックします。
![](https://assets.st-note.com/img/1657951303692-jfeT82P7kJ.png)
「スクリプトプロパティ」の欄の「スクリプトプロパティを追加」ボタンをクリックします。
![](https://assets.st-note.com/img/1657951333439-uoylGAcArv.png?width=1200)
「プロパティ」に、コード内で参照するキーの名前を設定します。
今回は、①「CW_TOKEN」としてプロパティに設定しました。
②「値」には、先ほどChatworkから取得したAPIトークンを設定して、③「スクリプトプロパティを保存」をクリックします。
![](https://assets.st-note.com/img/1657951376333-sBsOLZtoHL.png?width=1200)
コードの中で、「プロパティ」に設定したキーを指定することで、APIトークンが取得できるようになります。
実装
全体の実装は下記です。
function myFunction() {
const props = PropertiesService.getScriptProperties();
const token = props.getProperty('CW_TOKEN');
const res = getContacts_(token);
const json = JSON.parse(res.getContentText());
const header = Object.keys(json[0]);
const values = [];
for ( const room of json ){
values.push(Object.values(room));
}
values.unshift(header);
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('チャット一覧');
sheet.getRange(1, 1, values.length, values[0].length).setValues(valueus);
}
/**
* ChatworkAPIより、チャット一覧を取得する
*
* @param {string} token - ChatworkAPIトークン
* @return {Object} HTTPResponseオブジェクト
*
*/
function getRooms_(token) {
const params = getParam_(token, 'GET');
const url = "https://api.chatwork.com/v2/rooms/";
return UrlFetchApp.fetch(url, params);
}
/**
* HTTPリクエストのパラメータを取得する
*
* @param {string} token - ChatworkAPIトークン
* @param {string} method - HTTPメソッド
* @param {object} payload - リクエスト
* @return {Object} HTTPリクエストのパラメータ
*
*/
function getParam_(token, method) {
const params = {
method: method,
headers: {
'X-ChatWorkToken': token
},
};
return params;
}
処理を順に説明します。
スクリプトプロパティからAPIトークンを取得する
事前準備でスクリプトプロパティに保存したAPIトークンを取得します。
const props = PropertiesService.getScriptProperties();
const token = props.getProperty('CW_TOKEN');
Chatwork APIから、チャット一覧を取得する
チャット一覧を取得する処理は、getRooms_関数にまとめています。
function getRooms_(token) {
const params = getParam_(token, 'GET');
const url = "<https://api.chatwork.com/v2/rooms/>";
return UrlFetchApp.fetch(url, params);
}
チャット一覧を取得するChatwork APIのリファレンスは、下記です。
UrlFetchAppサービスのfetchメソッドに、上記リファレンスのURLと、パラメータを設定しています。
パラメータを作成する処理は、getParam_関数にまとめています。
パラメータのHTTPリクエストヘッダに、APIトークンを、X-ChatWorkTokenというキーで値を設定します。
function getParam_(token, method) {
const params = {
method: method,
headers: {
'X-ChatWorkToken': token
},
};
return params;
}
レスポンスを受け取る
Chatwork APIのレスポンスはJSON形式となっています。
fetchメソッドの戻り値として取得したHTTPResponseオブジェクトのgetContentTextメソッドを使って、HTTPレスポンスを文字列として取得します。
その文字列を、JSONオブジェクトのparseメソッドを使って、オブジェクトに変換します。
const json = JSON.parse(res.getContentText());
スプレッドシートに書き出すために2次元配列に変換する
取得したJSONデータは、オブジェクトの配列で格納されています。
配列の要素は、チャット情報がオブジェクトとして格納されています。
![](https://assets.st-note.com/img/1657951930348-JT6APAGtOs.png?width=1200)
チャット情報のオブジェクトのキーを、見出し行として使用します。
Objectクラスのkeysメソッドを使用して、オブジェクトのキーを配列として取得し、見出し行を作成します。
const header = Object.keys(json[0]);
header変数を標準出力に表示すると、チャット情報のオブジェクトのキーが取得できているのが確認できました。
![](https://assets.st-note.com/img/1657952051103-XrwCei7p5P.png?width=1200)
続いて、配列で格納されているチャット情報のオブジェクトから、値のみを配列として取得するのに、Objectクラスのvaluesメソッドを使用します。
const values = [];
for ( const room of json ){
values.push(Object.values(room));
}
チャット情報のオブジェクトの「値」を、配列として取得します。
![](https://assets.st-note.com/img/1657952146628-Toa63pxc5l.png?width=1200)
先ほど取得した見出し行を、スプレッドシートに書き出す配列の先頭に追加します。
values.unshift(header);
Googleスプレッドシートに書き出します。
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('チャット一覧');
sheet.getRange(1, 1, values.length, values[0].length).setValues(values);
実行した結果は、下記です。見出し行には、チャット情報のオブジェクトのキーが、2行目以降はチャット情報のオブジェクトの値が出力されています!
![](https://assets.st-note.com/img/1657952198669-Ympxw0FHgI.png?width=1200)
まとめ
今回は、GASでChatwork API を使って、チャット一覧を取得し、Googleスプレッドシートに出力する実装についてまとめました。
参考サイト
HTTPレスポンスのJSON形式のデータを、オブジェクトの「キー」と「値」を取得する方法は、こちらの記事を参考にしました。ありがとうございました!