他の Google API と同様に、Google Ads API は認証と認可に OAuth 2.0 プロトコルを使用します。OAuth 2.0 を使うことで、Google Ads API クライアント アプリケーションは、ユーザーのログイン情報を保存したり処理したりしなくてもユーザーの Google 広告アカウントにアクセスできるようになります。
Google 広告のアクセスモデルについて
Google Ads API を効果的に使用するには、Google 広告のアクセスモデルの仕組みを理解する必要があります。Google 広告アクセスモデル ガイドをお読みになることをおすすめします。
OAuth ワークフロー
Google Ads API を使用する際に使用される一般的なワークフローは 3 つあります。
サービス アカウントのフロー
ワークフローでユーザーの操作が不要な場合は、このワークフローをおすすめします。このワークフローでは、ユーザーが Google 広告アカウントにサービス アカウントを追加する構成手順が必要です。アプリは、サービス アカウントの認証情報を使用して、ユーザーの Google 広告アカウントを管理できるようになります。Python ライブラリは次のように構成されています。
google-ads.yamlファイルまたは YAML 文字列を使用している場合は、次の構成を追加して、ローカル環境の秘密鍵 JSON ファイルへのパスを設定します。json_key_file_path: JSON_KEY_FILE_PATH次に、
load_from_storageまたはload_from_stringメソッドを呼び出します。from google.ads.googleads.client import GoogleAdsClient client = GoogleAdsClient.load_from_storage()dictを使用してライブラリを構成する場合は、次のキーと値のペアを含め、構成dictを渡してload_from_dictメソッドを呼び出します。from google.ads.googleads.client import GoogleAdsClient configuration = { # ... "json_key_file_path": JSON_KEY_FILE_PATH # ... } client = GoogleAdsClient.load_from_dict(configuration)環境変数を使用している場合は、
bash構成または環境に次を追加します。export GOOGLE_ADS_JSON_KEY_FILE_PATH=JSON_KEY_FILE_PATH次に、
load_from_envメソッドを呼び出します。from google.ads.googleads.client import GoogleAdsClient client = GoogleAdsClient.load_from_env() ```
これらの構成方法のいずれかに json_key_file_path 構成オプションが存在し、use_application_default_credentials オプションが False または未設定の場合、ライブラリはサービス アカウント フローを使用して自動的に承認します。
詳細については、サービス アカウントのワークフロー ガイドをご覧ください。
シングル ユーザー認証フロー
このワークフローは、サービス アカウントを使用できない場合に使用できます。このワークフローには、次の 2 つの構成手順が必要です。
Google 広告 API を使用して管理するすべてのアカウントへのアクセス権を 1 人のユーザーに付与します。一般的なアプローチは、ユーザーに Google Ads API MCC アカウントを付与し、その MCC アカウントの下にすべての Google 広告アカウントをリンクすることです。
ユーザーが gcloud CLI や
generate_user_credentialsコード例などのツールを実行して、ユーザーに代わってすべての Google 広告アカウントを管理する権限をアプリに付与します。
ライブラリは、ユーザーの OAuth 2.0 認証情報を使用して次のように初期化できます。
gcloud CLI ツールを使用している場合(推奨)
認証情報を生成するドキュメントに沿って、ローカル環境でアプリケーションのデフォルト認証情報(ADC)を設定します。
google-ads.yamlまたは YAML 文字列に次の構成を追加します。use_application_default_credentials: true次に、
load_from_storageメソッドまたはload_from_stringメソッドを呼び出します。from google.ads.googleads.client import GoogleAdsClient client = GoogleAdsClient.load_from_storage()dictを使用してライブラリを構成する場合は、次の Key-Value ペアを含めてload_from_dictメソッドを呼び出します。from google.ads.googleads.client import GoogleAdsClient configuration = { # ... "use_account_default_credentials": True # ... } client = GoogleAdsClient.load_from_dict(configuration)環境変数を使用している場合は、
bash構成または環境に次を追加します。export GOOGLE_ADS_USE_ACCOUNT_DEFAULT_CREDENTIALS=true次に、
load_from_envメソッドを呼び出します。from google.ads.googleads.client import GoogleAdsClient client = GoogleAdsClient.load_from_env()
OAuth トークンを直接処理する場合
手順に沿ってコンソール プロジェクトを設定し、プロジェクトのクライアント ID とクライアント シークレットを含む JSON ファイルをダウンロードします。
Python クライアント ライブラリのクローンをマシンに作成し、そのディレクトリに移動します。
$ git clone https://github.com/googleads/google-ads-python.git $ cd google-ads-python例を実行します。手順 1 でダウンロードした JSON ファイルの絶対パスを指定します。
$ python examples/authentication/generate_user_credentials.py -c PATH_TO_CREDENTIALS_JSON完了すると、更新トークンがコンソールに出力されます。コピーして、次のステップのために保存します。
次の設定を任意の構成に追加して、ライブラリを構成します。
google-ads.yamlまたは YAML 文字列に次の構成を追加します。client_id: INSERT_OAUTH2_CLIENT_ID_HERE client_secret: INSERT_OAUTH2_CLIENT_SECRET_HERE refresh_token: INSERT_REFRESH_TOKEN_HERE次に、
load_from_storageメソッドまたはload_from_stringメソッドを呼び出します。from google.ads.googleads.client import GoogleAdsClient client = GoogleAdsClient.load_from_storage()dictを使用してライブラリを構成する場合は、次の Key-Value ペアを含めてload_from_dictメソッドを呼び出します。from google.ads.googleads.client import GoogleAdsClient configuration = { # ... "client_id": INSERT_OAUTH2_CLIENT_ID_HERE "client_secret": INSERT_OAUTH2_CLIENT_SECRET_HERE "refresh_token": INSERT_REFRESH_TOKEN_HERE # ... } client = GoogleAdsClient.load_from_dict(configuration)環境変数を使用している場合は、
bash構成または環境に次を追加します。export GOOGLE_ADS_CLIENT_ID=INSERT_OAUTH2_CLIENT_ID_HERE export GOOGLE_ADS_CLIENT_SECRET=INSERT_OAUTH2_CLIENT_SECRET_HERE export GOOGLE_ADS_REFRESH_TOKEN=INSERT_REFRESH_TOKEN_HERE次に、
load_from_envメソッドを呼び出します。from google.ads.googleads.client import GoogleAdsClient client = GoogleAdsClient.load_from_env()
詳細については、シングル ユーザー認証のワークフロー ガイドを参照してください。
マルチユーザー認証フロー
アプリでユーザーがログインし、アプリがユーザーの代わりに Google 広告アカウントを管理することを承認できるようにする場合は、このワークフローをおすすめします。アプリは OAuth 2.0 ユーザー認証情報をビルドして管理します。ライブラリは、ユーザーの認証情報を使用して次のように初期化できます。これは、アプリケーションが実行時に認証フローを実行するか、データストアから認証情報を読み込んで認証情報を取得することを前提としています。
dict は、実行時に認証情報を取得する際に使用する最も簡単な構成メカニズムです。
from google.ads.googleads.client import GoogleAdsClient
configuration = {
# ...
"client_id": client_id
"client_secret": client_secret
"refresh_token": refresh_token
# ...
}
client = GoogleAdsClient.load_from_dict(configuration)
詳しくは、マルチユーザー認証のワークフロー ガイドを参照してください。
手動認証
任意の方法で認証情報を作成し、クライアント クラスを直接インスタンス化して、GoogleAdsClient に手動で提供できます。作成する認証情報オブジェクトが google.auth.credentials.Credentials のインスタンスであると仮定すると、次のように渡すことができます。
from google.ads.googleads.client import GoogleAdsClient
from google.auth import default
# This line retrieves ADCs from the environment. You can use any authentication
# approach as long as the `credentials` variable is an instance of
# `google.auth.credentials.Credentials`
credentials = default(scopes=["https://www.googleapis.com/auth/adwords"])
client = GoogleAdsClient(
credentials=credentials,
# ... insert remaining parameters
)
ユーザーが複数のアカウントを管理している場合はどうなりますか?
ユーザーがアカウントに直接アクセスするか、Google 広告クライアント センター(MCC)アカウントを介して、複数の Google 広告アカウントを管理することは一般的です。Python クライアント ライブラリには、このようなケースを処理する方法を示す次のコード例が用意されています。
get_account_hierarchyのコード例は、Google 広告 MCC アカウントに属するすべてのアカウントのリストを取得する方法を示しています。list_accessible_customersコード例は、ユーザーが直接アクセスできるすべてのアカウントのリストを取得する方法を示しています。これらのアカウントは、login_customer_id設定の有効な値として使用できます。