
【GAS】Google Apps Script 活用事例 HRMOSの書類選考の設定通知メールをTo Doリストに登録するスクリプト
Google Task APIを使ったスクリプトを書いていた時、ふと、これってHRMOSの書類選考を登録できたら便利じゃね?と思って書いてみました。
To Doリストの登録先のIDを調べるスクリプト
/**
* To Doリストの全リストのIDと名前を取得する
*
*/
function loadToDoList() {
const tasks = Tasks.Tasklists.list();
const items = tasks.items;
console.log(items);
}
ログ
[ { etag: '"NjExMzc5MDEy"',
selfLink: 'https://www.googleapis.com/tasks/v1/users/@me/lists/********,
kind: 'tasks#taskList',
title: 'デフォルト',
updated: '2021-03-12T03:18:02.077Z',
id: '******************' },.........続く
To Doリストは、複数作成する事ができます。例えば、自分の場合、デフォルトというTo Doリストがあります。ここに、HRMOSから届いたメールを登録します。
調べ終えたら、generateTaskItems内のidに書き加えます。諸事情で、スクリーンショットを掲載する事が出来ませんが....参考になれば幸いです。
スクリプト全文
/**
* Gmailのスレッドを検索し、書類選考のメールだけを、To Doリストに取得する。
* 19:00 - 20:00 頃にトリガーで発動させる
*
*
*/
function generateTaskItems(){
const id = '***********************';
const taskItemArray = loadTasks_(id);
const messages = getGmail_('書類選考が設定されました', 5);
messages.map(message => registerNewTasks_(message[0], id, taskItemArray));
}
/**
* Gmailのスレッドを検索し、HRMOSのURLと件名を取得
*
* @param{string} 検索ワード
* @param{quantity} 検索する数
*/
function getGmail_(query, quantity) {
const threads = GmailApp.search(query, 0, quantity); //最新の受信日から、7スレッドまでを検索
const messages = threads.map(thread => thread.getMessages().map(message => ({
//書類選考を設定してから、1日後に確認する必要がある。
date: formatDate(message.getDate(), 1, "yyyy-MM-dd'T'HH:mm:ss'Z'"),
subject: message.getSubject(),
url: message.getPlainBody().match(/https:\/\/hrmos.co.*/)[0],
})
) //map messages
); //map threads
console.log(messages);
return messages
}//end
/**
* Gmailのメッセージを受け取って、既存のタスクに登録がなければ、新規登録する。
*
* @param{object} Gmailのメッセージ
* @param{string} To DoリストのID
* @param{object} 1次元配列
*
*/
function registerNewTasks_(message, id, existingTaskArray){
const newTask = {
title: message.subject,
notes: message.url,
due: message.date
};
//既存タスクに登録されていなければ、新規登録する。
if(existingTaskArray === undefined){
Tasks.Tasks.insert(newTask, id);
}
else if(existingTaskArray.indexOf(newTask.title) === -1 ){
Tasks.Tasks.insert(newTask, id);
}
}
/**
*
* 該当するTo Doリストのタスク内容を1次元配列で取得する
*
*/
function loadTasks_(id) {
const tasks = Tasks.Tasks.list(id);
const items = tasks.items;
console.log(items);
//タスクが何も登録されていない場合はスキップ
if(items === undefined){return};
console.log('items タスクの登録数', items.length);
//ID、タスク、登録先、締め切り、ステータス、優先度
const reducer = (accumulator, current) => {
const title = current.title;
accumulator.push(title);
return accumulator;
};//reducer
//オブジェクトから必要なものに絞って1次元配列へ変換
const results = items.reduce(reducer, []);
console.log(results);
return results
}
//dateオブジェクトから文字列に変換する
const formatDate = (date, number, format) => {
date.setDate(date.getDate() + number);
return Utilities.formatDate(date, 'JST', format);
}
ちなみにHRMOSの書類選考の設定通知メールを、スプレッドシートに転記するスクリプトもあります。