gmailの内容をGoogleスプレッドシートに転記するPythonスクリプト

# 概要
gmailの受信メールの内容をGoogleスプレッドシートに転記したくなったので、Github copilotに聞きながらPythonスクリプトを作ってみました。

# 環境
## 開発環境
- WSL2 Ubuntu 22.04.5 LTS
- VSCode

## 必要なPythonライブラリ
```
$ pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
```

# Google Workspaceの設定
PythonからGoogleのAPIを使えるようにする準備。
## Projectの作成
[Google Cloud Console](https://console.cloud.google.com/)にアクセスし、プロジェクトを作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/16bb68ff-c92d-ca2d-8a8a-921a23b7f609.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/c8bbd740-93b9-9536-f194-873853807a79.png)

## APIの有効化
プロジェクトを選択した状態で、左側のナビゲーションメニューから「APIとサービス」 > 「ライブラリ」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/36505901-dd93-9c23-0f8d-962f561e5467.png)

「Gmail API」と「Google Sheets API」を検索し、それぞれ有効化。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/4dd23e42-25e0-672a-4bec-ce9635b149f8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/657f30e8-5bf9-1a23-d876-812819c0e7cd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/8e7e36df-e0a3-926b-37bf-b73d53d94f43.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/3175828e-ab5f-ee9f-3c79-1c3fc0368106.png)

## OAuth 2.0クライアントIDを作成
「APIとサービス」 > 「認証情報」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/78cf55b2-e679-b7ba-a5d8-b56ad9866105.png)

「認証情報を作成」ボタンをクリックし、「OAuthクライアントID」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/186a0f7e-af10-8f75-b4b0-90afedb16121.png)

「同意画面の構成」を行い、必要な情報を入力。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/e1100616-49f5-bc9f-f7ab-ae297fb70824.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/f742222a-f971-cb20-fc4e-f9e063437ffc.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/bb67dc4d-e984-b011-4425-7aabfc713928.png)

「保存して次へ」

スコープの設定は変更せずに、「保存して次へ」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/943fd142-a772-c9e3-aae6-22539bda2541.png)

テストユーザーに使用するgmailアドレスを追加して、「保存して次へ」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/83988af1-721d-b242-9d1e-898ef52d6693.png)

再度「認証情報を作成」ボタンをクリックし、「OAuthクライアントID」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/186a0f7e-af10-8f75-b4b0-90afedb16121.png)

アプリケーションの種類として「デスクトップアプリ」を選択し、クライアントIDを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/3c7babda-d3eb-01ad-146d-35605c1808f3.png)

作成されたクライアントIDとクライアントシークレットを含むJSONファイル（credentials.json）をダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/4ddd0011-962f-0513-adda-1fae09a6b18e.png)

# スクリプト実行
とあるECサイトの注文確認メールの内容をスプレッドシートに転記するスクリプトを作成してみました。
https://github.com/Littlebit175/pygmail2sheet4ys
```
$ python3 pygmail2sheet4ys.py
```

ブラウザが立ち上がるので、テストユーザーに登録したGoogleアカウントでサインイン。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/d068ba65-8163-e3af-08eb-e345a9872a62.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/8c2a6393-4e85-1c8b-d1c6-1b1110e1ee9b.png)

「続行」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/da41fa3f-de57-402c-edb2-78440083cfd1.png)

※テストユーザーに登録されていないアカウントでログインすると、下図エラーが発生。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/4d68f089-7b52-2e1f-1d54-630445d28b35.png)

「すべて選択」して「続行」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228338/0d6454f2-804e-a1a9-63b0-4d5c23f229be.png)

ブラウザに`The authentication flow has completed. You may close this window.` と表示される。
Pythonスクリプトと同一ディレクトリに、`token.json`が保存される。


# 参考
[Gmail API Python Quickstart](https://developers.google.com/gmail/api/quickstart/python?hl=ja)
[Google Sheets API Python Quickstart](https://developers.google.com/sheets/api/quickstart/python?hl=ja)