-
-
Save sagarOsammy/a6ce9c4555e3b1edcd98e6b38a224861 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function getRelevantMessages() | |
{ | |
var threads = GmailApp.search("newer_than:1d AND in:inbox AND from:axisbank.com AND subject:Transaction alert AND -label:axis_processed",0,100); | |
var arrToConvert=[]; | |
for(var i = threads.length - 1; i >=0; i--) { | |
arrToConvert.push(threads[i].getMessages()); | |
} | |
var messages = []; | |
for(var i = 0; i < arrToConvert.length; i++) { | |
messages = messages.concat(arrToConvert[i]); | |
} | |
return messages; | |
} | |
function parseMessageData(messages) { | |
var records = []; | |
if (!messages) { | |
console.log("messages is undefined or null or just empty"); | |
return records; | |
} | |
for (var m = 0; m < messages.length; m++) { | |
var text = messages[m].getPlainBody(); | |
var matches = text.match(/Card no.\s(XX\d+)\sfor\sINR\s([0-9,]*\.*[0-9]*)\sat\s+(.+?)\son\s(\d+-\d+-\d+\s\d+:\d+:\d+)/); | |
console.log(matches); | |
console.log(matches.length); | |
if (!matches || matches.length < 4) { | |
console.log("No matches; couldn't parse continue with the next message"); | |
continue; | |
} | |
var rec = {}; | |
rec.card = matches[1]; | |
rec.currency = 'INR'; | |
rec.amount = matches[2]; | |
rec.merchant = matches[3]; | |
rec.date = matches[4]; | |
records.push(rec); | |
} | |
return records; | |
} | |
function getMessagesDisplay() | |
{ | |
var templ = HtmlService.createTemplateFromFile('messages'); | |
templ.messages = getRelevantMessages(); | |
return templ.evaluate(); | |
} | |
function getParsedDataDisplay() | |
{ | |
var templ = HtmlService.createTemplateFromFile('parsed'); | |
templ.records = parseMessageData(getRelevantMessages()); | |
return templ.evaluate(); | |
} | |
function saveDataToSheet(records) | |
{ | |
//REPLACE WITH YOUR GOOGLE SHEET URL | |
var spreadsheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/zTDJo5a6QK/edit#gid=1439879152 - REPLACE BETWEEN QUOTES"); | |
var sheet = spreadsheet.getSheetByName("Axis"); | |
for(var r=0;r<records.length;r++) | |
{ | |
sheet.appendRow([records[r].date,records[r].card, records[r].merchant, records[r].amount, records[r].currency] ); | |
} | |
} | |
function processTransactionEmails() | |
{ | |
var messages = getRelevantMessages(); | |
var records = parseMessageData(messages); | |
saveDataToSheet(records); | |
labelMessagesAsDone(messages); | |
return true; | |
} | |
function labelMessagesAsDone(messages) | |
{ | |
var label = 'axis_processed'; | |
var label_obj = GmailApp.getUserLabelByName(label); | |
if(!label_obj) | |
{ | |
label_obj = GmailApp.createLabel(label); | |
} | |
for(var m =0; m < messages.length; m++ ) | |
{ | |
label_obj.addToThread(messages[m].getThread() ); | |
} | |
} | |
function doGet() | |
{ | |
return getParsedDataDisplay(); | |
//return getMessagesDisplay(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<base target="_top"> | |
<title>Message Display Test</title> | |
<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css"> | |
</head> | |
<body style="padding:3em;"> | |
<h1>Messages</h1> | |
<ul> | |
<? for(var m=0;m<messages.length;m++){ ?> | |
<li><?= messages[m].getSubject() ?></li> | |
<p><?= messages[m].getPlainBody() ?></p> | |
<? } ?> | |
</ul> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<base target="_top"> | |
<title>Data parsed from emails</title> | |
<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css"> | |
</head> | |
<body style="padding:3em;"> | |
<h2>Parsed data from Messages</h2> | |
<table style="width:420px"> | |
<thead> | |
<tr> | |
<th>Date</th><th>Merchant</th><th>Card</th><th>Amount</th> | |
</tr> | |
</thead> | |
<tbody> | |
<? for(var m=0;m<records.length;m++){ ?> | |
<tr> | |
<td><?= records[m].date ?></td> | |
<td><?= records[m].merchant ?></td> | |
<td><?= records[m].card ?></td> | |
<td><?= records[m].currency ?></td> | |
<td><?= records[m].amount ?></td> | |
</tr> | |
<? }?> | |
</tbody> | |
</table> | |
<div class="block"> | |
<button id="save_to_sheet" class="blue">Save Data to Sheet</button> | |
<span id="saving_label" style="visibility:hidden">Saving ...</span> | |
</div> | |
<script> | |
document.querySelector("#save_to_sheet").addEventListener("click", | |
function(e) | |
{ | |
var self=this; | |
self.style.visibility = 'hidden'; | |
var saving_label = document.querySelector("#saving_label"); | |
saving_label.style.visibility = 'visible'; | |
google.script.run.withSuccessHandler(function() | |
{ | |
alert("Saved expense data"); | |
self.style.visibility = 'visible'; | |
saving_label.style.visibility = 'hidden'; | |
}).withFailureHandler(function() | |
{ | |
alert("an error occured while saving"); | |
self.style.visibility = 'visible'; | |
saving_label.style.visibility = 'hidden'; | |
}).processTransactionEmails(); | |
}); | |
</script> | |
</body> | |
</html> | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment