Google Apps Script で Gメールの楽天カード利用明細を スプレッドシート に出力してみた
やりたいこと
Gメールに送られてくるクレジットカード( 楽天カード ) の利用明細から、利用日や金額を拾い自動でスプレッドシートに転記したい。
ちなみにメールはこんな感じです。
できたこと
こんな感じに、できました!
Apps Script で実行すると...
スプレッドシートに利用明細のデータが出力された!
※「■利用日:」ごと取れてしまいますが、一旦ここで妥協しました。。
青い四角はちょっと情報を隠したかっただけです。
ソース
ソースはこのような感じです。
拙いコードで恐縮です。。。
処理の流れ
処理の流れは次のような感じです。
・GmailApp.searchメソッドでカード利用メールをごっそり取得
・matchメソッドで利用日、利用先、利用金額を取得
・取得したデータをn行×3列の配列にする
・グーグルスプレッドシートに出力
・GmailApp.searchメソッドでカード利用メールをごっそり取得
件名と日付を指定しています。
楽天カードの利用明細メールには速報版のメールもあります。こちらを拾ってしまうとデータ項目数の違いによりエラーになってしまうため、除外するようにしています。
・matchメソッドで利用日、利用先、利用金額を取得
メール1件ごとに、HTMLではなくテキストで取得したメールの本文から利用日、利用先、利用金額を検索し、それぞれ配列に格納します。
それぞれの項目について複数個データがあるため、オプション g を指定することで、条件と一致する全てのデータを取得しています。
(例えば上のメール例の画面では、利用日列には10/15というデータが3つあります。テキスト版だと「■利用日:2022/10/15」というように記載されているので、「■利用日:」で始まる部分を抽出しました。)
これ、let dates = plainBody.match(/■利用日:(.*)/g);
と書くだけでdatesの中身が
のようになるのですね~。便利!
riyousakiとamountsの中身はそれぞれこのような感じになります。
・取得したデータをn行×3列の配列にする
利用日、利用先、利用金額を一旦 gmailInfo という配列に格納します。
gmailInfo.push(dates,riyousaki,amounts);
で3つの配列をがっちゃんこする感じです。
gmailInfoの中身↓
さらに、利用日、利用先、利用金額のデータが、それぞれ縦方向に並ぶようにするために、行と列を入れ替えます。
t_gmailInfoの中身はこのような感じになります。
・グーグルスプレッドシートに出力
appendRowメソッドを使って t_gmailInfo をスプレッドシートに出力します。
終わりに
いろいろ調べて、なんとかGoogle Apps Script でカード利用明細からグーグルスプレッドシートに自動で転記することができました!
詳しい方々がいろいろブログなどに書いてくれているのを見ながらにも関わらず、結構苦労しました、、、
あとプログラミングめっちゃ勉強になりました。一応IT系(コード書かない)の仕事をしているのですが、PG力なさすぎてやべーと思いながらやっていました。
また何かやりたいことを見つけて軽いプログラミングをしてみたいな~と思います。
|