定年後の人生:自由と退屈の狭間で(一日一新を目指します)

定年後の生活のリアルな姿を伝える(近況報告)

【今日の一新】ChatGPT(無料版)を使って、GASを組んでみた

2024年6月18日

yuki_2021さん、katupitiさんいつもスターをありがとうございます。

 

先月のアメリカ旅行と先日の母の誕生日祝いで、結構出費がある。基本的には、全て三井住友カード(NL)を使っている。ひとつのカードに絞る事で、支出の管理が明確になるし。

三井住友カード(NL)は、使用すると、メールが届く。こんな感じ。

カード利用時に届くメールの一部。利用の都度、届きます。

何通も届きますが、自分の利用履歴が分かって便利。ただ、ちょっと管理するのが面倒です。

それで、このメールをGoogleスプレッドシートにまとめたいな、と思いました。

 

偶然、次の本を読んでいたのにも触発されたのかもしれません。

 

 

それで、本に書いてあるようなテンプレートで、ChatGPTに聞いたら、GASが表示されました。(最後にコピペを記載します)

 

指示通りに、スクリプト(プログラム)を設定し、実行すると、利用日時と利用金額はそのままで行けたのですが、利用明細は、正規表現での検索が上手くいきません。それからは、試行錯誤。

 

利用明細を抽出するには、Gmail本文をgetPlainBody()で読み取り、/◇利用先:.*/でmatchすると上手くいきました。上記のメール本文には、◇利用先:なんて表示が無いのにねえ。

 

しかも、ここまでやってから気づいたのですが、クレジットカードの明細って、カード会社のWebサイトで確認できるのですよ(当たり前だけど)。あー、気付くの遅すぎ。まあ、頭の体操&暇つぶしには、良かったですわ。

 

ChatGPTへの質問・指示が大事なのはよく分かりましたが、回答を理解、判断できないと、猫に小判、豚に真珠ですね。

 

ブログランキングに参加してみました。 クリックしていただけると嬉しいです。

にほんブログ村 その他生活ブログ FIRE(無職・フリーター)へ
にほんブログ村 その他日記ブログ 60代男性日記へ
にほんブログ村

 

了解しました。あなたが提供してくれた情報に基づいて、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` 関数を選択し、「▶️実行」ボタンをクリックします。

これにより、スプレッドシート三井住友カードの利用明細がまとめて管理されるようになります。今後も新しい利用明細がメールで届くたびに、このスクリプトを実行して情報を追記していくことができます。