質問編集履歴

6 前提が間違っていたことを追記しました

ikki

ikki score 11

2019/06/07 08:56  投稿

Google APIのサービスアカウントキーによるOauth認証が出来ない
### **前提・実現したいこと**
Google Cloud Functions でメールの自動返信BOTを作ろうと思い以下のコードを実行しましたが、Oauth認証でbad request error が返って来ます。
クライアントIDによる認証(run_flowでcodeを手入力しました)は出来たのですが サービスアカウントキーを使用する認証ができませんでした。
***当質問はG suiteサービス未利用でもGmail API にサービスキーでアクセスができるだろうという、私の誤解が前提で書かれています。ご回答いただきまして、前提自体が誤りであることがわかりました**  
### **環境**
- WindowsのAtomで実行(Scriptパッケージで実行してます…)
- 下記コードのエラー結果は上記ローカル環境によるものです
- クラウドサービスの動作テストは全てGoogle Cloud Platform の同一プロジェクト内で行っています
- Gsuiteサービスは利用しておりません。 個人利用アカウントで実行しています
**- Gsuiteサービスは利用しておりません。 個人利用アカウントで実行しています**
**ファイル構成**
 -main.py
-requirements.txt
-project.json
### **試したこと**
- クライアントID認証コードでcloud Functions にデプロイして途中まで動作したことを確認しました
(jasonトークンを上書き出来ませんと言われました)
- サービスアカウントキーをcloud storage に保存するプログラムをcloud Functionsデプロイしてサービスアカウントキーが保存できることを確認しました
- キー発行アカウントにAPI管理者とAPI閲覧者の権限を付けました
(同一アカウントにストレージ管理者の権限も与えcloud storage の認証も受けています)
### コード
main.py
```python
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]='project.json'
from google.oauth2 import service_account
import googleapiclient.discovery
def run_m():
   SCOPES = ['https://www.googleapis.com/auth/gmail.readonly',
             'https://www.googleapis.com/auth/gmail.compose',
             'https://www.googleapis.com/auth/gmail.labels']
   json_file = 'project.json'
   credentials = service_account.Credentials.from_service_account_file(json_file, scopes=SCOPES)
   delegated_credentials = credentials.with_subject('"****t@******.com"')
   service = googleapiclient.discovery.build('gmail', 'v1', credentials=credentials)
   request = {'labelIds': ['Label_4501394728387839841'],
              #'labelFilterAction' : "include",
              'topicName': 'mytopic'}
   res = service.users().watch(userId='me', body=request).execute()
```
project.json
```project.json
{
 "type": "service_account",
 "project_id": "project",
 "private_key_id": "******************",
 "private_key": "-----BEGIN PRIVATE KEY-----\********\n-----END PRIVATE KEY-----\n",
 "client_email": "****t@******.com",
 "client_id": "***********",
 "auth_uri": "https://accounts.google.com/o/oauth2/auth",
 "token_uri": "https://oauth2.googleapis.com/token",
 "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
 "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/account%40project.iam.gserviceaccount.com"
}
```
### エラー
Traceback (most recent call last):
 File "C:\Users\user\deploy\main.py", line 38, in <module>
   run_m()
 File "C:\Users\user\deploy\main.py", line 31, in run_m
   res = service.users().watch(userId='me', body=request).execute()
 File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\googleapiclient\_helpers.py", line 130, in positional_wrapper
   return wrapped(*args, **kwargs)
 File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\googleapiclient\http.py", line 851, in execute
   raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/gmail/v1/users/me/watch?alt=json returned "Bad Request">
[Finished in 5.113s]
  • Python

    19086 questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Google API

    966 questions

    Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

  • Python 3.x

    14317 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Google

    1220 questions

    Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

5 Gsuite未利用の旨、追記しました

ikki

ikki score 11

2019/06/06 10:02  投稿

Google APIのサービスアカウントキーによるOauth認証が出来ない
### **前提・実現したいこと**
Google Cloud Functions でメールの自動返信BOTを作ろうと思い以下のコードを実行しましたが、Oauth認証でbad request error が返って来ます。
クライアントIDによる認証(run_flowでcodeを手入力しました)は出来たのですが サービスアカウントキーを使用する認証ができませんでした。
### **環境**
- WindowsのAtomで実行(Scriptパッケージで実行してます…)
- 下記コードのエラー結果は上記ローカル環境によるものです
- クラウドサービスの動作テストは全てGoogle Cloud Platform の同一プロジェクト内で行っています
- Gsuiteサービスは利用しておりません。 個人利用アカウントで実行しています  
**ファイル構成**
 -main.py
-requirements.txt
-project.json
### **試したこと**
- クライアントID認証コードでcloud Functions にデプロイして途中まで動作したことを確認しました
(jasonトークンを上書き出来ませんと言われました)
- サービスアカウントキーをcloud storage に保存するプログラムをcloud Functionsデプロイしてサービスアカウントキーが保存できることを確認しました
- キー発行アカウントにAPI管理者とAPI閲覧者の権限を付けました
(同一アカウントにストレージ管理者の権限も与えcloud storage の認証も受けています)
### コード
main.py
```python
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]='project.json'
from google.oauth2 import service_account
import googleapiclient.discovery
def run_m():
   SCOPES = ['https://www.googleapis.com/auth/gmail.readonly',
             'https://www.googleapis.com/auth/gmail.compose',
             'https://www.googleapis.com/auth/gmail.labels']
   json_file = 'project.json'
   credentials = service_account.Credentials.from_service_account_file(json_file, scopes=SCOPES)
   delegated_credentials = credentials.with_subject('"****t@******.com"')
   service = googleapiclient.discovery.build('gmail', 'v1', credentials=credentials)
   request = {'labelIds': ['Label_4501394728387839841'],
              #'labelFilterAction' : "include",
              'topicName': 'mytopic'}
   res = service.users().watch(userId='me', body=request).execute()
```
project.json
```project.json
{
 "type": "service_account",
 "project_id": "project",
 "private_key_id": "******************",
 "private_key": "-----BEGIN PRIVATE KEY-----\********\n-----END PRIVATE KEY-----\n",
 "client_email": "****t@******.com",
 "client_id": "***********",
 "auth_uri": "https://accounts.google.com/o/oauth2/auth",
 "token_uri": "https://oauth2.googleapis.com/token",
 "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
 "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/account%40project.iam.gserviceaccount.com"
}
```
### エラー
Traceback (most recent call last):
 File "C:\Users\user\deploy\main.py", line 38, in <module>
   run_m()
 File "C:\Users\user\deploy\main.py", line 31, in run_m
   res = service.users().watch(userId='me', body=request).execute()
 File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\googleapiclient\_helpers.py", line 130, in positional_wrapper
   return wrapped(*args, **kwargs)
 File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\googleapiclient\http.py", line 851, in execute
   raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/gmail/v1/users/me/watch?alt=json returned "Bad Request">
[Finished in 5.113s]
  • Python

    19086 questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Google API

    966 questions

    Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

  • Python 3.x

    14317 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Google

    1220 questions

    Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

4 表題を『現況』→『前提・実現したいこと』へ変更しました

ikki

ikki score 11

2019/06/05 09:00  投稿

Google APIのサービスアカウントキーによるOauth認証が出来ない
### **現状**
### **前提・実現したいこと**
Google Cloud Functions でメールの自動返信BOTを作ろうと思い以下のコードを実行しましたが、Oauth認証でbad request error が返って来ます。
クライアントIDによる認証(run_flowでcodeを手入力しました)は出来たのですが サービスアカウントキーを使用する認証ができませんでした。
### **環境**
- WindowsのAtomで実行(Scriptパッケージで実行してます…)
- 下記コードのエラー結果は上記ローカル環境によるものです
- クラウドサービスの動作テストは全てGoogle Cloud Platform の同一プロジェクト内で行っています
**ファイル構成**
 -main.py
-requirements.txt
-project.json
 
 
### **試したこと**
- クライアントID認証コードでcloud Functions にデプロイして途中まで動作したことを確認しました
(jasonトークンを上書き出来ませんと言われました)
- サービスアカウントキーをcloud storage に保存するプログラムをcloud Functionsデプロイしてサービスアカウントキーが保存できることを確認しました
 
- キー発行アカウントにAPI管理者とAPI閲覧者の権限を付けました
(同一アカウントにストレージ管理者の権限も与えcloud storage の認証も受けています)
### コード
main.py
```python
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]='project.json'
from google.oauth2 import service_account
import googleapiclient.discovery
def run_m():
   SCOPES = ['https://www.googleapis.com/auth/gmail.readonly',
             'https://www.googleapis.com/auth/gmail.compose',
             'https://www.googleapis.com/auth/gmail.labels']
   json_file = 'project.json'
   credentials = service_account.Credentials.from_service_account_file(json_file, scopes=SCOPES)
   delegated_credentials = credentials.with_subject('"****t@******.com"')
   service = googleapiclient.discovery.build('gmail', 'v1', credentials=credentials)
   request = {'labelIds': ['Label_4501394728387839841'],
              #'labelFilterAction' : "include",
              'topicName': 'mytopic'}
   res = service.users().watch(userId='me', body=request).execute()
```
project.json
```project.json
{
 "type": "service_account",
 "project_id": "project",
 "private_key_id": "******************",
 "private_key": "-----BEGIN PRIVATE KEY-----\********\n-----END PRIVATE KEY-----\n",
 "client_email": "****t@******.com",
 "client_id": "***********",
 "auth_uri": "https://accounts.google.com/o/oauth2/auth",
 "token_uri": "https://oauth2.googleapis.com/token",
 "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
 "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/account%40project.iam.gserviceaccount.com"
}
```
### エラー
Traceback (most recent call last):
 File "C:\Users\user\deploy\main.py", line 38, in <module>
   run_m()
 File "C:\Users\user\deploy\main.py", line 31, in run_m
   res = service.users().watch(userId='me', body=request).execute()
 File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\googleapiclient\_helpers.py", line 130, in positional_wrapper
   return wrapped(*args, **kwargs)
 File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\googleapiclient\http.py", line 851, in execute
   raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/gmail/v1/users/me/watch?alt=json returned "Bad Request">
[Finished in 5.113s]
  • Python

    19086 questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Google API

    966 questions

    Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

  • Python 3.x

    14317 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Google

    1220 questions

    Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

3 環境に詳細を追記しました

ikki

ikki score 11

2019/06/05 08:56  投稿

Google APIのサービスアカウントキーによるOauth認証が出来ない
### **現状**
Google Cloud Functions でメールの自動返信BOTを作ろうと思い以下のコードを実行しましたが、Oauth認証でbad request error が返って来ます。
クライアントIDによる認証(run_flowでcodeを手入力しました)は出来たのですが サービスアカウントキーを使用する認証ができませんでした。
### **環境**
- WindowsのAtomで実行(Scriptパッケージで実行してます…)
- 全てGoogle Cloud Platform の同一プロジェクト内で行っています
- 下記コードのエラー結果は上記ローカル環境によるものです
- クラウドサービスの動作テストは全てGoogle Cloud Platform の同一プロジェクト内で行っています
**ファイル構成**
 -main.py
-requirements.txt
-project.json
### **試したこと**
- クライアントID認証コードでcloud Functions にデプロイして途中まで動作したことを確認しました
(jasonトークンを上書き出来ませんと言われました)
- サービスアカウントキーをcloud storage に保存するプログラムをcloud Functionsデプロイしてサービスアカウントキーが保存できることを確認しました
- キー発行アカウントにAPI管理者とAPI閲覧者の権限を付けました
(同一アカウントにストレージ管理者の権限も与えcloud storage の認証も受けています)
### コード
main.py
```python
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]='project.json'
from google.oauth2 import service_account
import googleapiclient.discovery
def run_m():
   SCOPES = ['https://www.googleapis.com/auth/gmail.readonly',
             'https://www.googleapis.com/auth/gmail.compose',
             'https://www.googleapis.com/auth/gmail.labels']
   json_file = 'project.json'
   credentials = service_account.Credentials.from_service_account_file(json_file, scopes=SCOPES)
   delegated_credentials = credentials.with_subject('"****t@******.com"')
   service = googleapiclient.discovery.build('gmail', 'v1', credentials=credentials)
   request = {'labelIds': ['Label_4501394728387839841'],
              #'labelFilterAction' : "include",
              'topicName': 'mytopic'}
   res = service.users().watch(userId='me', body=request).execute()
```
project.json
```project.json
{
 "type": "service_account",
 "project_id": "project",
 "private_key_id": "******************",
 "private_key": "-----BEGIN PRIVATE KEY-----\********\n-----END PRIVATE KEY-----\n",
 "client_email": "****t@******.com",
 "client_id": "***********",
 "auth_uri": "https://accounts.google.com/o/oauth2/auth",
 "token_uri": "https://oauth2.googleapis.com/token",
 "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
 "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/account%40project.iam.gserviceaccount.com"
}
```
### エラー
Traceback (most recent call last):
 File "C:\Users\user\deploy\main.py", line 38, in <module>
   run_m()
 File "C:\Users\user\deploy\main.py", line 31, in run_m
   res = service.users().watch(userId='me', body=request).execute()
 File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\googleapiclient\_helpers.py", line 130, in positional_wrapper
   return wrapped(*args, **kwargs)
 File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\googleapiclient\http.py", line 851, in execute
   raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/gmail/v1/users/me/watch?alt=json returned "Bad Request">
[Finished in 5.113s]
  • Python

    19086 questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Google API

    966 questions

    Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

  • Python 3.x

    14317 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Google

    1220 questions

    Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

2 ファイル構成でproject.jsonが抜けていましたので追記しました

ikki

ikki score 11

2019/06/05 08:51  投稿

Google APIのサービスアカウントキーによるOauth認証が出来ない
### **現状**
Google Cloud Functions でメールの自動返信BOTを作ろうと思い以下のコードを実行しましたが、Oauth認証でbad request error が返って来ます。
クライアントIDによる認証(run_flowでcodeを手入力しました)は出来たのですが サービスアカウントキーを使用する認証ができませんでした。
### **環境**
- WindowsのAtomで実行(Scriptパッケージで実行してます…)
- 全てGoogle Cloud Platform の同一プロジェクト内で行っています
**ファイル構成**
 -main.py
-requirements.txt
-project.json
### **試したこと**
- クライアントID認証コードでcloud Functions にデプロイして途中まで動作したことを確認しました
(jasonトークンを上書き出来ませんと言われました)
- サービスアカウントキーをcloud storage に保存するプログラムをcloud Functionsデプロイしてサービスアカウントキーが保存できることを確認しました
- キー発行アカウントにAPI管理者とAPI閲覧者の権限を付けました
(同一アカウントにストレージ管理者の権限も与えcloud storage の認証も受けています)
### コード
main.py
```python
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]='project.json'
from google.oauth2 import service_account
import googleapiclient.discovery
def run_m():
   SCOPES = ['https://www.googleapis.com/auth/gmail.readonly',
             'https://www.googleapis.com/auth/gmail.compose',
             'https://www.googleapis.com/auth/gmail.labels']
   json_file = 'project.json'
   credentials = service_account.Credentials.from_service_account_file(json_file, scopes=SCOPES)
   delegated_credentials = credentials.with_subject('mailing-bot@property-information.iam.gserviceaccount.com')
   delegated_credentials = credentials.with_subject('"****t@******.com"')
   service = googleapiclient.discovery.build('gmail', 'v1', credentials=credentials)
   request = {'labelIds': ['Label_4501394728387839841'],
              #'labelFilterAction' : "include",
              'topicName': 'mytopic'}
   res = service.users().watch(userId='me', body=request).execute()
```
project.json
```project.json
{
 "type": "service_account",
 "project_id": "project",
 "private_key_id": "******************",
 "private_key": "-----BEGIN PRIVATE KEY-----\********\n-----END PRIVATE KEY-----\n",
 "client_email": "****t@******.com",
 "client_id": "***********",
 "auth_uri": "https://accounts.google.com/o/oauth2/auth",
 "token_uri": "https://oauth2.googleapis.com/token",
 "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
 "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/account%40project.iam.gserviceaccount.com"
}
```
### エラー
Traceback (most recent call last):
 File "C:\Users\user\deploy\main.py", line 38, in <module>
   run_m()
 File "C:\Users\user\deploy\main.py", line 31, in run_m
   res = service.users().watch(userId='me', body=request).execute()
 File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\googleapiclient\_helpers.py", line 130, in positional_wrapper
   return wrapped(*args, **kwargs)
 File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\googleapiclient\http.py", line 851, in execute
   raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/gmail/v1/users/me/watch?alt=json returned "Bad Request">
[Finished in 5.113s]
  • Python

    19086 questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Google API

    966 questions

    Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

  • Python 3.x

    14317 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Google

    1220 questions

    Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

1 ファイル構成にproject.jsoが抜けていたので追記しました

ikki

ikki score 11

2019/06/05 08:41  投稿

Google APIのサービスアカウントキーによるOauth認証が出来ない
### **現状**
Google Cloud Functions でメールの自動返信BOTを作ろうと思い以下のコードを実行しましたが、Oauth認証でbad request error が返って来ます。
クライアントIDによる認証(run_flowでcodeを手入力しました)は出来たのですが サービスアカウントキーを使用する認証ができませんでした。
### **環境**
- WindowsのAtomで実行(Scriptパッケージで実行してます…)
- 全てGoogle Cloud Platform の同一プロジェクト内で行っています
**ファイル構成**
 -main.py
-requirements.txt
-project.json  
### **試したこと**
- クライアントID認証コードでcloud Functions にデプロイして途中まで動作したことを確認しました
(jasonトークンを上書き出来ませんと言われました)
- サービスアカウントキーをcloud storage に保存するプログラムをcloud Functionsデプロイしてサービスアカウントキーが保存できることを確認しました
- キー発行アカウントにAPI管理者とAPI閲覧者の権限を付けました
(同一アカウントにストレージ管理者の権限も与えcloud storage の認証も受けています)
### コード
main.py
```python
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]='project.json'
from google.oauth2 import service_account
import googleapiclient.discovery
def run_m():
   SCOPES = ['https://www.googleapis.com/auth/gmail.readonly',
             'https://www.googleapis.com/auth/gmail.compose',
             'https://www.googleapis.com/auth/gmail.labels']
   json_file = 'project.json'
   credentials = service_account.Credentials.from_service_account_file(json_file, scopes=SCOPES)
   delegated_credentials = credentials.with_subject('mailing-bot@property-information.iam.gserviceaccount.com')
   service = googleapiclient.discovery.build('gmail', 'v1', credentials=credentials)
   request = {'labelIds': ['Label_4501394728387839841'],
              #'labelFilterAction' : "include",
              'topicName': 'mytopic'}
   res = service.users().watch(userId='me', body=request).execute()
```
project.json
```project.json
{
 "type": "service_account",
 "project_id": "project",
 "private_key_id": "******************",
 "private_key": "-----BEGIN PRIVATE KEY-----\********\n-----END PRIVATE KEY-----\n",
 "client_email": "****t@******.com",
 "client_id": "***********",
 "auth_uri": "https://accounts.google.com/o/oauth2/auth",
 "token_uri": "https://oauth2.googleapis.com/token",
 "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
 "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/account%40project.iam.gserviceaccount.com"
}
```
### エラー
Traceback (most recent call last):
 File "C:\Users\user\deploy\main.py", line 38, in <module>
   run_m()
 File "C:\Users\user\deploy\main.py", line 31, in run_m
   res = service.users().watch(userId='me', body=request).execute()
 File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\googleapiclient\_helpers.py", line 130, in positional_wrapper
   return wrapped(*args, **kwargs)
 File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\googleapiclient\http.py", line 851, in execute
   raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/gmail/v1/users/me/watch?alt=json returned "Bad Request">
[Finished in 5.113s]
  • Python

    19086 questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Google API

    966 questions

    Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

  • Python 3.x

    14317 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Google

    1220 questions

    Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る