💳
クレジットカードの明細を即時反映させる
実際の表示
クレジットとデビットのいいとこ取りをしたい
クレジットカード
メリット
- 還元率が高い
- 安全性(不正利用されても口座から引き落とされる前に止められる)
デメリット
- 明細反映が遅い
デビットカード
メリット
- 明細がすぐに反映される
デメリット
- 還元率が低い
- 安全性が低い(不正利用されたら口座からすぐに引き落とされる)
クレジットカードの明細がすぐに反映されればすべて解決では?
即時利用通知の罠
近年、クレジットカードでも即時利用通知が来ることによって、管理がしやすいように思えますが、今月の利用金額として表示されるのには明細反映後(数日~)なので、管理がややしづらいのです。(利用金額として反映するのは技術的には容易に実現できるので、カード会社の不正確なデータを反映したくないという思想やいっぱい使ってほしいという考えがあると思われます)
ということで、利用通知メールから利用時間、利用場所、利用金額を抽出してやろうと思います。
システム構成
ローコードで行きます。
- 利用通知メールが届きます
- GASで利用メールを読み取ります
- スプレッドシートに書き込みます
- Looker Studioで可視化します
届くメール
コード
以下のコードを時間トリガで実行します。
function myFunction2() {
const today = new Date()
let yesterday = new Date(today)
yesterday.setDate(today.getDate() - 1)
const yyyy = yesterday.getFullYear()
const mm = yesterday.getMonth()
const dd = yesterday.getDate()
const queryDate = yyyy+'/'+mm+'/'+dd
Logger.log(queryDate)
// Gmail検索
const QUERY = 'from:statement@vpass.ne.jp -subject:お支払金額のお知らせ after:' + queryDate
const threads = GmailApp.search(QUERY)
// Gmail抽出条件
const regexp_date = new RegExp( '(?<=利用日:).*' )
const regexp_shop = new RegExp( '(?<=利用先:).*' )
const regexp_tx = new RegExp( '(?<=利用取引:).*' )
const regexp_exp = new RegExp( '(?<=利用金額:).*?(?=円)' )
// スプレッドシート出力設定
const BOOK_ID = YOUR_BOOK_ID // ご自分のスプレッドシートのIDを入れましょう
const SHEET_NAME = "シート1"
const sheet = SpreadsheetApp.openById(BOOK_ID).getSheetByName(SHEET_NAME)
// 一致スレッド分処理
for(const thread of threads){
for(i=0;i<thread.getMessageCount();i++){
msg = thread.getMessages()[i]
id = msg.getId()
if (sheet.createTextFinder(id).findAll().length == 0){
const body = msg.getPlainBody()
// 正規表現で抽出
const date = body.match(regexp_date)
const shop = body.match(regexp_shop)
const tx = body.match(regexp_tx)
const exp = body.match(regexp_exp)
// スプレッドシート追加処理
const newRaw = [String(id),String(date),String(shop),String(tx),String(exp)]
sheet.appendRow(newRaw)
}
}
}
}
欠点
- 利用店舗が正確でないことがあります
- 利用通知メールが届かない場合があるようです
追加の動機
- クレジットカード会社のアプリの起動にやや時間がかかる
- カード会社のアプリは家計管理にあまり向いていない
- いままで、RevolutというUI/UXが良いアプリを使っていたが、チャージ手数料がかかるようになった
Discussion