GASでデビットカードの使用履歴を取得
デビットカードを使用したときにGmailに決まったフォーマットのメールが来るので、それを解析してカードの使用履歴を取得するプログラムを作成した。 また、WebAPIとしてデプロイし、外部から呼び出せるようにした。
コード
//スレッドを探すための検索ワード、アプリでの検索と同様に送信者や期間で絞り込むことができる。
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" } ]}