##Google Apps ScriptからAsana APIを呼んでみる。
メールが来たら、Asanaにタスクを立てるとか、Asanaのタスクを全部読んで報告シートを更新するとか、Google Apps ScriptからAsana APIを呼びだして利用すると便利です。
今回、Asanaを使うコードをクラス化してみました。
class AsanaManager {
constructor(token) {
this.token = token;
}
//プロジェクトのタスク一覧を取得
getAllTaskByProject(projectId) {
const url = 'https://app.asana.com/api/1.0/projects/' + projectId + '/tasks';
const data = this.getAsanaData(url)
return data;
};
//プロジェクトのセクション一覧を取得
getAllSectionByProject(projectId) {
const url = 'https://app.asana.com/api/1.0/projects/' + projectId + '/sections';
const data = this.getAsanaData(url)
return data;
};
//セクションのタスク一覧を取得
getAllTaskBySection(sectionId) {
const url = 'https://app.asana.com/api/1.0/sections/' + sectionId + '/tasks';
const data = this.getAsanaData(url)
return data;
};
//タスクの情報を取得
getTaskData(task_gid) {
const url = 'https://app.asana.com/api/1.0/tasks/' + task_gid;
const data = this.getAsanaData(url)
return data;
};
//カスタムフィールドを取得
getACustomField(customFieldId) {
const url = 'https://app.asana.com/api/1.0/custom_fields/' + customFieldId;
const data = this.getAsanaData(url)
return data;
};
//getでAsanaからデータ取得する関数
getAsanaData(url) {
console.log(url);
const token = this.token;
const options = this.getGetOption(token);
const response = UrlFetchApp.fetch(url, options);
const jobj = JSON.parse(response);
const data = jobj["data"];
return data;
}
//getなオプションを作成するよ。
getGetOption(token) {
const headers = {
Authorization: "Bearer " + token,
};
const options = {
method: "get",
contentType: "application/json",
headers: headers,
muteHttpExceptions: true,
};
return options;
}
//ここからタスク作る子たち
//タスクの作成
//https://developers.asana.com/docs/create-a-task
//objPayload(object) Body parameter
createTask(objPayload) {
const url = `https://app.asana.com/api/1.0/tasks`;
const data = this.postAsanaData(url, objPayload);
console.log('createTask', data);
return data;
}
//セクションにタスクを移動するよ
//https://developers.asana.com/docs/create-a-section-in-a-project
//sectionId(Number) 移動したいセクションID
//objPayload(object) Body parameter
addTaskToSection(sectionId, objPayload) {
const url = `https://app.asana.com/api/1.0/sections/${sectionId}/addTask`;
const data = this.postAsanaData(url, objPayload);
console.log('addTaskToSection', data);
return data;
}
//サブタスクを作成するよ
//https://developers.asana.com/docs/create-a-subtask
//taskId(Number)サブタスクを追加するタスクID
//objPayload(object) Body parameter
createSubtask(taskId, objPayload) {
const url = `https://app.asana.com/api/1.0/tasks/${taskId}/subtasks`;
const data = this.postAsanaData(url, objPayload);
console.log('createSubtask', data);
return data;
}
//postでAsanaからデータ追加する関数
postAsanaData(url, objPayload) {
console.log(url);
const token = this.token;
const options = this.getPostOption(token, objPayload);
const response = UrlFetchApp.fetch(url, options);
console.log(response.getResponseCode());
const jobj = JSON.parse(response);
const data = jobj["data"];
return data;
}
//postバージョンのオプションを返すよ
getPostOption(token, objPayload) {
const headers = {
"Authorization": "Bearer " + token
};
const payload = this.getJson(objPayload);
const options = {
"method": "post",
"contentType": "application/json",
"Accept": "application/json",
"headers": headers,
"payload": payload,
"muteHttpExceptions": true
}
console.log(options);
return options;
}
//オブジェクトをJSONにする
getJson(object) {
var json = JSON.stringify(object);
console.log(json);
return json;
}
//ここからタスクを更新する子たち(put)
//タスクを更新するよするよ
//https://developers.asana.com/docs/update-a-task
//taskId(Number) 更新するタスクID
//objPayload(object) Body parameter
updateTask(taskId, objPayload) {
const url = `https://app.asana.com/api/1.0/tasks/${taskId}`;
const data = this.putAsanaData(url, objPayload);
console.log('updateTask', data);
return data;
}
//putでAsanaのデータを変更する関数
putAsanaData(url, objPayload) {
console.log(url);
const token = this.token;
const options = this.getPutOption(token, objPayload);
const response = UrlFetchApp.fetch(url, options);
console.log(response.getResponseCode());
const jobj = JSON.parse(response);
const data = jobj["data"];
return data;
}
//putバージョンのオプションを返すよ
getPutOption(token, objPayload) {
const headers = {
"Authorization": "Bearer " + token
};
const payload = this.getJson(objPayload);
const options = {
"method": "put",
"contentType": "application/json",
"Accept": "application/json",
"headers": headers,
"payload": payload,
"muteHttpExceptions": true
}
console.log(options);
return options;
}
}
次は、使い方を紹介いたします。