はじめに
Asana管理者の方へ。全ユーザーリストの出し方をご紹介します。
概ねコピペでOKですが、ワークスペースIDやAPIトークン、シート名など
一部入力が必要な部分もあります。
ワークスペースIDやトークンの参照方法については過去記事で解説しています。
Asana APIトークンや各種IDを取得する基本的な方法を解説
必要に応じてあわせてご覧ください!
コード
/**
* メインメソッド 日次トリガー設定するなど
*/
function writeSheetAsanaUsers(){
try{
// JSON形式で取得
const usersJson = getAsanaUsersAll();
// 二次元配列に整形
let arr = usersJson.map(obj => ([obj.gid, obj.name, obj.email]));
const header = ["gid","氏名","メールアドレス"];
arr.unshift(header);
// クリアして貼り付け
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("出力先シート名");
sheet.getRange("A1:Z").clear(); // ご都合に合う範囲に変更してください。
sheet.getRange(1,1,arr.length, arr[0].length).setValues(arr);
}catch(e){
// エラー処理 メール送信なりなんなり
console.log(e);
GmailApp.sendEmail("エラーメール送信先アドレス","メールタイトル",`メールbody ${e.message}`);
}
}
/**
* Asana全ユーザを取得
* https://developers.asana.com/reference/getusers
* @return {json} [{email:"str", name:"str", gid:"str"},...]
*/
function getAsanaUsersAll(){
const workspaceId = "ワークスペースIDを入力";
const token = "トークンを入力";
const baseUrl = `https://app.asana.com/api/1.0/users?workspace=${workspaceId}&opt_fields=email,name&limit=100`;
const options = {
"method" : "GET",
"headers" : {"Authorization": `Bearer ${token}`,
"accept": "application/json"
},
"muteHttpExceptions" : true
};
let nextPage = null;
let result = [];
// ページループ
do{
const url = `${baseUrl}${nextPage ? `&offset=${nextPage.offset}` : ""}`;
const singleResponse = UrlFetchApp.fetch(url, options);
const jsonResult = JSON.parse(singleResponse);
result = result.concat(jsonResult.data);
nextPage = jsonResult.next_page;
}
while(nextPage);
return result;
}
簡易的な解説
まず始めにgetAsanaUsersAll関数でAsanaAPIを使用、JSON形式でユーザ情報を取得します。
リクエストURLのopt_fieldsに何を指定するかで、取得可能な値が変わります。
このAPIで取得可能な情報で有用なものはemailぐらいかなと思いemailを指定していますが、
取得可能な項目の詳細についてはは公式ドキュメントをご覧ください。
また、1回のリクエストで取得可能なユーザ数が100件ですので、
do-while文で全員分を取得できるまでループ実行している点もポイントです。
取得した情報は配列のmapメソッドで二次元配列に整形、貼り付けしています。
mapメソッドは非常に便利ですので分からない方は習得をオススメします。
mapメソッドについてはこちらの記事もご参考にどうぞ。
GAS初心者がfor文やif文の次に学ぶと急激にレベルアップする技術7選
尚、当コードはコピペしてもらう事を前提としているほか、
トリガーで毎日データを更新するような想定をしています。
貼り付け前のシートクリア、try-catch文でエラー時の通知は、それらの前提のための機能です。
単純に1回出力したいだけなら不要かと思います。要不要に応じて削ってください。
さいごに
無事に出力できましたでしょうか。
過去記事も参考にしながら、ぜひトライしてみてくださいね。