0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GASでAmazonの購入金額をgoogle calenderに記録する

Last updated at Posted at 2022-05-19

日々プログラミングの勉強を独学でやっている、文系大学生です。
拙いコードですかご容赦ください。
今回は、gasでgmail取得をやってみたいと思います。

実現したいこと

  • Gmailから購入金額を取得する
    (Amazonでは購入すると購入金額がgmailに届きます。)
  • 取得したデータをgoogle calenderに追加する。
  • 毎日夜に実行して、自分は購入するだけで確認することなく、自動で記録する。

どうやってやるか

Gmailから購入金額を取得する

 gmailの検索機能をgas経由で利用する(query)
 メールの本文から正規表現を使って金額だけを抽出

取得したデータをgoogle calenderに追加する。

 gasで自分のgooglecalenderにアクセスして記録する

夜に実行して、自分は購入するだけで確認することなく、自動で記録する。

 毎夜実行し(gasのトリガーで定期的に実行)、実行されたものを
 既読することによって二重に記録されることを防ぐ。
 しかし最初だけは過去のメールを参照してしまいます。

全コード

function amazonBuy() {
  const query = 'is:unread "お客様のご注文を承ったことをお知らせいたします"';
  const threads = GmailApp.search(query,0,10);
  const all = GmailApp.getMessagesForThreads(threads);
  
  for(let i=0;i<10;i++)
  {
    
        if(threads[i])
          {
            threads[i].markRead();//既読にします
           let message =threads[i].getMessages();
          
          
           let sentense = message[0].getPlainBody();
           console.log(sentense);
            let day = message[0].getDate();
            console.log(day);
            //googleカレンダーの設定です
            let description = sentense.match(/注文合計: ¥ [0-9,]*/);
            let id = '';//自分のIDを入力してください。基本gmailアドレスだと思います
            let calender = CalendarApp.getCalendarById(id);
            let title = `AMAZON ${description}`;
            let startTime = day;
            let endTime = day;

            let money = sentense.match(/注文合計: ¥ [0-9,]*/)[0].replace('注文合計: ¥ ', '');//正規表現で取得します
            console.log(money);
            
            let options ={
              description:description[0]
            }

          let event = calender.createEvent(title,startTime,endTime,options);

          event.setColor(CalendarApp.EventColor.MAUVE);//色は自分で選択してください


            
          }  
  }
  

}

解説

function amazonBuy() {
  const query = 'is:unread "お客様のご注文を承ったことをお知らせいたします"';
  const threads = GmailApp.search(query,0,10);
  const all = GmailApp.getMessagesForThreads(threads);

gmailはスレッドと言うまとまりの中に、実際のメールがまとめられているので、まずはスレッドを検索してそれを調整することによって欲しいデータが取れます。
Amazonで購入すると、お客様のご注文を承ったことをお知らせいたしますと言う文字列がどの本文にもあることがわかり、Amazonのみが取得できました。(あくまで僕の場合はです。)

for(let i=0;i<10;i++)
  {
    
        if(threads[i])
          {
            threads[i].markRead();//既読にします
           let message =threads[i].getMessages();
          
          
           let sentense = message[0].getPlainBody();
           console.log(sentense);
            let day = message[0].getDate();
            console.log(day);
            //googleカレンダーの設定です
            let description = sentense.match(/注文合計: ¥ [0-9,]*/);
            let id = '';//自分のIDを入力してください。基本gmailアドレスだと思います
            let calender = CalendarApp.getCalendarById(id);
            let title = `AMAZON ${description}`;
            let startTime = day;
            let endTime = day;

            let money = sentense.match(/注文合計: ¥ [0-9,]*/)[0].replace('注文合計: ¥ ', '');//正規表現で取得します
            console.log(money);
            
            let options ={
              description:description[0]
            }

          let event = calender.createEvent(title,startTime,endTime,options);

          event.setColor(CalendarApp.EventColor.MAUVE);//色は自分で選択してください
         
          }  
  }
 
}

あとは、forで回し、スレッドがある場合のみ実行されるようにします。
googleカレンダーの設定は別の人に任せます。

まとめ

まずは、実務経験が積めるようにしたいです
エンジニアへの道は険しいですが頑張ろうと思います

参考書籍
詳解! Google Apps Script完全入門 [第3版] 単行本 – 2021/7/6
ダウンロード.jpeg

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?