月別アーカイブ: 2018年3月

ネットショッピングの自動配信メール(Gmail)を期間指定で検索して、使った合計金額を表示するPythonスクリプトを作ってみた

みなさんはネットショッピングしてますか? 私はいろんなものをほとんどネットで購入してます。最近は便利になりましたよね〜(^^) でも、便利だからと言ってバンバン購入してたら、去年1年でどのくらい使ったんだろうと気になってしまいました。(^^; そこで今回は、ネットショッピングで自動配信される購入確認メール(Gmail)を期間を指定して検索し、合計金額を表示するPythonスクリプトを作ってみたので紹介します。 単に件名(日本語OK)やFrom、日時での検索だけでも使えるし、検索結果をテキストファイルとして出力もできるので便利じゃないかなと思います。(^^) 尚、確認した環境は Windows10 Python 3.6 になります。 GmailをPythonで検索するには Eメールの汎用的なプロトコルのPOP3やIMAPを使う方法とGoogleが公開してるAPIを使う方法の3通りあるようです。 詳しくは以下のホームページを参考に。 ゼロからはじめるPython(22) PythonでGmailのメールを確認しよう | マイナビニュース このページによるとPOP3はセキュリティ的に推奨されないようで、私はAPIは登録が面倒くさそうだったので最初はIMAPで作ってました。 こちらのサイトを参考にして、これだと全検索か未読検索しか出来ないので検索方法も調べて(*)そこそこ出来たんですが、件名等に日本語が入ると全然ダメでした。(><) こちらのサイトを参考にエンコードを変えたり色々試しましたがダメだったのでIMAPは断念してAPIを使うことにしました。 (*)例えば、 件名:iPhone X From: news_japan@insideapple.apple.com 期間:2018/03/01〜2018/03/20 で検索したい場合はgmail.searchの内容を以下のようにすれば検索できます。 gmail.search(None,'(SUBJECT "iPhone X" FROM "news_japan@insideapple.apple.com" SENTSINCE "01-Mar-2018" SENTBEFORE "20-Mar-2018")')日本語が入るとダメですが、IMAPを試したい方はやってみて下さい。 準備 Google API導入 先程のマイナビニュースかこちらのサイト(PythonでGmailを使う(Google API)【動画付】 | SEO白書)を参考にしてGmail APIを登録して、client_secret.jsonをダウンロードして下さい。(マイナビニュースサイトの説明ではclient_id.jsonでしたが、client_secret.jsonで大丈夫です) また、Gmail APIを使うには、google-api-python-clientモジュールも必要なのでコマンドプロンプトから pip install google-api-python-clientを実行してPythonにインストールして下さい。 Pythonスクリプト 以下のブログが大変参考になりました。 pythonでgmailのメールを受信、slackに通知 - Qiita このブログで紹介されてるPython3版gmailapi.pyをベースにしました。 以下のリンクからスクリプトをダウンロードして下さい。 gmailapi.pyダウンロード Dropbox - gmailapi gmailSearch.pyダウンロード Dropbox - gmailSearch また、本スクリプトのバッチファイルを作ってショートカットをデスクトップ等に置いておくと便利です。 以下からダウンロードして下さい。 gmailSearch.batダウンロード Dropbox - gmailSearch.bat 以上3つのファイルを上でダウンロードしたclient_secret.jsonと同じフォルダに保存して下さい。 使ってみる ここでは、Amazonから自動配信されたメールを期間指定で検索して、合計金額を表示する例で説明します。 ▼例えば、このようなメールです。 件名は毎回このような感じなので、件名の検索ワードは「Amazon.co.jp ご注文の確認」にします。 ▼また、金額表示の直前部分は以下のようになってます。 なので、検索する金額の直前のワードは「クレジットカード(JCB): ¥ 」、金額直後は今回は特にないので「Enter」にします。 本スクリプトは、この直前直後のワードに挟まれた部分を金額として抽出します。 尚、金額数字の前後に空白がある場合は、空白まで含めた検索ワードにして下さい。 また今回は、去年(2017年)の合計金額を知りたいので開始日を2017/01/01、終了日を2017/12/31とします。 ▼バッチファイルをダブルクリックして、件名、開始日、終了日を入力 ▼初回起動時のみ認証画面が立ち上がるので、使うGmailアドレスを指定して許可します。 ▼表示されたコードをコピーして ▼コマンドプロンプトにペースト これで、これ以降は認証は不要です。 ▼続けて金額の直前、直後のワードを入力すると ▼しばらく待つと検索結果と合計金額が表示されます。 結果をファイルに出力したければ、yを入力(不要ならEnter)すれば ▼Pythonスクリプトと同フォルダに、日時ファイル名のテキストファイルが保存されます。 ▼その後、今回使った検索ワードを保存するか聞いてくるので、また使いたいならyを入力(不要ならEnter) ▼ Pythonスクリプトと同フォルダに、gmailSearch.iniというファイル名で保存されます。 ▼次回からは保存した検索ワードが番号付きで表示されるので、また検索したい時は番号を入力して下さい。 ▼違うワードで検索したい場合は、そのままワードを入力して下さい。最後のところでワード保存を選択すれば、次回からは新しいワードも番号付きになってます。 ▼事前に検索したいワードを保存したい場合は、gmailSearch.iniに追記すればOKです。(utf-8で保存して下さい。) [ ]で括った部分はキーワードなので削除しないで下さい。また、ワードがない場合は空行にせずに詰めて(上記fromのように)記述して下さい。 ▼ちなみに出力したファイルは、各検索結果の先頭に何番目の検索結果か(No.)と日付、件名、金額が表示されてます。 ▼最下行には検索した期間、期間内合計金額、期間内最高購入額、最高購入時のNo.と日付が表示されます。 最後に いかがでしょうか? 私は今回の結果を見て、鼻血が出そうになりました。(^^; 255,186円!!! 思ったよりかなり多かったので、ファイルで詳細を調べて反省しようと思います。(^^; また、今回は合計金額を表示する方法を紹介しましたが、金額直前直後のワードを指定しなければ(Enter)、単に件名やFrom、日付でGmailを検索できます。 皆さんもお試し下さい。(^^) happyChappy(@happyChappy1115)でした。 Sponsored Link Posted from するぷろ for iOS.