Gmail API を利用する-定期的に未読メールを既読にするツール-
みなさん、こんにちはこんばんは。S.Kと申します。
今回の記事はボリュームがあります。13000文字くらいですが、ソースコードが3割くらい占めてます。ソースコードって文字数ありますね。
注意:この記事は有料記事部分があります。
コトの発端
iPhoneのgmailアプリでは、gmailの未読メールがある場合に通知マークがつきます。
iPhoneの画面を見てると、どうしても気になるんですよね。
設定で消せますけど、未読は未読のままなので、どうにかならないものか?と考えたとき、GmailのAPIで解消できないか?例えば、
「10日くらい経っても未読のメールはどうせ読まないから既読にする」
こんな感じのツールが作れればいいなと思い、実際に作ってみました。
なおPCのWebブラウザでも似たようなことはできます、小ネタとして記事の最後に記載します。
対象読者
今回はPythonで実装、説明します。
・Pythonで何か作ってみたい人
・GmailAPIを使ってみたい人
・OAuthの仕組みを理解したい人
必要なGoogleアカウント
・アプリ開発用のGoogleアカウント
・アプリの操作対象となるgmailのGoogleアカウント
上記アプリ開発のものと同じでも異なっていても良いです。
このgmailのアカウントのメールを未読から既読にします。
著者の環境
Mac環境です。今回はPythonで実装するのでWindowsでも同じです
自分の開発環境はEclipse+PyDevです。PydevはEclipse統合開発環境のプラグインです。Pythonのバージョンは3.6ですね。
開発環境はお好きなのを使っていただければ、と思います。僕はJavaでの開発で慣れ親しんだEclipse使ってます。
OAuthの仕組み
GmailAPIではOAuthと呼ばれる仕組みを使い認証、Gmailでの操作をします。
アプリケーションやツールからGmailユーザに対して
「●●したいんだけど、許可していただけますか?」
という伺いをし、ユーザが
「いいですよ」
と許可を出せば、そのアプリケーションからユーザの使うGmailに対して操作ができるようになります。
これは以下の記事がとてもわかりやすいです。
この記事の(31)から(39)の流れを覚えておいてください。
参考までに今回のGmailAPIでの認証を図示すると以下のようになります。大体で良いので認証の流れ、仕組みは頭に入れといてください。
Googleのアクセストークンやリフレッシュトークンの仕様は後述します。
■今回のイメージ図1:最初の許可とアクセストークンの取得
■今回のイメージ図2:アクセストークンでAPI利用
■今回のイメージ図3:アクセストークンの有効期限が切れた場合
Gmail APIを使う準備①:リファレンスを確認
■ APIのリファレンス
■ Python向けのリファレンス
この記事ではPythonで実行することを考えます。まず、丁寧にリファレンスを読んでいきましょう。
Gmail APIを使う準備②: 前提
Prerequisites
To run this quickstart, you'll need:
・Python 2.6 or greater
・The pip package management tool
・A Google account with Gmail enabled
1つ目はPythonのバージョンが2.6以上であること
今回の記事ではPython3.xを利用します。
2つ目はpipが使えることです。これは普段からPython利用してれば使えるはずです。使えない場合は、以下の記事を参照したり、インターネットで調べてください。
3つ目はGmailAPIが有効になっている事です。 今回は開発する用のGoogleアカウントで、Google developers consoleにアクセスします。
ライブラリをクリックします。
ライブラリで「gmail」で検索します。「Gmail API」をクリックします。
「有効にする」をクリックします。
以下のようになっていればAPIが有効になっています。
Gmail APIを使うステップ1
まず、以下にアクセスしてください。
Step 1: Turn on the Gmail API
Click this button to create a new Cloud Platform project and automatically enable the Gmail API:
Enable the Gmail API
In resulting dialog click DOWNLOAD CLIENT CONFIGURATION and save the file credentials.json to your working directory.
(1)[Enable the Gmail API]をクリックします。
(2)以下の画面が表示されるので、適当なプロジェクト名をつけてください。
(3)[NEXT]をクリックします。
(4)[Desktop app]が選択されてることを確認して[Create]をクリックします。
(5)Client IDとClient Secretが表示されます。
ここで[DOWNLOAD CLIENT CONFIGURATION]をクリックし、credentials.jsonをダウンロードします。
ダウンロードされたcredentials.jsonは大切に管理してください。上記Client IDとClient Secretの情報が入ってます。
Gmail APIを使うステップ2
Google Client Libraryをお使いの環境にインストールします。
Step 2: Install the Google Client Library
Run the following command to install the library using pip:
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
See the library's installation page for the alternative installation options.
ちなみに私はPydevを使ってますので、Preferencesから[Python Interpreter]を選択して、使ってるPythonのバージョンを選択した上で、[Install/Unistall with pip]を使って以下のコマンドを叩いています。
Gmail APIを使うステップ3
Step 3: Set up the sample
Create a file named quickstart.py in your working directory and copy in the following code:
サンプルで確認します。
Pythonのサンプルをquickstart.pyとして保存し、ステップ1で取得したcredentials.jsonと同じフォルダにいれます。
コピーは以下でできます。
コピーしたものをquickstart.pyとして保存します。
私の環境で恐縮ですが、プロジェクトを作成し、以下のように配置しています。
quickstart.py
実行してみましょう。
Gmail APIサンプルの実行
実行するとコンソール上に以下のように表示され、ブラウザが立ち上がります。
今回の対象アカウントを選択します。上であればS Kのgmailアカウントです。すると以下のような注意画面が出ます。[詳細]をクリックします。
[XXX(安全ではないページ)に移動]をクリックします。
アプリ側がこのアカウントに対して操作をしていいかどうかの、確認画面が表示されます。[許可]をクリックします。
確認画面が出ます。問題がなければ、[許可]を選択してください。
すると、ブラウザ上には以下のメッセージが表示されます。
コンソール側に戻ると、ラベルの一覧が表示されると思います。
ちなみにブラウザでラベルを追加してみましょう。設定から[TESTAPI]というラベルを追加しました。
先ほどのプログラムを再度実行してみるとコンソール上にちゃんと表示されてます。なので、このメールアカウントの情報を取得できてることがわかります。
アクセストークン・リフレッシュトークンについて
いったん認証の許可がなされると、以下のようにtoken.jsonファイルが出来上がります。次回以降のアクセス・操作については、このtoken.jsonに書かれているアクセストークンを利用します。つまりブラウザでの認証が省略されます。
ただ、アクセストークンには有効期限(1時間)があります。
では、どうしてこの一度認証が済むとこのファイルだけでアクセス・操作ができたままなのでしょうか?
それはこのtoken.json内にリフレッシュトークンと呼ばれるものが記述されており、一定時間経ってアクセストークンの期限が切れると、このリフレッシュトークンを使ってアクセストークンを更新します。
リフレッシュトークンは、
・リフレッシュトークンを6ヶ月使用していない場合
・ユーザーがパスワードを変更した場合
・ユーザーが許可を取り消したりした場合
などに、無効になります。無効になった場合は、改めてブラウザからの認証が必要になります。詳しくは以下を参照ください。
完成版コード
さて、本題に入ります。
まず、完成版のコードを記載します。
ここから先は
¥ 300
この記事が参加している募集
活動費、テキスト購入費に充てたいと思います。宜しくお願い致します。