QRキャッシュレス決済手段として便利な楽天ペイ。私は普段ほとんどの買い物を楽天ペイにしています。そんな楽天ペイ、支払履歴はアプリから見ることができるのですが、自動でGoogleスプレッドシートにまとめたい!ということで、利用時にGmailに送られてくる「ご利用内容確認メール」を読み取って、GoogleスプレッドシートにまとめるGoogle Apps Scriptを作ってみました。
※Google Apps Scriptを用いてメールを読み取るため、「ご利用確認メール」はGmailに送る設定にする必要があります。
※メールを抽出するので、ご利用確認メールを削除してしまっていると当然抽出できません。アーカイブならOKです。
Google Apps Script コード
まず適当なGoogleスプレッドシートを作成し、「拡張機能」→「Apps Script」を選択して、スクリプトを新規作成します。
下記のコードを入力します。
function extractRakutenPayEmails() {
// Gmailで該当メールを検索
var query = 'subject:"楽天ペイアプリご利用内容確認メール"';
var threads = GmailApp.search(query);
// Googleスプレッドシートを開く
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName("楽天ペイ") || spreadsheet.insertSheet("楽天ペイ");
// シートをクリア
sheet.clear();
// シートのヘッダー設定
if (sheet.getLastRow() === 0) {
sheet.appendRow(["ご利用日時", "決済総額", "ご利用店舗"]);
}
// 日時とデータを格納する配列を作成
var rowData = [];
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 body = message.getPlainBody();
// ご利用日時、ご利用店舗、決済総額を抽出
var usageDate = body.match(/ご利用日時\s*([\s\S]*?)\n/)[1].trim();
var totalAmount = body.match(/決済総額\s*([\s\S]*?)\s*円/)[1].trim();// + "円";
var shop = body.match(/ご利用店舗\s*([\s\S]*?)(?:\n|-{40})/)[1].trim();
// 配列に追加
rowData.push([usageDate, totalAmount, shop]);
Logger.log([usageDate, totalAmount, shop]);
}
}
// usageDateを基準に日時が古い順にソート
rowData.sort(function(a, b) {
var dateA = new Date(a[0]);
var dateB = new Date(b[0]);
return dateA - dateB;
});
//Logger.log(rowData);
// Googleスプレッドシートに出力
for (var i = 0; i < rowData.length; i++) {
sheet.appendRow(rowData[i]);
}
}
コードが実行している内容としては、Gmailから「楽天ペイアプリご利用確認メール」という件名のメールを抽出し、その中から「ご利用日時」「決済総額」「ご利用店舗」の情報を抽出、配列に格納した上で、スプレッドシートの「楽天ペイ」というシートに記入するというものです。GASにそこまで詳しくないのでAIの力など借りながらなんとか作成しましたw
直近のものだけ追記する
上記のコードは、過去すべての楽天ペイメールを読み取って記載していきますが、2回目以降の実行や、直近のものだけを追記したいという場合、「シートをクリア」する部分をコメントアウトし、
// シートをクリア
//sheet.clear();
配列に追加する情報を、たとえば2023年のもののみにしたいという場合、
// 配列に追加
if (usageDate.startsWith("2023")) { // 2023年のデータのみを配列に追加
rowData.push([usageDate, totalAmount, shop]);
Logger.log([usageDate, totalAmount, shop]);
}
このように書き換えることで可能です。
コメント