[微課金]楽天PAYの通知→生成AIで費目分類→家計簿 の自動連携

昨日、楽天PAYの通知から、家計簿(Googleスプレッドシート)への転記は自動化出来たので、今回は

「支払先から生成AIに費目を自動で選んでもらう」システムを作ってみました。
これで、僕らは普段通り楽天PAYを使っているだけで勝手に家計簿が出来上がるわけです。

  • いつ
  • どこで
  • どれくらい使ったか
  • それの費用項目(費目)は何か

の4点だけしか自動反映できないのはご了承ください。(いつか、レシートの写真をとるだけで”何を買ったか”まで家計簿へ反映させるプログラムも作る予定)

さて気を取り直して、今回は「生成AIにデータを送って、費目を分類してもらい、その結果を受け取る」ところを実装いたします。

まずは、費目の項目を増やします

昨日作った家計簿の4列目(まぁどこでもいいですが)に、費目を追加します。

その次に、Apps Script の画面へ行き、以下のコードを前回のコードを丸ごと上書きして貼り付けてください。(前回作ったコードも含めた完成系なので大丈夫です)

function importRakutenPay() {
  const ss      = SpreadsheetApp.getActiveSpreadsheet();
  const sheet   = ss.getSheetByName('シート1');
  const threads = GmailApp.search(
    'subject:楽天ペイアプリご利用内容確認メール newer_than:24h in:inbox'
  );

  threads.forEach(thread => {
    thread.getMessages().forEach(msg => {
      const body        = msg.getPlainBody();
      const dateMatch   = body.match(/ご利用日時\s*([0-9\/]+)/);
      const shopMatch   = body.match(/ご利用店舗\s*([^\n]+)/);
      const amountMatch = body.match(/決済総額\s*¥?([\d,]+)/);

      if (dateMatch && shopMatch && amountMatch) {
        const payDate = dateMatch[1];
        const payee   = shopMatch[1].trim();
        const amount  = amountMatch[1].replace(/,/g, '');

        // ■ ここから AI 分類 ■
        const category = classifyWithAI(payee);
        // ■ ここまで ■

        sheet.appendRow([payDate, payee, amount, category]);
      }
    });
    // thread.moveToArchive(); // 必要ならアーカイブ
    thread.moveToArchive();
  });
}

/**
 * 支払先を ChatGPT に渡して「食費」「交通費」などに分類してもらう
 * レスポンスの最初の行をカテゴリとして返します
 */
function classifyWithAI(payee) {
  // プロパティから API キーを読み込む
  const apiKey = PropertiesService.getScriptProperties()
                   .getProperty('OPENAI_API_KEY');
  // ChatGPT へのプロンプトを作成
  const prompt = `
次の支払先名だけを見て、最も適切な家計簿のカテゴリ名(一語か二語)を返してください。
選択肢の例:食費、外食費、交通費、書籍・教養費、雑貨、交友費、雑費
支払先名: "${payee}"
カテゴリ:`;
  
  // OpenAI API に投げるリクエスト
  const url = 'https://api.openai.com/v1/chat/completions';
  const payload = {
    model: 'gpt-3.5-turbo',
    messages: [
      { role: 'system', content: 'あなたは家計簿の項目を分類する専門家です。' },
      { role: 'user',   content: prompt }
    ],
    max_tokens: 10,
    temperature: 0.0
  };
  
  const options = {
    method:  'post',
    contentType: 'application/json',
    headers: { Authorization: 'Bearer ' + apiKey },
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  };
  
  const response = UrlFetchApp.fetch(url, options);
  const code = response.getResponseCode();
  const text = response.getContentText();

  Logger.log(PropertiesService.getScriptProperties().getKeys());
  
  // ステータスコードが200以外はエラー扱い
  if (code !== 200) {
    Logger.log(`OpenAI API Error: HTTP ${code} – ${text}`);
    return 'その他';
  }
  
  let data;
  try {
    data = JSON.parse(text);
  } catch (e) {
    Logger.log(`JSON parse error: ${e}`);
    Logger.log(text);
    return 'その他';
  }
  
  // choices があるかチェック
  if (!data.choices || !data.choices[0] || !data.choices[0].message) {
    Logger.log(`Unexpected API response: ${text}`);
    return 'その他';
  }
  
  // 正常に取れたら先頭のテキストを返す
  const result = data.choices[0].message.content.trim().split('\n')[0];
  return result || 'その他';
}

プログラミングで何をやっているかは、生成AIに聞いてください💦

貼り付けていただいて「実行」しても、エラーが出ると思います。

そして、スプレッドシートの費目のところに「その他」と入ると思います。
エラーが出てもとりあえずは”その他”と出力してくれるプログラムだからです。

なぜエラーが出るのかというと、APIキーを設定していないからです。APIキーとは、生成AIを使うための鍵(キー)です。この次に「OpenAI(生成AI) のAPIキーの取得」をします。
APIキーの取得に関して、このサイトの方が画像も多く分かりやすかったです。(他人任せのスタイル)


OpenAI APIキーの取得方法


1. OpenAI アカウントの作成・ログイン

  1. OpenAI の公式サイトにアクセス
  2. 右上の Sign up(サインアップ)または Log in(ログイン)をクリック
  3. メールアドレス/Google/Microsoft アカウントで認証し、アカウントにログイン

2. ダッシュボードに移動

  1. ログイン後、画面左上の Dashboard(ダッシュボード)をクリック
  2. ダッシュボード画面が開いたら、画面右上のアカウントアイコンをクリック

3. APIキーの管理 → 新規作成

  1. 左のメニューから API Keys(API キーを表示)を選択
  2. Create new secret key(新しいシークレットキーを作成)ボタンをクリック
  3. 任意のキー名(例:MyScriptKey)を入力し、Create を押下

4. APIキーのコピーと保管

  1. 生成されたシークレットキーが表示されるので、右端のコピーアイコンをクリックしてクリップボードに保存

最後に、課金をしたら使えるようになります。(世の中、金なんじゃよ…)

クレジットのチャージ・プラン確認

  • 左メニューのBilling → チャージをしてください。(今はもう、無料枠は無いらしい…)
  • 5$~100$まで課金が出来るそうですが、クレジットの有効期間は1年なので、少なくて良い気がします。
  • チェックボックスが1つありますが、これは自動チャージOKかどうかのチェックです。僕はケチなのでチェックは外しました!!
  • 住所とか、Googleの自動入力で日本語入っちゃいましたがクレジット購入できたので、わざわざ住所を英語とかに直さなくてもいけると思います。

これで生成AIを使うためのキーが手に入りました!しかし、これでもエラーが起きます!!!

Googleのプログラミングの方で、APIキーを設定していないからです!

Apps Script にて、OPENAI_API_KEY を設定

  1. Apps Script に戻り、左サイドメニューの歯車マーク「プロジェクトの設定」
  2. 下にスクロールし、スクリプトプロパティのところで
    左の枠に「OPENAI_API_KEY」と入力
    右の枠に、先ほどコピーしたOpenAIのAPIキーをコピペ

これで、OPENAI_API_KEY=あなた用のAPIキーという事になり、生成AIを使わせてくれるというわけです!コード入力画面に戻り、プログラムを実行してください。

その他=エラーです…実は、何度も何度も失敗してました

おお、分類してくれてますね!(gpt3.5-turboという格安AI君なので、精度は低いかもです)

LLMのモデルは

model: 'gpt-3.5-turbo', 

の gpt-3.5-turbo を、gpt-4o-mini とかに変えたら、もっと良い結果が得られるかもしれません。

試しにgpt-4o-mini にした結果、良くなったかも..??
値段は、3.5-turbo とぶっちゃけ変わらないので、僕はこちらを設定しようと思います。

コメント

タイトルとURLをコピーしました