
カードの使用履歴をLINEに通知して無駄遣いを減らす
私は現在大学生でデビッドカードを持っています。
なぜクレジットカードではないのか?
それは単純に使いすぎて翌月に自己破産するからです(笑)
私以外にもカードだとついつい使いすぎちゃう人は多いと思います。その気軽さがカードの悪い点とも言えますね。
今回はカードの無駄遣いを減らすために、カードを使用するたびにLINEに通知して強制的に罪悪感を植え付けることにします。
作ったもの
私は普段Pythonを使いますが、常時実行するにはサーバーが必要になります。サーバーを持っていない人はレンタル(有料)する必要があるし、持っていたとしても準備が面倒ですよね。
そんなときに便利なのがGoogle Apps Script (略してGAS)です。
これはGoogleのサービスでサイト上でコーディングができるので開発環境を用意する必要がなく、さらに常時実行なども無料でできます。
今回はこれを使います。
ソースコードをこんな感じで作成しました。
function SetTrigger(){
var today = new Date();
var year = today.getFullYear();
var month = today.getMonth();
var day = today.getDate();
let date = new Date(year, month, day+1, 0, 1);
ScriptApp.newTrigger('GetEmailOnDay').timeBased().at(date).create();
}
function DeleteTrigger(){
let triggers = ScriptApp.getProjectTriggers();
for (let trigger of triggers){
let funcName = trigger.getHandlerFunction();
if(funcName == 'GetEmailOnDay'){
ScriptApp.deleteTrigger(trigger);
}
}
}
function GetEmailOnDay() {
var today = new Date();
var yesterday = new Date(today);
yesterday.setDate(today.getDate() - 1);
var startOfYesterday = new Date(yesterday.getFullYear(), yesterday.getMonth(), yesterday.getDate(), 0, 0, 0);
var endOfYesterday = new Date(yesterday.getFullYear(), yesterday.getMonth(), yesterday.getDate(), 23, 59, 59);
GetEmail(startOfYesterday, endOfYesterday, yesterday);
}
function GetEmail(startTime, endTime, day) {
var from = "mail@debit.bk.mufg.j";
var threads = GmailApp.getInboxThreads();
var yesterday = new Date(day);
var Month = yesterday.getMonth()+1;
var Day = yesterday.getDate();
outerloop: for (var i = 0; i < threads.length; i++) {
var messages = threads[i].getMessages();
for (var j = 0; j < messages.length; j++) {
var message = messages[j];
var timestamp = message.getDate();
if (timestamp >= startTime && timestamp <= endTime) {
if (message.getFrom() === from){
var body = message.getBody()
var amountMatch = body.match(/ご利用金額(円)\s*:\s*([\d,]+)/);
var shopMatch = body.match(/ご利用先\s*:\s*([^\n\r]+)/);
var amount = amountMatch[1].replace(/,/g, '');
var shop = shopMatch[1].trim();
var amount = parseInt(amount).toLocaleString();
var message = '\n\n【'+ Month + '月' + Day + '日】\n\n利用金額:' + amount + '円\n利用先:' + shop;
NoticeToLINE(message);
}
}else{
break outerloop;
}
}
}
message = '\n\n【'+ Month + '月' + Day + '日】\n\nカードの利用はありませんでした'
NoticeToLINE(message);
DeleteTrigger();
SetTrigger();
}
function NoticeToLINE(message) {
var accessToken = 'LINE NOTIFY ACCESS TOKEN';
var lineNotifyApi = 'https://notify-api.line.me/api/notify';
var option = {
'method': 'post',
'headers': {
'Authorization': 'Bearer ' + accessToken,
},
'payload': {
'message': message
},
};
var response = UrlFetchApp.fetch(lineNotifyApi, option);
if (parseInt(response.getResponseCode()) != 200){
Logger.log("message:"+message);
Logger.log(response.getContentText());
}
}
最近GASを使い始めましたが、コーディングに関してはJavaScriptとよく似てるので簡単ですね。
72行目にLINE Notifyにトークンを貼り付ければ完成です。
あとはGetEmailOnDay()を実行すれば、前日のカードの使用通知をGmailから取得してきて、LINE Notify経由でメッセージを送信してくれます。
こんな感じ↓↓

ソースコードと使い方についてはGitHubのREADME.mdを見てください。
自由に改良して使ってください。