GASでデビットカードの使用履歴を取得


デビットカードを使用したときにGmailに決まったフォーマットのメールが来るので、それを解析してカードの使用履歴を取得するプログラムを作成した。 また、WebAPIとしてデプロイし、外部から呼び出せるようにした。

コード

const Keyword="from:(mail@debit.bk.mufg.jp) 【三菱UFJ‐VISAデビット】ご利用のお知らせ after:";
//スレッドを探すための検索ワード、アプリでの検索と同様に送信者や期間で絞り込むことができる。
function getDate(yesterday){
const year = yesterday.getFullYear();
const month = yesterday.getMonth() + 1;
const date = yesterday.getDate();
return year+"/"+month+"/"+date;
}
//日付で絞り込むため、yy/mm/dd形式で日付を返す関数
function search() {
let yesterday=new Date();
yesterday.setDate(yesterday.getDate()-1);
const date=getDate(yesterday)
const threads=GmailApp.search(Keyword+date);
//スレッドを検索(Gmailでは同一送信者の日付の近いメールはスレッドとして自動でまとめられる)
const jsonData={items: []};
for (let i = 0; i < threads.length; i++) {
var messages = threads[i].getMessages();
for (let j = 0; j < messages.length; j++) {
const message = messages[j];
const msgDate = message.getDate();
if (msgDate < yesterday) {
continue;
}
//各メールごとにもう一度日付を確認する必要がある
const body = message.getPlainBody(); // テキストの本文を取得
const lines = body.split("\n");
const price=lines[6].replace("ご利用金額(円)  : ","").replace("\r","");
const store=lines[7].replace("ご利用先      : ","").replace("\r","");
//本文から正規表現で必要なデータのみ取得
jsonData.items.push({
price:price,
store:store
})
}
}
return jsonData;
}
function doGet(e) {
let data = search();
let json = JSON.stringify(data); //
let response = ContentService.createTextOutput(json);
response.setMimeType(ContentService.MimeType.JSON);
return response;
}
//APIが呼ばれた時の動作

実行例

{
"items": [
{
"price": "710",
"store": "MCDONALD S"
},
{
"price": "960",
"store": "NAKAU"
},
{
"price": "309",
"store": "SEVEN-ELEVEN"
}
]
}