こんにちは!
PRAアドベントカレンダー2022の14日目記事です
我が家では12月に必ずコストコへ行きますので、コストコ会員限定メールマガジンの通知を自動化したことを無理やり記事にしてみました
これのどこがRPA?業務改善?1㍉ぐらいはかすってないですかね
ごめんなさい🙇先に謝っておきます。
やったこと
gmailに本日届いた「コストコ会員限定メールマガジン」を抽出して、本文内のリンクをLINENotifyに転送する
gmailからメールを抽出する
GASでGメールを検索するにはGmailApp.search
の引数に検索演算子を含めた検索条件を文字列で指定します
検索条件はこのようにGメールの画面でフィルタリングした文字列をそのまま使用できるので、
コーディング後の状態がイメージしやすくて助かります
Gメール標準の検索演算子はこちら
検索結果は2次元配列のメールスレッドに格納されているので、ループしながら1件ずつ読みこんでいきます
const today = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd');
const query = `from:コストコ会員限定メールマガジン after:${today}`;
const threads = GmailApp.search(query);
threads.forEach(thread => {
const gmails = thread.getMessages();
gmails.forEach(gmail => {
// LINEへ通知する処理
});
});
メール本文からURLを抽出する
メール本文から抽出したいセールのURLは本文の4行目あたりに記載されています
先頭から10行ほどをピックアップして該当行からURLを直接抜き出します
本来ならURL文字列を検索する正規表現を使って抽出すべきなんでしょうが、
なぜか抽出できなかったので今後の課題としています
const today = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd');
const query = `from:コストコ会員限定メールマガジン after:${today}`;
const threads = GmailApp.search(query);
threads.forEach(thread => {
const gmails = thread.getMessages();
gmails.forEach(gmail => {
const bodylist = gmail.getPlainBody().split('\r\n').slice(0, 9);
// 3行目と4行目の条件が一致したらリンクを送信する
const findIndex = bodylist.indexOf('画像付メルマガはこちらでご覧いただけます。');
if (findIndex > -1) {
const url = bodylist[findIndex + 1].replace(' (PC専用サイト)', '');
SendNotify(gmail.getSubject(), url);
}
});
});
LINEへ通知する
LINEへの通知先は自分だけなので、今回はLINENotifyを使用しています
LINENotifyのアクセストークンはスクリプトプロパティに格納しておきます
function SendNotify(title, url) {
let message = title + '\n' + url;
const token = PropertiesService.getScriptProperties().getProperty('ACCESS_TOKEN');
let options = {
"method": "post",
"headers": {
"Authorization": "Bearer " + token
},
"payload": {
"message": message
}
}
UrlFetchApp.fetch(url, options)
}
まとめ
プライベートで必要なことをちょこっと作るのは気が楽でいいですね
今回は特定のメール受信とLINEへの通知を自動化したのですが、
Gメールの検索条件や連携内容、連携先などが入れ替えできるような仕組みにしておけば
他で応用ができるので便利ですね
最後まで読んでいただき、ありがとうございました
補記:コストコ会員限定メールマガジンとは
コストコ会員限定メールマガジンに登録すると今週と翌週のセール情報を見ることができます。
毎週日曜日と木曜日の12時頃に届きます。