2024年6月18日
yuki_2021さん、katupitiさんいつもスターをありがとうございます。
先月のアメリカ旅行と先日の母の誕生日祝いで、結構出費がある。基本的には、全て三井住友カード(NL)を使っている。ひとつのカードに絞る事で、支出の管理が明確になるし。
三井住友カード(NL)は、使用すると、メールが届く。こんな感じ。
何通も届きますが、自分の利用履歴が分かって便利。ただ、ちょっと管理するのが面倒です。
それで、このメールをGoogleスプレッドシートにまとめたいな、と思いました。
偶然、次の本を読んでいたのにも触発されたのかもしれません。
それで、本に書いてあるようなテンプレートで、ChatGPTに聞いたら、GASが表示されました。(最後にコピペを記載します)
指示通りに、スクリプト(プログラム)を設定し、実行すると、利用日時と利用金額はそのままで行けたのですが、利用明細は、正規表現での検索が上手くいきません。それからは、試行錯誤。
利用明細を抽出するには、Gmail本文をgetPlainBody()で読み取り、/◇利用先:.*/でmatchすると上手くいきました。上記のメール本文には、◇利用先:なんて表示が無いのにねえ。
しかも、ここまでやってから気づいたのですが、クレジットカードの明細って、カード会社のWebサイトで確認できるのですよ(当たり前だけど)。あー、気付くの遅すぎ。まあ、頭の体操&暇つぶしには、良かったですわ。
ChatGPTへの質問・指示が大事なのはよく分かりましたが、回答を理解、判断できないと、猫に小判、豚に真珠ですね。
ブログランキングに参加してみました。 クリックしていただけると嬉しいです。
了解しました。あなたが提供してくれた情報に基づいて、Gmailから三井住友カードの利用明細メールを解析し、利用日時、利用明細、および利用金額を抽出してGoogleスプレッドシートにまとめるためのGoogle Apps Scriptを作成します。
### スクリプト
以下は、指定されたメールから必要な情報を抽出してGoogleスプレッドシートに書き込むGASスクリプトです。
```javascript
function extractCardDetails() {
const threads = GmailApp.search('subject:"ご利用のお知らせ【三井住友カード】"');
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// ヘッダーがない場合はヘッダーを作成
if (sheet.getLastRow() === 0) {
sheet.appendRow(['利用日時', '利用明細', '利用金額']);
}threads.forEach(thread => {
const messages = thread.getMessages();
messages.forEach(message => {
const body = message.getBody();
// 「ご利用日時:」の後の日時を抽出
const dateTimeRegex = /ご利用日時:(\d{4}\/\d{2}\/\d{2} \d{2}:\d{2})/;
const dateTimeMatch = body.match(dateTimeRegex);
const dateTime = dateTimeMatch ? dateTimeMatch[1] : '不明';// 利用明細を抽出
const detailRegex = /ご利用日時:.*?([\s\S]*?)ご利用金額:/;
const detailMatch = body.match(detailRegex);
const detail = detailMatch ? detailMatch[1].trim() : '不明';// 利用金額を抽出
const amountRegex = /ご利用金額:([\d,]+)円/;
const amountMatch = body.match(amountRegex);
const amount = amountMatch ? amountMatch[1].replace(/,/g, '') : '不明';
// スプレッドシートに書き込み
sheet.appendRow([dateTime, detail, amount]);
});
});
}
```### 説明
1. **Gmail 検索**: `GmailApp.search` を使用して、件名が「ご利用のお知らせ【三井住友カード】」のメールを検索します。
2. **スプレッドシート**: `SpreadsheetApp.getActiveSpreadsheet().getActiveSheet` を使って、アクティブなスプレッドシートを取得します。スクリプトを実行する前に、適切なスプレッドシートを開いておく必要があります。
3. **ヘッダーの確認と作成**: シートの最終行が0(空シート)であれば、ヘッダー行を作成します。
4. **メール解析**: 各メールの本文から必要な情報を正規表現で抽出します。
- **利用日時**: `ご利用日時:` の後に続く日時を抽出。
- **利用明細**: `ご利用日時:` と `ご利用金額:` の間にあるテキストを抽出。
- **利用金額**: `ご利用金額:` の後に続く金額を抽出し、コンマを削除して数値形式にします。
5. **スプレッドシートに書き込み**: 抽出したデータをスプレッドシートに書き込みます。### 実行方法
1. **スプレッドシートを開く**: このスクリプトを実行するGoogleスプレッドシートを開きます。
2. **スクリプトエディタを開く**: スプレッドシートのメニューから「拡張機能」 > 「Apps Script」を選択します。
3. **スクリプトを貼り付ける**: 上記のスクリプトをエディタにコピーして貼り付けます。
4. **API権限の許可**: スクリプトを初めて実行する際に、Gmailやスプレッドシートへのアクセス許可を求められます。指示に従って許可を与えます。
5. **スクリプトを実行する**: `extractCardDetails` 関数を選択し、「▶️実行」ボタンをクリックします。これにより、スプレッドシートに三井住友カードの利用明細がまとめて管理されるようになります。今後も新しい利用明細がメールで届くたびに、このスクリプトを実行して情報を追記していくことができます。