見出し画像

【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);

}

ログ

スクリーンショット 2021-03-12 19.14.06

[ { 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の書類選考の設定通知メールを、スプレッドシートに転記するスクリプトもあります。



この記事が気に入ったらサポートをしてみませんか?